將DSP的flash裏面的函數轉移到ram中的步驟

對於獨立的嵌入式系統,需要把程序存入non-volitale存儲單元中,常用的也就是flash。但是程序在flash中運行相對在ram中行,速度會變慢很多,具體有多慢,拿28335來說吧,假設系統時鐘爲150MHz,在ram中運行時頻率還是150Mhz,而放在flash中,頻率會降到90-95Mhz,參照Ti手冊SPRA958L,這對於有些對實時性要求較高的函數功能,是不可接受的。所以在系統上電時,把對實時性要求高的函數轉移到ram中去。

下面以initflash函數爲例具體步驟如下:

(1)、將函數定位到section

#pragma CODE_SECTION(InitFlash, "secureRamFuncs")

當遇到InitFlash(),就到段secureRamFuncs去運行。

當有多個函數需要轉移時,重複使用#pragma CODE_SECTION(“函數名", "secureRamFuncs")即可。

即使有多個#pragma CODE_SECTION,後面的步驟只需要一次。

(2)section分配到memory(紅色爲memory)。

意思是到FLASH去下載InitFlash(),下載到SECURE_RAM,然後要到SECURE_RAM去運行程序,這個過程給出了下載地址和目標地址。注意此時SECURE_RAM中還沒有代碼。

SECTIONS
{
/*** User Defined Sections ***/
secureRamFuncs: LOAD = FLASH,PAGE = 0
RUN =SECURE_RAM, PAGE = 0
//定義FLASH和SECURE_RAM的首地址secureRamFuncs_loadstart和secureRamFuncs_loadstart以代替絕對地址
LOAD_START(_secureRamFuncs_loadstart),
LOAD_SIZE(_secureRamFuncs_loadsize),
RUN_START(_secureRamFuncs_runstart),
}

(3)、用memcpy()將經過#pragmaCODE_SECTION設定的函數從FLASH弄到SECURE_RAM中去。注意不是將FLASH的東西全部弄到SECURE_RAM中。

#include <string.h>
//實際應用中這一部分聲明可有可無
extern unsigned intsecureRamFuncs_loadstart;
extern unsigned intsecureRamFuncs_loadsize;
extern unsigned intsecureRamFuncs_runstart;
void main(void)
{
/* Copy the secureRamFuncs section */
memcpy(&secureRamFuncs_runstart,&secureRamFuncs_loadstart,(Uint32)&secureRamFuncs_loadsize);
/* Initialize the on-chip flash registers*/
InitFlash();
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章