色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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
    +關注

    關注

    554

    文章

    8059

    瀏覽量

    349747
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1369

    瀏覽量

    114864
  • 函數
    +關注

    關注

    3

    文章

    4344

    瀏覽量

    62857

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

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

收藏 人收藏

    評論

    相關推薦

    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

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

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

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

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

    如何PSoC4000部件的設計過渡到PSoC4000T部件?

    英飛凌提供哪些支持,幫助客戶現有 PSoC 設計轉移到新產品? 如何 PSoC4000 部件的設計過渡到 PSoC4000T 部件? PSoC4000 部件僅支持 PSoC Cr
    發表于 05-29 06:35

    請問stm32f4的dsp里面fir函數如何使用?

    請問在stm32f4 的dsp里面有好幾個關于fir的函數,因為沒有源碼,我也沒有什么關于這個dsp函數的介紹,所以看不懂這些
    發表于 05-17 08:07

    可以從下面的圖看出我的工程flashram的使用情況嗎?

    芯片是:dspf28335;可以從下面的圖看出我的工程flashram的使用情況嗎?感覺flash還可以,ram有點不夠用了,請求大師指點
    發表于 05-11 10:11

    STM32F7的ITCM_RAM可以存放指令,在IAR如何特定的函數定義在該RAM呢?

    STM32F7的ITCM_RAM可以存放指令,其地址為0x0000 0000-0x0000 3FFF,但在IAR如何特定的函數定義在該RAM
    發表于 05-10 08:11

    如何用加載分散法軟件中部分變量從內部RAM轉移到外部RAM

    如何用加載分散法軟件中部分變量從內部RAM轉移到外部RAM, 加載分散法文件怎么設置?堆和棧需要設置嗎?
    發表于 05-10 07:52

    STM8在RAM運行遇到的疑問求解

    系統函數,而這個系統函數flash里面。這個時候我把flash 已經關了。程序就執行不動了。 RAM
    發表于 05-07 07:32

    馬斯克訪華:討論FSD在華落地并爭取數據轉移許可

    兩位知情人士透露,他將與中國政府高層官員商討自動駕駛軟件FSD在華實施可能性及相關數據跨境轉移問題。據悉,馬斯克希望通過此次訪問獲得將其在華所采集汽車數據轉移到境外用于自動駕駛算法訓練的許可。
    的頭像 發表于 04-28 14:45 ?924次閱讀

    如何bootloader代碼從flash搬到RAM運行?

    如何bootloader 代碼從flash 搬到RAM 運行
    發表于 04-03 07:14

    如何bootloader代碼從flash搬到RAM運行?

    如何bootloader 代碼從flash 搬到RAM 運行
    發表于 04-01 07:10

    TC265如何特定函數挪至RAM運行?

    目前在做TCC265的bootloader,需要把操作flash的代碼挪至RAM運行。目前根據資料嘗試過在初始化階段通過memcopy函數
    發表于 02-19 08:33

    使用ILLD庫里面的FLASH_demo對PFLASH進行擦寫,數據沒有被寫入到FLASH是為什么?

    使用ILLD庫里面的FLASH_demo對PFLASH進行擦寫(不做代碼修改),發現PSPR上運行成功了,FLASH驅動也運行了,但是數據沒有被寫入到FLASH
    發表于 02-02 06:48
    主站蜘蛛池模板: 吃奶啃奶玩乳漫画| 丰满老熟好大bbbxxx| 丰满老熟好大bbbxxx| 欧美の无码国产の无码影院| 一本之道高清在线观看一区| 青柠在线观看视频在线| 91偷偷久久做嫩草电影院| 久久夜色撩人精品国产| 一个人看www| 啦啦啦 中文 中国 免费 高清在线| 日韩一区精品视频一区二区| 成人免费视频网站www| 少妇系列之白嫩人妻| 国产欧美国产综合第一区| 亚洲第一天堂无码专区| 国产原创中文视频| 野花韩国中文版免费观看| 久久热最新网站获取3| 最新亚洲中文字幕在线观看| 男女肉大捧进出全过程免费| WWW亚洲精品久久久乳| 同桌上课把奶露出来给我玩| 国精产品一区一区三区有| 一级淫片bbbxxx| 女生扒开尿口| 福利社的阿姨| 亚洲精品123区在线观看| 久久99re8热在线播放| 97豆奶视频国产| 肉蒲团从国内封禁到日本成经典| silk118中文字幕无删减| 日日噜噜大屁股熟妇| 韩国伦理电影在线神马网| 2021久久99国产熟女人妻| 日本久久不射| 娇女的呻吟亲女禁忌h16| 99久久就热视频精品草| 十九禁啊啪射视频在线观看| 狠狠色狠狠色综合| A级韩国乱理伦片在线观看| 亚洲成人网导航|