99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

將DSP的Flash里面的函數(shù)轉(zhuǎn)移到RAM中

GReq_mcu168 ? 來源:玩轉(zhuǎn)單片機(jī) ? 2020-08-04 17:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一.將DSP的Flash里面的函數(shù)轉(zhuǎn)移到RAM

對(duì)于獨(dú)立的嵌入式系統(tǒng),需要把程序存入non-volitale存儲(chǔ)單元中,常用的也就是flash。但是程序在flash中運(yùn)行相對(duì)在RAM中行,速度會(huì)變慢很多,具體有多慢,拿28335來說吧,假設(shè)系統(tǒng)時(shí)鐘為150MHz,在RAM中運(yùn)行時(shí)頻率還是150MHz,而放在flash中,頻率會(huì)降到90-95MHz,參照Ti手冊(cè)SPRA958L,這對(duì)于有些對(duì)實(shí)時(shí)性要求較高的函數(shù)功能,是不可接受的。所以在系統(tǒng)上電時(shí),把對(duì)實(shí)時(shí)性要求高的函數(shù)轉(zhuǎn)移到RAM中去。

下面以initflash函數(shù)為例,具體步驟如下:

(1)、將函數(shù)定位到section:

#pragma CODE_SECTION(InitFlash, "secureRamFuncs")

當(dāng)遇到InitFlash(),就到段secureRamFuncs去運(yùn)行。

當(dāng)有多個(gè)函數(shù)需要轉(zhuǎn)移時(shí),重復(fù)使用#pragma CODE_SECTION(“函數(shù)名", "secureRamFuncs")即可。

即使有多個(gè)#pragma CODE_SECTION,后面的步驟只需要一次。

(2)、section分配到memory(紅色為memory)。

意思是到FLASH去下載InitFlash(),下載到SECURE_RAM,然后要到SECURE_RAM去運(yùn)行程序,這個(gè)過程給出了下載地址和目標(biāo)地址。注意此時(shí)SECURE_RAM中還沒有代碼。

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

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

#include //實(shí)際應(yīng)用中這一部分聲明可有可無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();}

二.將MCU的內(nèi)嵌Flash里的部分代碼運(yùn)行在 RAM 中

MCU 異于資源豐富的linux 平臺(tái)。MCU(如:基于Cortex V6M 的Cortex M0+ 等) Code通常運(yùn)行在內(nèi)嵌Flash中。在某些特定應(yīng)用場(chǎng)合,需要將部分函數(shù)運(yùn)行于RAM 中。為解決次問題,筆者實(shí)現(xiàn)了一種解法,具體做法如下:

1. 實(shí)現(xiàn)要運(yùn)行在RAM的 routine, 本routine 使用純匯編實(shí)現(xiàn), 如:

__asm void program_word2addr(uint32_t addr, uint32_t data){ push {r3, r4, r5, lr} ;save some regsiters /*your code for this routine*/ pop {r3, r4, r5, pc} }

2.編譯時(shí),采用code 與運(yùn)行位置無關(guān)的編譯選項(xiàng) 如 (Keil --apcs /ropi/rwpi), 生成 *.axf;

3.通過fromelf -c 將生成 *.axf 反匯編,找到對(duì)應(yīng)program_word2addr 實(shí)現(xiàn)部分, 并將routine 對(duì)應(yīng)的binary code Copy 到所要應(yīng)用的 Code 中,以只讀數(shù)組的形式出現(xiàn):

如:

const staic uint16_t s_flashProg2AddressCode[16] = {...., ....}

4.定義 一個(gè)全局?jǐn)?shù)組, 如 static uint16_t g_code[16], size正好等于 s_flashProg2AddressCode的長(zhǎng)度;

5. 定義一個(gè)函數(shù)指針, 如 static void (*callFlashPrg2Address)(uint32_t addr, uint32_t data)

6.定義一個(gè)函數(shù)實(shí)現(xiàn)將Code 運(yùn)行與 RAM如:

void run_prgcode_onram(uint32_t addr, uint32_t data){ memcpy(g_code,s_flashProg2AddressCode,32 ); callFlashPrg2Address = (void (*)(uint32_t addr, uint32_t data))((uin32_t)g_code + 1); callFlashPrg2Address (address, data); }

run_prgcode_onram, 便可以將program_word2addr 運(yùn)行于RAM中。

callFlashPrg2Address = (void (*)(uint32_t addr, uint32_t data))((uin32_t)g_code + 1); +1 的目的,時(shí)由于運(yùn)行平臺(tái)為 Cortex V6M , 采用的thumb指令集,根據(jù)ARM Spec 要求完成。

callFlashPrg2Address (address, data); 則是實(shí)現(xiàn)RAM運(yùn)行program_word2addr 的關(guān)鍵所在。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • dsp
    dsp
    +關(guān)注

    關(guān)注

    556

    文章

    8158

    瀏覽量

    357634
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1392

    瀏覽量

    117554
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64897

原文標(biāo)題:嵌入式開發(fā)中,如何將Flash中的程序轉(zhuǎn)移到RAM中運(yùn)行?

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【中科昊芯Core_DSC280025C開發(fā)板試用體驗(yàn)】+2.RAM工程與FLASH工程對(duì)比

    斷點(diǎn)只支持2個(gè)。程序運(yùn)行稍慢一些,但是可以通用修飾語(yǔ)句,讓某些函數(shù)加載到RAM里面,已達(dá)到運(yùn)行提速的目的。 所以,通常開發(fā)DSP的時(shí)候,大家是先在R
    發(fā)表于 07-04 10:37

    使用AD7616時(shí),轉(zhuǎn)換完成發(fā)送一次寫指令0x00就能將所有通道的數(shù)據(jù)轉(zhuǎn)移到SPIFIFO嗎?

    我在使用AD7616時(shí),轉(zhuǎn)換完成發(fā)送一次寫指令0x00就能將所有通道的數(shù)據(jù)轉(zhuǎn)移到SPIFIFO嗎?DMA又是怎么配置,我是讀取的SPIFIFO嗎?轉(zhuǎn)換兩次讀進(jìn)fifo的時(shí),第二次是接著第一個(gè)還是直接覆蓋了第一次的?
    發(fā)表于 04-24 06:02

    指定文件下的函數(shù)加載到指定ram問題

    問題:mcuxpresso環(huán)境,xip模式下我需要使用flexspinorflash的一部分作為文件系統(tǒng),flex以及fatfs相關(guān)函數(shù)全部加載到ram,發(fā)現(xiàn)rodata仍然在
    發(fā)表于 03-12 17:02

    是否可以使用OpenVINO?部署管理器在部署機(jī)器上運(yùn)行Python應(yīng)用程序?

    使用 OpenVINO?部署管理器創(chuàng)建運(yùn)行時(shí)軟件包。 運(yùn)行時(shí)包轉(zhuǎn)移到部署機(jī)器。 無法確定是否可以在部署機(jī)器上運(yùn)行 Python 應(yīng)用程序,而無需安裝OpenVINO? Toolkit 和 Python。
    發(fā)表于 03-05 08:16

    如何項(xiàng)目從IAR遷移到Embedded Studio

    本文描述如何IAR EWARM項(xiàng)目遷移到SEGGER Embedded Studio(簡(jiǎn)稱SES)。
    的頭像 發(fā)表于 02-25 17:11 ?594次閱讀
    如何<b class='flag-5'>將</b>項(xiàng)目從IAR遷<b class='flag-5'>移到</b>Embedded Studio

    CSP LED切割前如何轉(zhuǎn)移到UV膜上

    倒裝芯片底部與高溫膠膜接觸,封裝后如何芯片底部與高溫膜分離,然后轉(zhuǎn)移到UV膜上?
    發(fā)表于 10-29 23:23

    使用PCM5121,里面有用DSP的功能,這個(gè)芯片怎么使用?

    大家好! 我需要用到這芯片,里面有用DSP的功能,但是里面的濾波系數(shù)手冊(cè)沒有說明清楚,是否可以不需要經(jīng)過這個(gè)DSP模塊后直接輸出給DAC?或者給出濾波器的使用詳細(xì)信息。感謝??!
    發(fā)表于 10-09 09:44

    DSP/BIOS 5應(yīng)用程序遷移到SYS/BIOS 6

    電子發(fā)燒友網(wǎng)站提供《DSP/BIOS 5應(yīng)用程序遷移到SYS/BIOS 6.pdf》資料免費(fèi)下載
    發(fā)表于 09-27 10:54 ?0次下載
    <b class='flag-5'>將</b><b class='flag-5'>DSP</b>/BIOS 5應(yīng)用程序遷<b class='flag-5'>移到</b>SYS/BIOS 6

    編譯器部分從Flash復(fù)制到TMS320F28xxx DSC上的RAM

    電子發(fā)燒友網(wǎng)站提供《編譯器部分從Flash復(fù)制到TMS320F28xxx DSC上的RAM.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 11:02 ?0次下載
    <b class='flag-5'>將</b>編譯器部分從<b class='flag-5'>Flash</b>復(fù)制到TMS320F28xxx DSC上的<b class='flag-5'>RAM</b>

    今日看點(diǎn)丨谷歌明年將把Tensor G5生產(chǎn)轉(zhuǎn)移到臺(tái)積電;京東方推出新型OLED面板原型

    1. 傳三星3 納米良率20% 谷歌明年將把Tensor G5 生產(chǎn)轉(zhuǎn)移到臺(tái)積電 ? 據(jù)業(yè)內(nèi)人士9月13日透露,谷歌明年移動(dòng)應(yīng)用處理器的生產(chǎn)從三星電子轉(zhuǎn)向臺(tái)積電的可能性越來越大。明年發(fā)布的谷歌
    發(fā)表于 09-14 11:10 ?620次閱讀

    硅基CCD:基礎(chǔ)知識(shí)

    轉(zhuǎn)移到新像素上來移動(dòng)電子。這將一直持續(xù)到sensr,直到它們被轉(zhuǎn)移到讀出寄存器。(C) 位于底行的電子被轉(zhuǎn)移到讀出寄存器。(D) 一旦進(jìn)入讀出寄存器,電子就會(huì)通過正電荷逐列水平移動(dòng)
    的頭像 發(fā)表于 08-20 06:28 ?877次閱讀
    硅基CCD:基礎(chǔ)知識(shí)

    惠普計(jì)劃50%以上PC生產(chǎn)轉(zhuǎn)移到中國(guó)以外區(qū)域

    行業(yè)芯事行業(yè)資訊
    電子發(fā)燒友網(wǎng)官方
    發(fā)布于 :2024年08月08日 11:16:38

    固態(tài)SSD存儲(chǔ)擴(kuò)展新方案:突破容量限制,提升數(shù)據(jù)存儲(chǔ)效能

    在擴(kuò)展SSD之前,務(wù)必做好數(shù)據(jù)遷移和備份工作。這包括現(xiàn)有數(shù)據(jù)從舊硬盤轉(zhuǎn)移到新SSD上
    的頭像 發(fā)表于 08-02 18:03 ?1411次閱讀
    固態(tài)SSD存儲(chǔ)擴(kuò)展新方案:突破容量限制,提升數(shù)據(jù)存儲(chǔ)效能

    定時(shí)器回調(diào)函數(shù)能不能用ICACHE_FLASH_ATTR定義?

    非 OS SDK 在中斷處理函數(shù),請(qǐng)勿使用任何 ICACHE_FLASH_ATTR 定義的函數(shù)。 請(qǐng)問: 1、定時(shí)器和hw定時(shí)器的回調(diào)函數(shù)
    發(fā)表于 07-22 06:33

    esp32c3使用flash_download_tool_3.9.5燒錄不能擦除之前保存在nvs里面的信息怎么辦?

    esp32c3使用flash_download_tool_3.9.5燒錄不能擦除之前保存在nvs里面的信息,如果不按flash_download_tool里面的擦除按鍵,有沒有辦法使用
    發(fā)表于 07-19 07:47