女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

將DSP的Flash里面的函數轉移到RAM中

GReq_mcu168 ? 來源:玩轉單片機 ? 2020-08-04 17:10 ? 次閱讀

一.將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 = 0RUN =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 //實際應用中這一部分聲明可有可無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的內嵌Flash里的部分代碼運行在 RAM 中

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

1. 實現要運行在RAM的 routine, 本routine 使用純匯編實現, 如:

__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.編譯時,采用code 與運行位置無關的編譯選項 如 (Keil --apcs /ropi/rwpi), 生成 *.axf;

3.通過fromelf -c 將生成 *.axf 反匯編,找到對應program_word2addr 實現部分, 并將routine 對應的binary code Copy 到所要應用的 Code 中,以只讀數組的形式出現:

如:

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

4.定義 一個全局數組, 如 static uint16_t g_code[16], size正好等于 s_flashProg2AddressCode的長度;

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

6.定義一個函數實現將Code 運行與 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 運行于RAM中。

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

callFlashPrg2Address (address, data); 則是實現RAM運行program_word2addr 的關鍵所在。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • dsp
    dsp
    +關注

    關注

    555

    文章

    8144

    瀏覽量

    355339
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1391

    瀏覽量

    116834
  • 函數
    +關注

    關注

    3

    文章

    4371

    瀏覽量

    64229

原文標題:嵌入式開發中,如何將Flash中的程序轉移到RAM中運行?

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    使用AD7616時,轉換完成發送一次寫指令0x00就能將所有通道的數據轉移到SPIFIFO嗎?

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

    指定文件下的函數加載到指定ram問題

    問題:mcuxpresso環境,xip模式下我需要使用flexspinorflash的一部分作為文件系統,flex以及fatfs相關函數全部加載到ram,發現rodata仍然在
    發表于 03-12 17:02

    是否可以使用OpenVINO?部署管理器在部署機器上運行Python應用程序?

    使用 OpenVINO?部署管理器創建運行時軟件包。 運行時包轉移到部署機器。 無法確定是否可以在部署機器上運行 Python 應用程序,而無需安裝OpenVINO? Toolkit 和 Python。
    發表于 03-05 08:16

    如何項目從IAR遷移到Embedded Studio

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

    CSP LED切割前如何轉移到UV膜上

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

    DSP/BIOS 5應用程序遷移到SYS/BIOS 6

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

    編譯器部分從Flash復制到TMS320F28xxx DSC上的RAM

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

    今日看點丨谷歌明年將把Tensor G5生產轉移到臺積電;京東方推出新型OLED面板原型

    1. 傳三星3 納米良率20% 谷歌明年將把Tensor G5 生產轉移到臺積電 ? 據業內人士9月13日透露,谷歌明年移動應用處理器的生產從三星電子轉向臺積電的可能性越來越大。明年發布的谷歌
    發表于 09-14 11:10 ?583次閱讀

    硅基CCD:基礎知識

    轉移到新像素上來移動電子。這將一直持續到sensr,直到它們被轉移到讀出寄存器。(C) 位于底行的電子被轉移到讀出寄存器。(D) 一旦進入讀出寄存器,電子就會通過正電荷逐列水平移動
    的頭像 發表于 08-20 06:28 ?759次閱讀
    硅基CCD:基礎知識

    惠普計劃50%以上PC生產轉移到中國以外區域

    行業芯事行業資訊
    電子發燒友網官方
    發布于 :2024年08月08日 11:16:38

    固態SSD存儲擴展新方案:突破容量限制,提升數據存儲效能

    在擴展SSD之前,務必做好數據遷移和備份工作。這包括現有數據從舊硬盤轉移到新SSD上
    的頭像 發表于 08-02 18:03 ?1339次閱讀
    固態SSD存儲擴展新方案:突破容量限制,提升數據存儲效能

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

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

    人工神經元模型中常見的轉移函數有哪些

    人工神經元模型是神經網絡的基礎,它模擬了生物神經元的工作原理。在人工神經元模型轉移函數起著至關重要的作用,它決定了神經元的輸出。以下是一些常見的轉移
    的頭像 發表于 07-11 11:22 ?1655次閱讀

    今日看點丨谷歌Tensor G5芯片的代工合作伙伴從三星轉移到臺積電;傳極星汽車裁員約 30%,成都工廠關停

    1. 谷歌Tensor G5 芯片的代工合作伙伴從三星轉移到臺積電 ? 三星電子去年贏得谷歌Tensor G4訂單,曾有望縮小與臺積電在晶圓代工領域的差距。然而,最近的事態發展表明谷歌的戰略正在
    發表于 07-08 10:56 ?657次閱讀

    請問ESP32如何實現Flashram重映射這種功能呢?

    拷貝到對應ram內存,當在線標定時,會直接操作ram相應的地址,以實現參數在線修改。 請問ESP32如何實現Flash
    發表于 06-14 06:31