OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4265|回复: 10

遇到问题了求助大家~关于L6218E 头文件也添加了~

[复制链接]

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
发表于 2016-7-7 16:30:47 | 显示全部楼层 |阅读模式
50金钱
.\Flash\Obj\output.axf: Error: L6218E: Undefined symbol acc (referred from mpu9250.o).
.\Flash\Obj\output.axf: Error: L6218E: Undefined symbol gyr (referred from mpu9250.o).
.\Flash\Obj\output.axf: Error: L6218E: Undefined symbol mag (referred from mpu9250.o).
.\Flash\Obj\output.axf: Error: L6218E: Undefined symbol tmp (referred from mpu9250.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 4 error messages.
".\Flash\Obj\output.axf" - 4 Error(s), 4 Warning(s).
Target not created.
Build Time Elapsed:  00:00:35[mw_shl_code=c,true]#ifndef _MPU9250_H_
#define _MPU9250_H_
#include "stm32f4xx.h"
#include "arm_math.h"
#include "spi.h"

#define G 9.86
#define M 0.27
#define PI 3.14159265358979f
//10000GS(¸ßË1)μèóú1T(ìØË1à-)£¬μØ′Å3¡Ô¼0.6Gs
//5883êä3ö-2048-2047£¬3¬á¿3ìoó£¬êä3öÎa-4096
#define MPU_ACCE_K (8 * G / 32768.0)                        //μ¥λ»»Ë㣬½«LSB»ˉÎam*s^-2£¬Ç°ÃæμÄ"2"Dè¸ù¾Yá¿3ìDT¸Ä
#define MPU_GYRO_K (1000 / 32768.0 * PI / 180)        //μ¥λ»»Ë㣬½«LSB»ˉÎarad/s
#define MPU_MAGN_K (49.12 / 32760.0)                        //μ¥λ»»Ë㣬½«LSB»ˉÎaGs
#define MPU_TEMP_K (0.002995177763f)                        //degC/LSB

#define MPU_GYRO_ZERO_CALI_FACT 512                                //íóÂYòÇáãμãD£Õy2éÑù′Îêy£¬512′ÎÔ¼600ms£¬Dè±£3ÖíóÂYòǾ2Ö1
#define MPU_CORRECTION_FLASH     0x080FF000                //′æ′¢D£Õyêy¾YμÄFLASHμØÖ·£¬SIZE=6*3*4×Ö½ú
/*
|     |      ACCELEROMETER      |        GYROSCOPE        |
| LPF | BandW | Delay  | Sample | BandW | Delay  | Sample |
+-----+-------+--------+--------+-------+--------+--------+
|  0  | 260Hz |    0ms |  1kHz  | 256Hz | 0.98ms |  8kHz  |
|  1  | 184Hz |  2.0ms |  1kHz  | 188Hz |  1.9ms |  1kHz  |
|  2  |  94Hz |  3.0ms |  1kHz  |  98Hz |  2.8ms |  1kHz  |
|  3  |  44Hz |  4.9ms |  1kHz  |  42Hz |  4.8ms |  1kHz  |
|  4  |  21Hz |  8.5ms |  1kHz  |  20Hz |  8.3ms |  1kHz  |
|  5  |  10Hz | 13.8ms |  1kHz  |  10Hz | 13.4ms |  1kHz  |
|  6  |   5Hz | 19.0ms |  1kHz  |   5Hz | 18.6ms |  1kHz  |
|  7  | -- Reserved -- |  1kHz  | -- Reserved -- |  8kHz  |
*/
typedef enum {
        MPU_GYRO_LPS_250HZ   = 0x00,
        MPU_GYRO_LPS_184HZ   = 0x01,
        MPU_GYRO_LPS_92HZ    = 0x02,
        MPU_GYRO_LPS_41HZ    = 0x03,
        MPU_GYRO_LPS_20HZ    = 0x04,
        MPU_GYRO_LPS_10HZ    = 0x05,
        MPU_GYRO_LPS_5HZ     = 0x06,
        MPU_GYRO_LPS_DISABLE = 0x07,
} MPU_GYRO_LPF_TypeDef;

typedef enum {
        MPU_ACCE_LPS_460HZ   = 0x00,
        MPU_ACCE_LPS_184HZ   = 0x01,
        MPU_ACCE_LPS_92HZ    = 0x02,
        MPU_ACCE_LPS_41HZ    = 0x03,
        MPU_ACCE_LPS_20HZ    = 0x04,
        MPU_ACCE_LPS_10HZ    = 0x05,
        MPU_ACCE_LPS_5HZ     = 0x06,
        MPU_ACCE_LPS_DISABLE = 0x08,
} MPU_ACCE_LPF_TypeDef;

typedef enum {
        MPU_GYRO_FS_250  = 0x00,
        MPU_GYRO_FS_500  = 0x08,
        MPU_GYRO_FS_1000 = 0x10,
        MPU_GYRO_FS_2000 = 0x18,
} MPU_GYRO_FS_TypeDef;

typedef enum {
        MPU_ACCE_FS_2G  = 0x00,
        MPU_ACCE_FS_4G  = 0x08,
        MPU_ACCE_FS_8G  = 0x10,
        MPU_ACCE_FS_16G = 0x18,
} MPU_ACCE_FS_TypeDef;

typedef enum {
        MPU_READ_ACCE = 1 << 0,
        MPU_READ_TEMP = 1 << 1,
        MPU_READ_GYRO = 1 << 2,
        MPU_READ_MAGN = 1 << 3,
        MPU_READ_ALL  = 0x0F,
} MPU_READ_TypeDef;

typedef enum {
        MPU_CORRECTION_PX = 0x01,
        MPU_CORRECTION_NX = 0x02,
        MPU_CORRECTION_PY = 0x03,
        MPU_CORRECTION_NY = 0x04,
        MPU_CORRECTION_PZ = 0x05,
        MPU_CORRECTION_NZ = 0x06,
        MPU_CORRECTION_GYRO = 0x07,
        MPU_CORRECTION_CALCX = 0x08,
        MPU_CORRECTION_CALCY = 0x09,
        MPU_CORRECTION_CALCZ = 0x0A,
        MPU_CORRECTION_SAVE = 0x0B,
        MPU_CORRECTION_CIRCLE = 0x0C,
        MPU_CORRECTION_CIRCLEZ = 0x0D,
} MPU_CORRECTION_TypeDef;

/* ---- MPU6500 Reg In MPU9250 ---------------------------------------------- */

#define MPU6500_I2C_ADDR            ((u8)0xD0)
#define MPU6500_DEV_ID              ((u8)0x71)  // In MPU9250

#define MPU6500_SELF_TEST_XG        ((u8)0x00)
#define MPU6500_SELF_TEST_YG        ((u8)0x01)
#define MPU6500_SELF_TEST_ZG        ((u8)0x02)
#define MPU6500_SELF_TEST_XA        ((u8)0x0D)
#define MPU6500_SELF_TEST_YA        ((u8)0x0E)
#define MPU6500_SELF_TEST_ZA        ((u8)0x0F)
#define MPU6500_XG_OFFSET_H         ((u8)0x13)
#define MPU6500_XG_OFFSET_L         ((u8)0x14)
#define MPU6500_YG_OFFSET_H         ((u8)0x15)
#define MPU6500_YG_OFFSET_L         ((u8)0x16)
#define MPU6500_ZG_OFFSET_H         ((u8)0x17)
#define MPU6500_ZG_OFFSET_L         ((u8)0x18)
#define MPU6500_SMPLRT_DIV          ((u8)0x19)
#define MPU6500_CONFIG              ((u8)0x1A)
#define MPU6500_GYRO_CONFIG         ((u8)0x1B)
#define MPU6500_ACCEL_CONFIG        ((u8)0x1C)
#define MPU6500_ACCEL_CONFIG_2      ((u8)0x1D)
#define MPU6500_LP_ACCEL_ODR        ((u8)0x1E)
#define MPU6500_MOT_THR             ((u8)0x1F)
#define MPU6500_FIFO_EN             ((u8)0x23)
#define MPU6500_I2C_MST_CTRL        ((u8)0x24)
#define MPU6500_I2C_SLV0_ADDR       ((u8)0x25)
#define MPU6500_I2C_SLV0_REG        ((u8)0x26)
#define MPU6500_I2C_SLV0_CTRL       ((u8)0x27)
#define MPU6500_I2C_SLV1_ADDR       ((u8)0x28)
#define MPU6500_I2C_SLV1_REG        ((u8)0x29)
#define MPU6500_I2C_SLV1_CTRL       ((u8)0x2A)
#define MPU6500_I2C_SLV2_ADDR       ((u8)0x2B)
#define MPU6500_I2C_SLV2_REG        ((u8)0x2C)
#define MPU6500_I2C_SLV2_CTRL       ((u8)0x2D)
#define MPU6500_I2C_SLV3_ADDR       ((u8)0x2E)
#define MPU6500_I2C_SLV3_REG        ((u8)0x2F)
#define MPU6500_I2C_SLV3_CTRL       ((u8)0x30)
#define MPU6500_I2C_SLV4_ADDR       ((u8)0x31)
#define MPU6500_I2C_SLV4_REG        ((u8)0x32)
#define MPU6500_I2C_SLV4_DO         ((u8)0x33)
#define MPU6500_I2C_SLV4_CTRL       ((u8)0x34)
#define MPU6500_I2C_SLV4_DI         ((u8)0x35)
#define MPU6500_I2C_MST_STATUS      ((u8)0x36)
#define MPU6500_INT_PIN_CFG         ((u8)0x37)
#define MPU6500_INT_ENABLE          ((u8)0x38)
#define MPU6500_INT_STATUS          ((u8)0x3A)
#define MPU6500_ACCEL_XOUT_H        ((u8)0x3B)
#define MPU6500_ACCEL_XOUT_L        ((u8)0x3C)
#define MPU6500_ACCEL_YOUT_H        ((u8)0x3D)
#define MPU6500_ACCEL_YOUT_L        ((u8)0x3E)
#define MPU6500_ACCEL_ZOUT_H        ((u8)0x3F)
#define MPU6500_ACCEL_ZOUT_L        ((u8)0x40)
#define MPU6500_TEMP_OUT_H          ((u8)0x41)
#define MPU6500_TEMP_OUT_L          ((u8)0x42)
#define MPU6500_GYRO_XOUT_H         ((u8)0x43)
#define MPU6500_GYRO_XOUT_L         ((u8)0x44)
#define MPU6500_GYRO_YOUT_H         ((u8)0x45)
#define MPU6500_GYRO_YOUT_L         ((u8)0x46)
#define MPU6500_GYRO_ZOUT_H         ((u8)0x47)
#define MPU6500_GYRO_ZOUT_L         ((u8)0x48)
#define MPU6500_EXT_SENS_DATA_00    ((u8)0x49)
#define MPU6500_EXT_SENS_DATA_01    ((u8)0x4A)
#define MPU6500_EXT_SENS_DATA_02    ((u8)0x4B)
#define MPU6500_EXT_SENS_DATA_03    ((u8)0x4C)
#define MPU6500_EXT_SENS_DATA_04    ((u8)0x4D)
#define MPU6500_EXT_SENS_DATA_05    ((u8)0x4E)
#define MPU6500_EXT_SENS_DATA_06    ((u8)0x4F)
#define MPU6500_EXT_SENS_DATA_07    ((u8)0x50)
#define MPU6500_EXT_SENS_DATA_08    ((u8)0x51)
#define MPU6500_EXT_SENS_DATA_09    ((u8)0x52)
#define MPU6500_EXT_SENS_DATA_10    ((u8)0x53)
#define MPU6500_EXT_SENS_DATA_11    ((u8)0x54)
#define MPU6500_EXT_SENS_DATA_12    ((u8)0x55)
#define MPU6500_EXT_SENS_DATA_13    ((u8)0x56)
#define MPU6500_EXT_SENS_DATA_14    ((u8)0x57)
#define MPU6500_EXT_SENS_DATA_15    ((u8)0x58)
#define MPU6500_EXT_SENS_DATA_16    ((u8)0x59)
#define MPU6500_EXT_SENS_DATA_17    ((u8)0x5A)
#define MPU6500_EXT_SENS_DATA_18    ((u8)0x5B)
#define MPU6500_EXT_SENS_DATA_19    ((u8)0x5C)
#define MPU6500_EXT_SENS_DATA_20    ((u8)0x5D)
#define MPU6500_EXT_SENS_DATA_21    ((u8)0x5E)
#define MPU6500_EXT_SENS_DATA_22    ((u8)0x5F)
#define MPU6500_EXT_SENS_DATA_23    ((u8)0x60)
#define MPU6500_I2C_SLV0_DO         ((u8)0x63)
#define MPU6500_I2C_SLV1_DO         ((u8)0x64)
#define MPU6500_I2C_SLV2_DO         ((u8)0x65)
#define MPU6500_I2C_SLV3_DO         ((u8)0x66)
#define MPU6500_I2C_MST_DELAY_CTRL  ((u8)0x67)
#define MPU6500_SIGNAL_PATH_RESET   ((u8)0x68)
#define MPU6500_MOT_DETECT_CTRL     ((u8)0x69)
#define MPU6500_USER_CTRL           ((u8)0x6A)
#define MPU6500_PWR_MGMT_1          ((u8)0x6B)
#define MPU6500_PWR_MGMT_2          ((u8)0x6C)
#define MPU6500_FIFO_COUNTH         ((u8)0x72)
#define MPU6500_FIFO_COUNTL         ((u8)0x73)
#define MPU6500_FIFO_R_W            ((u8)0x74)
#define MPU6500_WHO_AM_I            ((u8)0x75)        // ID = 0x71 In MPU9250
#define MPU6500_XA_OFFSET_H         ((u8)0x77)
#define MPU6500_XA_OFFSET_L         ((u8)0x78)
#define MPU6500_YA_OFFSET_H         ((u8)0x7A)
#define MPU6500_YA_OFFSET_L         ((u8)0x7B)
#define MPU6500_ZA_OFFSET_H         ((u8)0x7D)
#define MPU6500_ZA_OFFSET_L         ((u8)0x7E)

/* ---- AK8963 Reg In MPU9250 ----------------------------------------------- */

#define AK8963_I2C_ADDR             ((u8)0x0C)
#define AK8963_DEV_ID               ((u8)0x48)

//Read-only Reg
#define AK8963_WIA                  ((u8)0x00)
#define AK8963_INFO                 ((u8)0x01)
#define AK8963_ST1                  ((u8)0x02)
#define AK8963_HXL                  ((u8)0x03)
#define AK8963_HXH                  ((u8)0x04)
#define AK8963_HYL                  ((u8)0x05)
#define AK8963_HYH                  ((u8)0x06)
#define AK8963_HZL                  ((u8)0x07)
#define AK8963_HZH                  ((u8)0x08)
#define AK8963_ST2                  ((u8)0x09)
//Write/Read Reg
#define AK8963_CNTL1                ((u8)0x0A)
#define AK8963_CNTL2                ((u8)0x0B)
#define AK8963_ASTC                 ((u8)0x0C)
#define AK8963_TS1                  ((u8)0x0D)
#define AK8963_TS2                  ((u8)0x0E)
#define AK8963_I2CDIS               ((u8)0x0F)
//Read-only Reg ( ROM )
#define AK8963_ASAX                 ((u8)0x10)
#define AK8963_ASAY                 ((u8)0x11)
#define AK8963_ASAZ                 ((u8)0x12)
#define sample_rate 1000                        //2é&#209;ù&#194;ê
typedef struct MpuCorrection
{
        float acc_offset[3];
        float acc_gain[3];
        float gyr_offset[3];
        float gyr_gain[3];
        float mag_offset[3];
        float mag_gain[3];
} MpuCorrection;
typedef float Quarternion[4];        //w x y z
typedef float Eular[3];                        //r p y


extern signed short mpu_acce[3];
extern signed short mpu_gyro[3];
extern signed short mpu_magn[3];
extern signed short mpu_temp;
extern float acc[3];
extern float gyr[3];
extern float mag[3];
extern float tmp;
extern Eular position_e ;       


extern Quarternion position_q_new;
extern Eular position_e_new;
extern Quarternion position_q_adjust;
void mpu_init(void);
void mpu_get(float *acc, float *gyr, float *mag, float *tem);
void mpu_get_acc(float *acc);
void mpu_get_gyr(float *gyr);
void mpu_get_mag(float *mag);
void mpu_read(MPU_READ_TypeDef mr);
void posit_proc(float *avalf, float *gvalf, float *mvalf);
void mpu_load_correction(void);
void mpu_init_correction(MPU_CORRECTION_TypeDef correct);
void posit_adjust_rst(void);
void posit_adjust(void);
#endif //_MPU9250_H_[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
 楼主| 发表于 2016-7-7 16:31:11 | 显示全部楼层
回复

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
 楼主| 发表于 2016-7-7 16:31:29 | 显示全部楼层
而且我的头文件已经添加在目录里面了
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-7-7 17:07:30 | 显示全部楼层
1.保证定义
2.保证添加路径
3.保证包含头文件
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
 楼主| 发表于 2016-7-7 18:10:36 | 显示全部楼层
龙之谷 发表于 2016-7-7 17:07
1.保证定义
2.保证添加路径
3.保证包含头文件

都可以保证啊,哎我也是醉了
回复

使用道具 举报

15

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1276
金钱
1276
注册时间
2016-5-31
在线时间
499 小时
发表于 2016-7-7 19:00:21 | 显示全部楼层
把你头文件 MPU9250.h  全局变量定义中的extern取消就可以了

你原来头文件的定义如下:
extern float acc[3];
extern float gyr[3];
extern float mag[3];
extern float tmp;

修改为:
float acc[3];
float gyr[3];
float mag[3];
float tmp;

即可!
回复

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
 楼主| 发表于 2016-7-7 21:25:00 | 显示全部楼层
xfcjava3 发表于 2016-7-7 19:00
把你头文件 MPU9250.h  全局变量定义中的extern取消就可以了

你原来头文件的定义如下:

为什么这样就行了
回复

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
 楼主| 发表于 2016-7-7 21:31:19 | 显示全部楼层

试了一下也不行,出现了新的错误
回复

使用道具 举报

15

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1276
金钱
1276
注册时间
2016-5-31
在线时间
499 小时
发表于 2016-7-7 22:04:59 | 显示全部楼层
出现了新的错误,应该是有的变量,还是没有定义?
extern signed short mpu_acce[3];
extern signed short mpu_gyro[3];
extern signed short mpu_magn[3];
extern signed short mpu_temp;
extern float acc[3];
extern float gyr[3];
extern float mag[3];
extern float tmp;
extern Eular position_e ;   


extern Quarternion position_q_new;
extern Eular position_e_new;
extern Quarternion position_q_adjust;
回复

使用道具 举报

15

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1276
金钱
1276
注册时间
2016-5-31
在线时间
499 小时
发表于 2016-7-7 22:06:11 | 显示全部楼层
要是你没有在其它的地方定义这些全局变量的话,
就把这些全局变量定义前部的extern去掉!!!
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-7-8 08:19:31 | 显示全部楼层
.h文件声明,.c文件定义,.h文件变量一般需要extern声明是外部变量。
如果你去掉头文件extern报错取消,说明你其他地方处理有问题,而不应该去掉extern(除非这个头文件就是定义这个变量,头文件只被包含一次)。
问问题,要把问题描述清楚、调理,截图报错的变量如何定义、如何在头文件声明、如何被包含、报错情况,越详细越方便解决。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表