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

来源:互联网 发布:淘宝超市网址 编辑:程序博客网 时间:2024/06/06 01:40

芯片名称: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:\ti\myprojects\AUDwx\EX08_GPIO\Release\DSP28xxx_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。


0 0
原创粉丝点击