CCS编写F28335定时器程序,普中开发板,出现如下报错
error #10234-D: unresolved symbols remain
error #10010: errors encountered during linking; “8.0_Timer_Interrupt_Led.out” not built
报错解决方法:
此错误原因是工程要使用定时器但没向工程中自用的Libraries库目录中添加DSP2833x_CpuTimers.c代码文件,
添加后编译通过。只需要复制到工程文件目录即可,CCS软件会自动更新软件中的列表和文件目录一致,这一点个人觉得比Keil MDK好用。
报错原因:
按照开发板教程,本工程由外中断拷贝修改而来,要向工程中的Libraries库目录中添加DSP2833x_CpuTimers.c代码文件。
该过程是普中开发板定时器例程建工程时的一个必要步骤,但视频教程中只在介绍定时器配置时简单提及此.c文件,说是前期教程已有介绍,并让看开发攻略。然而我学到这里已经忘了前面相关教程的内容了,翻看前面的视频费时间就没看。
本节教程我只看了视频教程没看开发攻略,回看开发攻略发现在里面有这一句介绍。以后还是要结合视频和开发攻略一起学习。
因为缺少DSP2833x_CpuTimers.c而DSP2833x_CpuTimers.h存在(所有外设.h文件被DSP2833x_Device.h文件统一包含进了工程),导致.c中的一个结构体对象CpuTimer0只有.h中的extern声明却没有.c文件的定义来申请内存空间。这些问题进一步导致了工程编译不报错,但在链接时报错!
如图,结构体对象CpuTimer0本应在DSP2833x_CpuTimers.c中定义,在DSP2833x_CpuTimers.h中进行extern声明。
问题解决经历:
出现错误后在网上查了很多方法但均不适用,于是自己解决。
首先是锁定问题位置,因为此报错是在链接时产生的,在之前的编译中没有任何报错,只能通过控制编译的代码部分反复尝试。
1.使用普中的定时器驱动替换后发现程序可通过编译,问题锁定到定时器驱动。
2.使用有问题的定时器驱动,将初始化函数注释后可通过编译,问题范围缩小到初始化函数中。
3.如此一步一步缩小问题范围,最终发现问题在以下3条代码上,注释后编译通过:
综合分析3行代码发现都含有CpuTimer0结构体对象,查找定义后只能追踪到DSP2833x_CpuTimers.h文件中的extern语句,却不知道是在哪定义的这个结构体。在工作空间共用库目录DSP2833x_Libraries中搜索到了这个头文件的同名.c文件。
注意:这里虽有.c文件但工程没使用,因为这是工作空间目录,在工程目录之外,而且工程没有设置任何引用外部.c文件。
此时将此.c文件拷贝到工程目录下的Libraries目录中。问题即可解决。
而我由于不熟悉CCS软件特性和工作空间目录结构,折腾了很久才偶然发现需要拷贝这个.c文件到工程目录中。本来解决了问题还是对整个过程一头雾水,写完本文发现头脑茅塞顿开,豁然开朗。看来还是需要多总结。感谢阅读,希望能帮到遇到同样问题的同志们!