【回眸】技术干货——Hightec编译英飞凌TC397报错解决手册
前言
英飞凌TC397的bringup任务已经完成,接下来要做emc移植方向的工作,首先介绍一下emc测试相关的内容:emc全称是电磁兼容性,是指设备或系统在其电磁环境中符合要求运行并不对其环境中的任何设备产生无法忍受的电磁干扰的能力。有相关的测试,还有专门搞这个测试的岗位不过我不是搞这个的,只要把指定代码移植上去就好了。写这篇文章也是记录移植过程中遇到的错误及解决方案。
警告信息
1、 passing argument 1 of 'xxxxx'(某函数名) discards 'volatile' qualifier from pointer target type
警告信息:传递'xxxxxxxx '的参数1,丢弃指针目标类型中的'volatile'限定符这类警告出现的原因是:xxx函数的x参数作为指针类型参数,指针类型不相容。解决办法: 在调用函数的参数前加上强制类型转换即可。具体解决方法:定位到报错的地方,然后在调用出警告的函数处传参在第一个参数前加(void*)
原来: xxxxxxxxxxx函数名xxxxxxxxxxxx(&real_time);
修改后: xxxxxxxxxxx函数名xxxxxxxxxxxx((void *)(&real_time));
发现第一个警告信息消失。成功。
2.implicit declaration of function xxxxxxxxxxxxx(函数名)
这类报错信息比较常见,理论上是缺少头文件,加上相应的头文件就可以了这里我之前改过这个警告,后面没改成功我还觉得有点疑惑,今天终于发现了,头文件里声明的函数要和警告里的函数一致。发现第二个警告信息消失。成功。
3.(报错信息)fatal error: xxxxxxxxxxxxxxxx.h: No such file or directory
这个报错就很明显了,意思就是没找到这个.h的头文件,可以把这个头文件放到对应的目录下
4.warning: 'xxxxxxxxxxxxxxxxxxx' defined but not used
出现这个警告是什么原因?其中一个可能的原因是里面有变量,在函数里面可能只声明了而未使用
5.(报错信息) unknown type name 't_emcparams'
这是一个头文件里的报错,字面上来看就是t_emcparams这个类型没有,所以会出现报错,想想会不会其他地方定义的东西。
6、expected identifier before numeric constant
原因:定义的enum结构体与其它处的宏定义有冲突。查找:发现是enum结构体中的定义和原本代码中的宏定义有冲突解决方案:注释掉原来冲突的结构体,取消赋值,重新声明结构体内的变量思路:因为 原来的代码是个大工程,所以我们移植代码的时候,优先选择修改移植的代码。这样以防修改原先代码后发现更多的错误
// EVADC_CH_VBAT_MON = 0,//error:expected identifier before numeric constant(修改前) EVADC_CH_VBAT_MON,(修改后)
这个报错顺利解决补充:后来发现并没有解决又过来返工我们把出错的地方的定义别名给全部注释,找到原先文件里含这个宏定义的.h头文件,然后将这个宏文件include到使用到这个别名的地方就可以了。源文件里包含宏定义的.头文件名字叫"Evadc_Gaea.h"最后终于顺利消失了!耶✌
7、unknown type name 'bool'
原因:在C语言标准(C89)没有定义布尔类型,所以会报错。解决方案:C99提供了一个头文件<stdbool.h>定义了bool,true代表1,false代表0。只要导入stdbool.h,导入头文件#include<stdbool.h>报错信息顺利消失了
8、'TimeConst_1s' undeclared (first use in this function)
8.2、'TIMER_INDEX_1S' undeclared (first use in this function)
net_send_t1 = (sint32)(now() / TimeConst_1s);原因:缺少延时函数解决方案:我想添加一个头文件,因为查到Bsp.h(自带)的头文件中有包含这个延时函数,我找了一下原来的代码里也有"Bsp.h"文件,但是神奇的事情发生了,这个报错没有消失。ok那我们先去解决其他报错补充:把其他报错解决后回来啃这块硬骨头了,现在换个思路,先打开Bsp.h文件看看里面有什么,顺便看看到底有没有延时函数,发现有一个叫"Ifx_DateTime.c"的文件里可以使用这个TimeConst_1s,于是我把该文件里面的宏定义都拖出来,放到移植的代码中。
9、error: 'MESSAGE_HEART_BEAT' undeclared (first use in this function)
原因:找不到MESSAGE_HEART_BEAT,但其他文件里有这个宏定义。解决方案:于是把其他文件里的宏定义复制到报错的文件里。这个报错顺利解决了。
10、implicit declaration of function 'msg_str_fifo_free'
原因:产生隐式声明的原因有几种,经过查询后可以发现1 没有把函数所在的c文件生成.o目标文件。2 在函数所在的c文件中定义了,但是没有在与之相关联的.h文件中声明。3 其头文件都声明过了,所调用的函数的原型与所传的实参类型不匹配。常见的是第二第三种。这个警告我在这里暂时没解决,我没找到相应的头文件,先跳过吧
11、error: 'EMC_SENSOR' undeclared (first use in this function)
原因:缺少头文件最终解决:换0909版本的代码,可以顺利跑通
12、unknown type name 'xxxxxxxxxxxxxx'
原因:这个也是缺少相应的头文件,以TEMC_RETURN为关键字,开始查找,找到哪个头文件里包含这个,说明成了,以此类推,解决了差不多十个这样的问题吧,但不是每一个都能找到包含这个的头文件的,就很崩溃
13、invalid type argument of '->' (have 'int')
原因:使用C语言访问结构体的成员变量时使用“->”报错解决方法:这种错误一般是没有理解C中“->”与“.”用法的不同,“->”是指向结构体指针获取结构体的成员变量时所用,而“.”则是一般的结构体名获取结构体的成员变量时所用。简单来说,如果符号前是指针类型,那么用“->”,否则用“.”
14、request for member 'id' in something not a structure or union
原因:发现是 . 与 -> 搞错了。如果它是地址,就在它后边用 ->,如果它不是地址,就在它后边就用 . 但是恢复->后,我们会发现,原来的错误又出现了,->的前面是取地址符,所以确实是地址,应该用->,但接着出现了invalid type argument of '->' (have 'int')报错,这是什么原因呢
15、expected declaration specifiers or '...' before '*' token
原因:这个原因是由于头文件包含顺序有误导致的,如果a.h中#include b.h而b.h中的函数声明中用到了a.h中的结构体或者typedef,那么就会出现在包含b.h的时候a.h中的结构体或者typedef还没有声明,从而陷入错误,可以把结构体或者typedef移入到b.h就OK了。
16、too few arguments to function 'Ifx_Lwip_init'
原因:缺少参数
17、struct xxxx has no member named xxxxx
原因:结构体中没有名为xxxx的成员变量
18、make[1]: *** [1_ToolEnv/0_Build/9_Make/0_Src/AppSw/Tricore/Ethernet/apps/sntp/SubDirectory.mk:49: 2_Out/Tricore_Gnuc/Gnuc_Files/0_Src/AppSw/Tricore/Ethernet/apps/sntp/sntp.o] Error 127
原因:工具链改成自己的工具链路径就可以了
19、emc_adc.c:272:12: warning: pointer targets in passing argument 1 of 'sprintf' differ in signedness [-Wpointer-sign]
原因:出现这种情况一般是形参与实参的参数类型不匹配解决方案:修改实参、或者形参类型,使两者保持一致。将实参类型强制类型转换成形参类型,可消除警告。
后记碎碎念
看到这里的读者朋友们可以点击专栏查看同系列的其他文章,希望能帮到屏幕前的每一位应届生往届生,该博文最初发表在CSDN上。
#i人适合做什么工作##我是面试官,请用一句话让我破防##如果秋招能重来,我会____##校招生月薪1W算什么水平##苦尽甘来时,再讲来时路#本专栏助应届生从物联网小白成长为企业争抢的技术人才,聚焦三大核心技术:传感器应用(环境监测)、嵌入式开发(STM32/Arduino)、通信协议(LoRa/NB-IoT/MQTT),配合10+实战项目(如智能温湿度监控系统)积累项目经验。覆盖智能硬件、工业物联网、智能家居领域岗位需求,解析企业招聘技术重点与面试题,帮电子、计算机、自动化等专业学生构建知识体系,提前锁定名企Offer!
查看22道真题和解析