一、前言
CCS,即Code Composer Studio,学过DSP的同学应该都对这个软件耳熟能详。虽然利用官方提供的库和例程编写代码并不困难,但是常常会遇到各种奇怪的报错。比如从其他电脑上导入项目,甚至是导入官方的例程项目,有时候都会出现动辄几十上百条报错,令不少初学者(包括我)头疼不已,这篇文章想要梳理一下我在导入项目的时候出现的报错,以及我的分析和解决办法,不定期更新,希望可以帮助到大家。
二、关于controlSuite
首先必须安装controlSuite,里面包括了常用库文件以及例程。对于初学者来说,这些资料是必不可少的,也省去了很多直接去写寄存器数值的麻烦。这里以F28069为例,我们需要用到的库文件的位置在
$controlSuite$\device_support\f2806x\v150
由于这个路径比较长,下面以$ LibPath $来表示这个库文件的位置。
三、报错分析
1【Unresulved symbol系列报错】
Unresolved symbol +各类函数+,first referenced…
分析
可以看到最下面提示unresolved symbol,即出现了无法解析的符号。涉及了_AdcOffsetSelfCal以及_InitAdc,这并非是我们自己定义的函数,因此一定是缺少了Adc.c这个库文件。而如果是自己定义的函数,则说明你只定义了函数声明,而缺少函数定义。(这就涉及到C语言基础了,不再赘述)
解决办法
1.1、在项目上右键
1.2、选择Add Files
1.3、在弹出的文件选择框中选择到\f2806x_common\source\下的相应C文件,比如这里应该选择Adc.c文件。(LibPath的含义参见前文第二部分)
1.4、弹出的对话框中选择Copy file,最好不要选择Link,否则容易一不小心就把原始库文件给改了,影响以后的使用。
1.5、重新编译,报错消失
2.Unresolved symbol+各种寄存器变量+,first referenced…
分析
通过报错信息可以看到,无法解析的符号(Symbol)都是寄存器(Regs),同样说明缺少库文件的引入,这里则是缺少了GlobalVariableDef.c。这是一个定义了各种寄存器以及很多全局变量的库文件,不引入项目自然是无法编译的。
解决办法
用上一个报错的解决办法,添加\f2806x_headers\source\目录下的GlobalVariableDef.c文件
3.Unresolved symbol +各类以ISR结尾的函数(比如ADCINT1_ISR),first referenced…
分析
从报错信息中可以看出,缺乏ISR,即Interrupt Service Routine,即缺乏中断服务,如果你在项目中使用到了中断,则必须要引入defaultISR.c文件,用于默认中断的实现。
解决办法
用上面一样的办法添加\f2806x_common\source\DefaultIsr.c文件
4.Creating output section without section specification系列
如下
分析
虽然都是警告,但实际上忽视警告有时候后果是很严重的,代码可能根本跑不了。这里的警告就是涉及到寄存器内存分配的问题,具体以后有时间再详细分析DSP的内存分配的问题
解决
项目中添加\2806x_headers\cmd\f2806x_headers_non_BIOS.cmd即可。顺便提一句,当我们点开这个文件就可以看到每个模块的寄存器段的分配。
MEMORY
{
PAGE 0: /* Program Memory */
PAGE 1: /* Data Memory */
DEV_EMU : origin = 0x000880, length = 0x000105 /* Device Emulation Registers */
SYS_PWR_CTL : origin = 0x000985, length = 0x000003 /* System Power Control Registers */
FLASH_REGS : origin = 0x000A80, length = 0x000060 /* Flash Registers */
CSM : origin = 0x000AE0, length = 0x000020 /* Code Security Module Registers */
ADC_RESULT : origin = 0x000B00, length = 0x000020 /* ADC Results Register Mirror */
CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 Registers */
CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer1 Registers */
CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer2 Registers */
PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE Control Registers */
PIE_VECT : origin = 0x000D00, length = 0x000100 /* PIE Vector Table */
...
...
而在$ LibPath$\2806x_headers\cmd\目录下还有另外一个BIOS.cmd,二者区别参见连接:https://link.zhihu.com/?target=https%3A//e2e.ti.com/support/microcontrollers/c2000/f/171/t/83366%3Fthe-difference-betwenn-BIOS-and-non-BIOS-applications
5.导入例程错误
–cdebug_asm_data is no longer supported --cdebug_asm_data is no longer supported
分析
由于编译器的升级,不再支持“–cdebug_asm_data”这一参数,因此需要删除该编译参数
解决办法
5.1打开项目属性
5.2进入如下图位置
5.3. 点击框选位置,删除–cdebug_asm_data字段即可
6.XDAIS报错
分析
解决办法去掉下图中的勾即可