DSP常见错误

更新时间:2023-12-16 09:38:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1、仿真器驱动的问题。

CCS和仿真器驱动要装在同一路径下,最好都选择其默认的路径。有时,通过usb20emurst.exe检验到仿真器连接是好的,但打开CCS时,仍然跳出窗口提示Can’t initialize target CPU。还是因为仿真器驱动安装问题,先将仿真器换一个usb接口试一下,如仍提示错误,则要重新安装驱动。

2、CCS配置。

选择C64xx XDS510 Emulator;Configuration File选择Auto-generate board data file with extra configuration项,C:\\ti\\drivers\\Seedusb2.cfg;I/O Port 0x240;Startup GEL:C:\\ti\\cc\\gel\\SEEDDM642.gel。

3.编译错误:SEED301_AverageSmooth\\AverageSmoothloop2.jpt

error: illegal relocation type 050002 found in section .debug_info, file

是因为rts6400.lib库文件与CCS版本不符。库文件要使用CCS安装文件夹自带的。

4、编译错误:symbol xxx is defined multiple times

(1)因为库文件的问题,更改库文件;

(2)是因为将本应该在include下的文件加在了source里。注意:在uCOS_II.c文件里有include语句,包括了os_core.c、os_flag.c、os_mbox.c、os_mem.c、os_mutex.c、os_q.c、os_sem.c、os_task.c、os_time.c文件,因而这些文件不需手动加入工程。

5、编译错误:symbol xxx is undefined

出现symbol错误,一般都是因为库文件的问题。

6、编译错误:fatal error: #error NO CHIP DEFINED

解决方法:build options->compiler->preprocessor->define symbols:添加上实际的DSP芯片的型号,本工程为_DEBUG;CHIP_6416。

7、endian模式问题

little endian和big endian是计算机字节顺序的两种格式,所谓字节顺序指的是长度跨越多个字节的数据的存放形式。little endian把低字节存放在内存的低位;big endian将低字节存放在内存的高位。现在主流的CPU,intel系列采用little endian,motorola系列的CPU采用big endian。本工程中使用的C6416EVM,J25脚为endian模式选择脚,开路为little endian,短路为big endian,本工程选择little endian模式。

8、CMD文件

CMD文件是用来分配ROM和RAM空间的,告诉链接程序怎样计算地址和分配空间。CMD给每个段分配地址,当想从一个段跳到另一个段时,就可以知道这个段的起始地址。

CMD文件包括两个部分:MEMORY和SECTIONS。例: MEMORY {

PAGE 0: VECS: origin = 00000h, length = 00040h LOW: origin = 00040h, length = 03FC0h SARAM: origin = 04000h, length = 00800h B0: origin = 0FF00h, length = 00100h PAGE 1: B0: origin = 00200h, length = 00100h B1: origin = 00300h, length = 00100h B2: origin = 00060h, length = 00020h SARAM: origin = 08000h, length = 00800h } SECTIONS {

.text : { } > LOW PAGE 0 .cinit : { } > LOW PAGE 0 .switch : { } > LOW PAGE 0 .const : { } > SARAM PAGE 1 .data : { } > SARAM PAGE 1 .bss : { } > SARAM PAGE 1 .stack : { } > SARAM PAGE 1 .sysmem : { } > SARAM PAGE 1 }

(1)系统定义:

.cinit 存放C程序中的变量初值和常量;

.const 存放C程序中的字符常量、浮点常量和用const声明的常量; .switch 存放C程序中switch语句的跳针表; .text 存放C程序的代码;

.bss 为C程序中的全局和静态变量保留存储空间; .far 为C程序中用far声明的全局和静态变量保留空间;

.stack 为C程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;

.sysmem 用于C程序中malloc、calloc和realloc函数动态分配存储空间。 (2)用户定义:

#pragma CODE_SECTION (symbol, \#pragma DATA_SECTION (symbol, \

另:CMD文件中,可以不指定heap和stack的大小。编译的时候只会警告。CMD文件中的注释只能使用/*??*/。

9.warning: entry point other than _c_int00 specified

这是做RTDX实验遇到的警告。

一个在rts里_C_INT00 .def _Reset .red _c_int00

_Reset: .ivec _c_int00, USE_RETA\

另一个入口intvecs.asm文件的code_start,可以按需要切换,或者自己定义入口。

.text

.def RESET_ISR .ref _c_int00 RESET_ISR: CLRC VMAP B _c_int00, UNC

一种解决方法,不用管它,因为C入口地址最终是由用户的CMD文件覆盖二是,在编译选项里面link标签页,把Code Entry Point(-e)编辑框里

的,警告不影响使用。

面的code_start删除,就不会产生该警告了。

10.

11、文件中include语句的使用

如果A include B,且A、B属于同一文件夹,那就直接#include “B”;若B在另一个文件夹里(例如B在my文件夹里),那就#include “.\\my\\B”;若A在文件夹里,而B在文件夹外,则#include “..\\B”(注意点的个数)。

12.一个完整的工程需要添加的C文件

DSP28_DefaultIsr.C——这个文件很重要,包含了2812所有的中断函数,写中断时,只要将程序写在对应的函数内就可以,大大保证了中断的成功率。 DSP28_GlobalVariableDefs.C——全局变量的定义,这个文件也很重要,定义了2812的寄存器,中断向量表等内容。

DSP28_InitPeripherals.C——所有外设的初始化函数,函数的内容是调用了2812各个外设的初始化函数。

DSP28_PieCtrl.C——PIE初始化函数,和中断相关,很重要。

DSP28_PieVect.C——PIE中断向量表定义以及初始化,很重要。

DSP28_SysCtrl.C——系统初始化,主要对开门狗,时钟等模块进行初始化,以保证2812正常工作,非常重要。

DSP28_Xintf.C——外部接口的初始化函数。DSP28_XIntrupt.C——外部中断的初始化函数。

通过上面的分析我们可以看到几个文件非常重要,DSP28_DefaultIsr.C,DSP28_GlobalVariableDefs.C,DSP28_PieCtrl.C,DSP28_PieVect.C,DSP28_SysCtrl.C,因此建议大家每次新建工程的时候,就把这些未编辑过的文件复制过来。

13.常见的“error: symbol referencing errors”错误

经常看到朋友有问到这一个错误,\symbol referencing errors\,下面我们以一个会员朋友遇到的问题为例讲述解决方法,其实非常简单。首先我们从错误提示的字面意义上来理解,是“标签引用错误”,就是说下面提示到的量引用出现了错误,要么输入错误,要么未定义。我们可以根据提示一个一个解决。

上图中的第一个错误,显示第一次引用的文件是

“ C:\\ti2000\\myprojects\\led18\\Debug\\DSP28_InitPeripherals.obj”,说明这个量首次出现在“DSP28_InitPeripherals.c”。我们去这个文件看看,下面是截图:

我们可以看到,确实引用了函数InitEv(),那InitEv()函数的定义在哪呢?一般按照习惯,InitEv的定义会放在文件DSP28_Ev.c文件里,我们再到这个文件中看看,如下图所示:

我们会发现里面原来没有InitEv()函数的定义。解决方法是添加这个函数的定义。 下面我们来看第二个错误,显示第一次引用的文件是:

“ C:\\ti2000\\myprojects\\led18\\Debug\\LED.obj”,说明这个标签第一次出现的地方是LED.C文件,打开该文件,找到这个标签所在的位置:

发现在这里,引用时写的是:InitPiectrl ,然后我们再到这个函数定义的文件

DSP_PieCtrl.c文件,我们会看到,定义时这个函数是:InitPieCtrl,我想大家应该看到哪里出问题了吧。

第三个问题和第二个问题是一样的,都是由于自己笔误写错了字母,导致定义的量和引用的量不一样了。

还有一种情况,我们换一个LIB文件看一下会出现什么错误:

同样是rst2800_ml.lib文件,只是一个是CCS自带的,一个是例程中的,我们会发现多了两行奇怪的变量错误。反推过来,遇到这种看不懂的变量错误的时候,建议换一个LIB文件试试。

14 Code composer could not locate boot.asm Would you like to browse for it? 解决方案:

如图所示,只要在Build Options里面填写rts2800_ml.lib就可以了 原因:在编译设置里面没有定义库文件。

本文来源:https://www.bwwdw.com/article/dvh5.html

Top