软件调试问题系列文章之第二章 DSP软件调试问题
本系列文章主要用于记录工作和学习过程中的软件调试问题
·
系列文章目录
第一章 ARM软件调试问题
第二章 DSP软件调试问题
文章目录
前言
本系列文章主要用于记录工作和学习过程中的软件调试问题
方便查找对应问题的解决之道,如解答有不足之处或问题解决仍待补充,还请大佬多多指教,谢谢!->欢迎评论区留言
第二章 DSP软件调试问题
1.DSP TMS320F280039芯片新建工程
- 注:本文只记录新建工程过程中遇到的调试问题,想查看具体流程的请移步: TMS320F280039系列文章之第一章 新建工程
1.1 输出格式选择(COFF和ELF)
1.1.1 描述
- 没有太大差别,根据个人需要选择即可(若选择ELF需要修改文件,后续说明)
- COFF为旧版(现在依旧可用),不支持官方库函数?(类似STM32那种 可以直接调用的库函数)
- ELF为新版,支持官方库函数(driverlib.lib)

1.1.2 若输出格式选择ELF需要进行以下设置(COFF不需要修改)
- 本文以280039芯片为主,280049设置类似,详情请查看往期链接: TMS320F280049系列文章之第二章 新建工程(注意:代码移植时,索引路径需要重新设置(绝对地址))
- 添加ELF支持lib库文件

- 删除f28003x_usdelay.asm文件中的下划线,以适应ELF输出格式选择

修改完成:
.if __TI_EABI__
.asg F28x_usDelay, F28x_usDelay
.endif
.def F28x_usDelay
.sect ".TI.ramfunc"
.global __F28x_usDelay
F28x_usDelay:
SUB ACC,#1
BF F28x_usDelay,GEQ ;; Loop if ACC >= 0
LRETR
1.2 内存地址重复
1.2.1 描述(xxx memory range has already been specified)
- cmd文件选择重复(仅能保留一个),否则就会报内存地址重复错误

1.2.2 解决办法(仅留一个cmd文件即可,其他全部屏蔽)
- 因为正常项目都需要板子重新上电后仍能运行,即从ROM/flash启动,故此处屏蔽ram

1.3 警告需正确设置ELF格式才可使用driverlib.lib官方库函数
1.3.1 描述(contains ELF object files which are incompatible with the TI-COFF output file. Ensure you are using the proper library.)
- 工程输出格式选择需为ELF且需要添加ELF相关lib库及进行1.1的设置,否则会提示警告

1.3.2 解决办法1(仍采用ELF格式输出)
- 第一步:工程中添加ELF支持lib文件(我这里以后的项目需要用到IQmath所以我用的是IQmath_fpu32_eabi.lib,你采用其他的eabi.lib也可以)
注:
lib库文件目录查找:C:\ti\c2000\C2000Ware_MotorControl_SDK_4_01_00_00\c2000ware\libraries\AAA\BBB\lib)
AAA:即math/IQmath。因为我需要用IQmath库,所以我是math/IQmath
BBB:即f28003x。因为我采用的芯片为280039,所以我是f28003x

- 第二步:如1.1工程设置输出格式选择为ELF输出

- 第三步:修改文件(同1.1.2 删除4处下划线,正确编码如图所示)

1.3.3 解决办法2(仅采用COFF格式输出)
- 因为本人工作中仍以寄存器配置为主,不需要用到官方库函数,故我仍采用COFF格式,屏蔽包含driverlib.lib库的文件即可

1.4 编译无警告无报错,但仿真时无法运行
1.4.1 描述(No source available for " system post cinit0 at E:/ProjectName_Demol/Temple_Demo.out:(3} 0x3fb8b9{4")

1.4.2 解决办法
- 第一步:修改工程设置并应用(添加_FLASH:以实现将FLASH中的程序COPY到RAM中运行,目的是加快程序的运行速度)

- 第二步:完成第一步后直接编译会报错,先来看一下错误(unresolved symbol xxx(任意变量), first referenced in ./common/source/device.obj)
控制台显示:
undefined first referenced
symbol in file
--------- ----------------
_RamfuncsLoadSize ./common/source/device.obj
_RamfuncsLoadStart ./common/source/device.obj
_RamfuncsRunStart ./common/source/device.obj
error #10234-D: unresolved symbols remain
error #10010: errors encountered during linking; "Temple_Demo.out" not built
报错显示:
unresolved symbol _RamfuncsLoadSize, first referenced in ./common/source/device.obj
unresolved symbol _RamfuncsLoadStart, first referenced in ./common/source/device.obj
unresolved symbol _RamfuncsRunStart, first referenced in ./common/source/device.obj

- 第三步:修改cmd文件,即前边加下划线(顺便解决第二步的报错)

总结
本章为软件调试问题系列文章 第二章:DSP软件调试问题
更多推荐



所有评论(0)