系列文章目录

第一章 ARM软件调试问题
第二章 DSP软件调试问题



前言

本系列文章主要用于记录工作和学习过程中的软件调试问题

方便查找对应问题的解决之道,如解答有不足之处或问题解决仍待补充,还请大佬多多指教,谢谢!->欢迎评论区留言


第二章 DSP软件调试问题

1.DSP TMS320F280039芯片新建工程

1.1 输出格式选择(COFF和ELF)

1.1.1 描述
  • 没有太大差别,根据个人需要选择即可(若选择ELF需要修改文件,后续说明)
  • COFF为旧版(现在依旧可用),不支持官方库函数?(类似STM32那种 可以直接调用的库函数)
  • ELF为新版,支持官方库函数(driverlib.lib)
    DSP新建工程:输出格式选择
1.1.2 若输出格式选择ELF需要进行以下设置(COFF不需要修改)
修改完成:
	   .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文件选择重复(仅能保留一个),否则就会报内存地址重复错误
    DSP新建工程报错:内存地址重复
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的设置,否则会提示警告
    DSP新建工程警告:选择适当的输出格式
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

DSP新建工程警告:仍采用ELF输出格式解决办法第一步

  • 第二步:如1.1工程设置输出格式选择为ELF输出
    DSP新建工程警告:仍采用ELF输出格式解决办法第二步
  • 第三步:修改文件(同1.1.2 删除4处下划线,正确编码如图所示)
    DSP新建工程警告:仍采用ELF输出格式解决办法第三步
1.3.3 解决办法2(仅采用COFF格式输出)
  • 因为本人工作中仍以寄存器配置为主,不需要用到官方库函数,故我仍采用COFF格式,屏蔽包含driverlib.lib库的文件即可
    DSP新建工程警告:不采用ELF输出格式解决办法

1.4 编译无警告无报错,但仿真时无法运行

1.4.1 描述(No source available for " system post cinit0 at E:/ProjectName_Demol/Temple_Demo.out:(3} 0x3fb8b9{4")

DSP新建工程仿真异常

1.4.2 解决办法
  • 第一步:修改工程设置并应用(添加_FLASH:以实现将FLASH中的程序COPY到RAM中运行,目的是加快程序的运行速度)
    DSP新建工程:实现将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

DSP新建工程报错:任意变量未定义

  • 第三步:修改cmd文件,即前边加下划线(顺便解决第二步的报错)
    DSP新建工程:修改cmd文件以解决程序从flash复制到ram报错问题

总结

本章为软件调试问题系列文章 第二章:DSP软件调试问题

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐