DSP

F2812程序从Flash搬到RAM中运行(调试过程)

2019-07-13 14:49发布

芯片名称:TMS320F2812    编译器版本:CCS2.2 F2812程序在Flash中运行速度较慢,对时间敏感的程序需要从Flash搬到RAM中运行,有两种方法: 1 部分程序搬运   2 按段搬运(全部程序都搬) 第1种较第2种方法繁琐,在RAM空间足够的情况下,可以用第2种方法。按照《基于TMS320F2812flash搬移到RAM里运行实现》一文中的方法来做,调试时出现如下报错, >> warning: entry point symbol _c_int00 undefined undefined                        first referenced
 symbol                              in file
---------                        ----------------
_c_int00                         C: imyprojectsAUDwxEX08_GPIOReleaseDSP28xxx_SectionCopy_nonBIOS.obj >>   error: symbol referencing errors - './Release/ext_int.out' not built
没人问好不爽..花了两天时间才找到原因。添加库文件rts2800_ml.lib就可以了,参照《从TMS320F281x DSP片上FLASH中运行应用程序》
2812自带了一个延时程序,DSP28x_usDelay,先在RAM中调试好,烧进Flash之后就不行了,打开DSP281x_usDelay.asm ;---------------------------------------------------------------------------------------------------        .def _DSP28x_usDelay
       .sect "ramfuncs"
; .sect "copysections"
; .sect .text
        .global  __DSP28x_usDelay
_DSP28x_usDelay:
        SUB    ACC,#1
        BF     _DSP28x_usDelay,GEQ    ;; Loop if ACC >= 0
        LRETR 
;---------------------------------------------------------------------------------------------------
ramfuncs好像没有定义过,在方法1中经常出现,打开DSP28xxx_SectionCopy_nonBIOS.asm,看到有这么一句.sect "copysections",然后把.sect "ramfuncs"改成.sect "copysections"。用一个011(单位10ms)的方波来看效果,发现一个周期有300ms左右,比直接在RAM中慢了10倍。因为其他的程序都放在.text段里,就把.sect "copysections"改成.sect .text,结果就可以用了。
总结一下: 1 推荐用从TMS320F281x DSP片上FLASH中运行应用程序》作为参考,记得添加库文件rts2800_ml.lib 按段搬运,如果想用DSP28x_usDelay的话就把DSP281x_usDelay.asm中的.sect "ramfuncs"改成.sect .text。