一、前言
CCS,即Code Composer Studio,学过DSP的同学应该都对这个软件耳熟能详。虽然利用官方提供的库和例程编写代码并不困难,但是常常会遇到各种奇怪的报错。比如从其他电脑上导入项目,甚至是导入官方的例程项目,有时候都会出现动辄几十上百条报错,令不少初学者(包括我)头疼不已,这篇文章想要梳理一下我在导入项目的时候出现的报错,以及我的分析和解决办法,不定期更新,希望可以帮助到大家。

二、关于controlSuite
首先必须安装controlSuite,里面包括了常用库文件以及例程。对于初学者来说,这些资料是必不可少的,也省去了很多直接去写寄存器数值的麻烦。这里以F28069为例,我们需要用到的库文件的位置在

$controlSuite$\device_support\f2806x\v150

由于这个路径比较长,下面以$ LibPath $来表示这个库文件的位置。

三、报错分析

1【Unresulved symbol系列报错】

Unresolved symbol +各类函数+,first referenced…

ccess的有数据但是是乱码 ccs报错_寄存器


分析

可以看到最下面提示unresolved symbol,即出现了无法解析的符号。涉及了_AdcOffsetSelfCal以及_InitAdc,这并非是我们自己定义的函数,因此一定是缺少了Adc.c这个库文件。而如果是自己定义的函数,则说明你只定义了函数声明,而缺少函数定义。(这就涉及到C语言基础了,不再赘述)

解决办法

1.1、在项目上右键
1.2、选择Add Files
1.3、在弹出的文件选择框中选择到ccess的有数据但是是乱码 ccs报错_ccess的有数据但是是乱码_02\f2806x_common\source\下的相应C文件,比如这里应该选择Adc.c文件。(LibPath的含义参见前文第二部分)
1.4、弹出的对话框中选择Copy file,最好不要选择Link,否则容易一不小心就把原始库文件给改了,影响以后的使用。
1.5、重新编译,报错消失

2.Unresolved symbol+各种寄存器变量+,first referenced…

ccess的有数据但是是乱码 ccs报错_ccess的有数据但是是乱码_03


分析

通过报错信息可以看到,无法解析的符号(Symbol)都是寄存器(Regs),同样说明缺少库文件的引入,这里则是缺少了GlobalVariableDef.c。这是一个定义了各种寄存器以及很多全局变量的库文件,不引入项目自然是无法编译的。

解决办法

用上一个报错的解决办法,添加ccess的有数据但是是乱码 ccs报错_ccess的有数据但是是乱码_02\f2806x_headers\source\目录下的GlobalVariableDef.c文件

3.Unresolved symbol +各类以ISR结尾的函数(比如ADCINT1_ISR),first referenced…

ccess的有数据但是是乱码 ccs报错_ccess的有数据但是是乱码_05


分析

从报错信息中可以看出,缺乏ISR,即Interrupt Service Routine,即缺乏中断服务,如果你在项目中使用到了中断,则必须要引入defaultISR.c文件,用于默认中断的实现。

解决办法

用上面一样的办法添加ccess的有数据但是是乱码 ccs报错_ccess的有数据但是是乱码_02\f2806x_common\source\DefaultIsr.c文件

4.Creating output section without section specification系列

如下

ccess的有数据但是是乱码 ccs报错_寄存器_07


分析

虽然都是警告,但实际上忽视警告有时候后果是很严重的,代码可能根本跑不了。这里的警告就是涉及到寄存器内存分配的问题,具体以后有时间再详细分析DSP的内存分配的问题

解决

项目中添加ccess的有数据但是是乱码 ccs报错_ccess的有数据但是是乱码_02\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字段即可

ccess的有数据但是是乱码 ccs报错_库文件_09

6.XDAIS报错

分析

ccess的有数据但是是乱码 ccs报错_ccess的有数据但是是乱码_10


解决办法去掉下图中的勾即可

ccess的有数据但是是乱码 ccs报错_寄存器_11