IAR报错未定义的外部声明Error[e46]: Undefined external “XXXX“ referred in main

IAR调试报错Undefined external “XXXX“ referred in main

    • 第一种情况:项目中只导入了.h文件,但是对应的.C文件没有导入进去。
    • 第二种情况:报错内容中包含自定义的结构体名称
    • 第三重情况:报错内容包含mcu自带的宏定义名称

第一种情况:项目中只导入了.h文件,但是对应的.C文件没有导入进去。

如下图,只有一个sensor.h文件,sensor.c文件编辑好后没有导入进去.
IAR报错未定义的外部声明Error[e46]: Undefined external “XXXX“ referred in main_第1张图片
导入sensor.c文件后,就没有报错了.
IAR报错未定义的外部声明Error[e46]: Undefined external “XXXX“ referred in main_第2张图片

第二种情况:报错内容中包含自定义的结构体名称

这种报错是因为在.h文件中声明了结构体,并且直接进行了赋值导致的。

举例:以下结构体进行了赋值,所以不能直接写入.h文件:

struct _strTime{
     
  uint8 yms[11];//年月日
  uint8 hms[9];//时分秒
}strTime={
     "2020/08/30","12:09:00"};

解决方法:
将上述结构体移动到.c文件中,
然后在.h文件中做如下声明即可:

extern struct _time time;

第三重情况:报错内容包含mcu自带的宏定义名称

第三种情况调试时会有非常多的报错,问题根源是头文件版本不兼容当前的IAR版本。
解决方法:
1.使用对应版本的IAR,IAR常见版本是V5.1和V7.12.1;
2.。需修改头文件。如io430.h(V5.1)改为msp430x14x.h(V7.12.1)。这个操作比较麻烦,务必检查项目中所有的.c和.h文件,确保全部修改完成。

---------------------------------------------------------END----------------------------------------------------------
以上为个人总结的经验.如果本片文章解决了您的问题,欢迎点赞 收藏 留言!

你可能感兴趣的:(IAR,MSP430,C语言,c语言,单片机,mcu)