cocos 报错dts文件未导入_还在为CCS编译报错而头疼?

b36eed534b554b77249bdd6ef88ff5ce.png

一、前言

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

二、关于controlSuite

2d270ae640ecf1a3601a7373bc8aa71a.png
ControlSuite套件

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

$controlSuite$device_supportf2806xv150

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


三、报错分析

【Unresulved symbol系列报错】

  • Unresolved symbol +各类函数+,first referenced....

00ce21d8901edc5fb7fc024948421aca.png
CCS 报错信息

分析

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

解决办法

  1. 在项目上右键
  2. 选择Add Files
  3. 在弹出的文件选择框中选择到$LibPath$f2806x_commonsource下的相应C文件,比如这里应该选择Adc.c文件。(LibPath的含义参见前文第二部分)
  4. 弹出的对话框中选择Copy file,最好不要选择Link,否则容易一不小心就把原始库文件给改了,影响以后的使用。
  5. 重新编译,报错消失
  • Unresolved symbol+各种寄存器变量+,first referenced....

56aae5beebd8f38fec264fa81a4d1c09.png
CCS报错信息

分析

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

解决办法

用上一个报错的解决办法,添加$LibPath$f2806x_headerssource目录下的GlobalVariableDef.c文件

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

ed584f3456bc1ee4f415337035bbdf4e.png
CCS报错信息

分析

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

解决办法

用上面一样的办法添加$LibPath$f2806x_commonsourceDefaultIsr.c文件

【Creating output section without section specification系列】

  1. 如下

5d269c2cafe6fb89e44dce78976f2170.png

分析

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

解决

项目中添加$LibPath$2806x_headerscmdf2806x_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_headerscmd目录下还有另外一个BIOS.cmd,二者区别参见

the difference betwenn BIOS and non-BIOS applications​e2e.ti.com

【导入例程错误】

  • --cdebug_asm_data is no longer supported --cdebug_asm_data is no longer supported

分析

由于编译器的升级,不再支持“--cdebug_asm_data”这一参数,因此需要删除该编译参数

解决办法

  1. 打开项目属性
  2. 进入如下位置

c4a85d6af378c9356b93a231d44dcdde.png

3. 点击框选位置,删除--cdebug_asm_data字段即可

  • XDAIS报错

分析

c127246930e7ca540d10539b0fc8dd78.png

解决办法

去掉下图中的勾即可

1481206fcf4f825798bba1c35e78b15b.png

四、后续

关于CCS的报错分析还有很多,以后有时间再更新,觉得有帮助的朋友点个赞呗~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值