芯片名称: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;
2 按段搬运,如果想用DSP28x_usDelay的话就把DSP281x_usDelay.asm中的.sect
"ramfuncs"改成.sect .text。