当前位置:   article > 正文

DSP28335/28035程序烧入flash经验_ti 28035 如何从flash启动

ti 28035 如何从flash启动

  在DSP程序烧入flash后,为了使得程序运行时间和ram中一样,需要将程序搬运到ram里面。网上通常教的方法是利用memcopy函数,将需要搬迁到Ram的函数从Flash搬运至Ram中。
在main.c写

#pragma CODE_SECTION(adca1_interrupt_isr,"ramfuncs");//指定某函数在ram里运行
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); 
InitFlash();
  • 1
  • 2
  • 3

  如果adca1_interrupt_isr包含了所有的程序,而且没有程序调用的话,这样确实是使得所有的算法都运行到了ram里面,但是如果adca1_interrupt_isr中有几个函数A,B,C,D。它们写在了另一个文件vector.c中,那么这时候,A,B,C,D这几个函数的代码其实仍然是在flash中运行的。这样,程序的执行时间会变得和ram中不同。也就是说,这种方法只能将指定的函数搬运至Ram,这一函数调用的子函数并不会被搬运。
  为了实现真正搬运所需的全部函数,需要对CMD文件进行修改。

   ramfuncs            : LOAD = FLASHD, 
                         RUN = RAML0, 
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         LOAD_SIZE(_RamfuncsLoadSize),
                         PAGE = 0
						{
							-l rts2800_fpu32.lib<boot.obj>(.text)      /**/
							-l rts2800_fpu32_fast_supplement.lib<cos_f32.obj>(.text)
							-l rts2800_fpu32_fast_supplement.lib<sin_f32.obj>(.text)
							-l rts2800_fpu32_fast_supplement.lib<sqrt_f32.obj>(.text)
							-l rts2800_fpu32_fast_supplement.lib<div_f32.obj>(.text)
						}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

  以上修改中,将三角函数,开方,除法等函数所在文件对应生成的obj文件,链接到了ram里面。将编译生成的obj文件用连接符l使得它们被分配到FLASH加载RAM运行区域,使得对于时间要求较高的程序真正运行在RAM当中,这样整个程序就和ram里面跑基本效率差不多。
  总结下来,做法是针对需要移到ram运行的程序A,B,C,D,将这部分测序对应生成的obj文件A.obj,B.obj,C.obj,D.obj链接过去。

   ramfuncs            : LOAD = FLASHD, 
                         RUN = RAML0, 
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         LOAD_SIZE(_RamfuncsLoadSize),
                         PAGE = 0
						{
							-l rts2800_fpu32.lib<boot.obj>(.text)      /**/
							-l A.obj(.text)
							-l B.obj(.text)
							-l C.obj(.text)
							-l D.obj(.text)
						}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

  有的教程中,提到通过修改cmd文件让所有函数都直接在ram运行,这样我觉得是不好的。因为有时候我们用的芯片要烧入flash可能就是因为ram空间不够了,这时候把所有程序都搬运区ram运行,那么就和直接ram运行没区别了。像28335的ram比较大,影响不大,但是对28035这样ram比较小的dsp,ram空间会不足。
  有部分对时间要求不强的程序,在ram运行,属于浪费了ram。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/398532
推荐阅读
相关标签
  

闽ICP备14008679号