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

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

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

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

如何將Flash中的程序轉(zhuǎn)移到RAM中運(yùn)行

GReq_mcu168 ? 來源:陳翠 ? 2019-02-22 11:21 ? 次閱讀

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

1.SECTIONS

2.{

3./*** User Defined Sections ***/

4.secureRamFuncs: LOAD = FLASH,PAGE = 0

5.RUN =SECURE_RAM, PAGE = 0

6.//定義FLASH和SECURE_RAM的首地址secureRamFuncs_loadstart和secureRamFuncs_loadstart以代替絕對地址

7.LOAD_START(_secureRamFuncs_loadstart),

8.LOAD_SIZE(_secureRamFuncs_loadsize),

9.RUN_START(_secureRamFuncs_runstart),

10.}

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

1.#include

2.//實(shí)際應(yīng)用中這一部分聲明可有可無

3.extern unsigned intsecureRamFuncs_loadstart;

4.extern unsigned intsecureRamFuncs_loadsize;

5.extern unsigned intsecureRamFuncs_runstart;

6.void main(void)

7.{

8./* Copy the secureRamFuncs section */

9.memcpy(&secureRamFuncs_runstart,&secureRamFuncs_loadstart,(Uint32)&secureRamFuncs_loadsize);

10./* Initialize the on-chip flash registers*/

11.InitFlash();

12.}

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

MCU 異于資源豐富的linux 平臺。 MCU(如: 基于Cortex V6M 的Cortex M0+ 等) Code通常運(yùn)行在內(nèi)嵌Flash中。 在某些特定應(yī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 反匯編,找到對應(yīng)program_word2addr 實(shí)現(xiàn)部分, 并將routine 對應(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的長度;

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)行平臺為 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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • DRAM
    +關(guān)注

    關(guān)注

    40

    文章

    2337

    瀏覽量

    184272
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1649

    瀏覽量

    149491

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    如何用加載分散法軟件中部分變量從內(nèi)部RAM轉(zhuǎn)移到外部RAM

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

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

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

    tms320C6416 bios引導(dǎo)程序二次啟動(dòng),請問如何將程序FLASH移到RAM運(yùn)行

    [size=150%]如何將程序FLASH移到RAM運(yùn)
    發(fā)表于 07-31 06:38

    請問F28M35x如何將flash中部分程序加載到ram運(yùn)行

    求教一個(gè)問題:如何將flash的部分程序加載到ram運(yùn)行
    發(fā)表于 08-20 06:16

    如何把RAM區(qū)域轉(zhuǎn)移到另一個(gè)RAM區(qū)域

    你好。我現(xiàn)在正在進(jìn)行一個(gè)項(xiàng)目,其中在一些情況下,我需要把數(shù)據(jù)塊從一個(gè)RAM區(qū)域轉(zhuǎn)移到另一個(gè)RAM區(qū)域。為了加快進(jìn)程,我嘗試使用DMA傳輸,因?yàn)榇a需要盡可能快地運(yùn)行。我的問題是,當(dāng)訪問
    發(fā)表于 04-29 13:19

    如何將舊的ISE設(shè)計(jì)轉(zhuǎn)移到Vivado 2014.1

    你好我有一個(gè)新的vc707板。我可以舊的ISE設(shè)計(jì)轉(zhuǎn)移到Vivado 2014.1。使用Vivado,我可以通過USB電纜將我的比特流下載到電路板上,沒有任何問題。但是當(dāng)我嘗試使用Vivado將我
    發(fā)表于 05-29 10:43

    ch579例程里使用的是Keil編譯,轉(zhuǎn)移到MounRiver是有什么要配置的嗎?

    579例程里使用的是Keil編譯的,我工程轉(zhuǎn)移到MounRiver來編譯,編譯成功了,下載程序跑起來會,串口會有幾率亂碼,在轉(zhuǎn)移到MounRiver是有什么要配置的嗎J?還是說兼容不
    發(fā)表于 09-02 06:47

    如何將pin從arduino轉(zhuǎn)移到esp32?

    大家好,我最近將我的項(xiàng)目從 Arduino 轉(zhuǎn)移到 ESP32,我在 arduino 上使用引腳 10,9 從我的設(shè)備和庫 SoftwareSerial 傳輸 RX/TX。我想知道我可以在 ESP 中使用哪個(gè)引腳,如果我要使用 ESPSoftwareSerial。
    發(fā)表于 04-12 06:14

    IAR下如何將程序拷貝在RAM運(yùn)行

    有時(shí)候我們需要將一部分程序FLASH 拷貝到 RAM 運(yùn)行,以提高程序
    發(fā)表于 09-28 06:50

    IAR 下如何將程序拷貝在 RAM 運(yùn)行

    STM32上面的如何讓程序RAM運(yùn)行
    發(fā)表于 11-25 14:46 ?0次下載

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

    意思是到FLASH去下載InitFlash(),下載到SECURE_RAM,然后要到SECURE_RAM運(yùn)行程序,這個(gè)過程給出了下載地址和目標(biāo)地址。注意此時(shí)SECURE_
    的頭像 發(fā)表于 08-04 17:10 ?2685次閱讀

    從TMS320F281xDSP片上FLASH運(yùn)行應(yīng)用程序_從FLASH轉(zhuǎn)移到RAM運(yùn)行_BIOS

    從TMS320F281xDSP片上FLASH運(yùn)行應(yīng)用程序_從FLASH轉(zhuǎn)移到
    發(fā)表于 07-30 11:54 ?3次下載
    從TMS320F281xDSP片上<b class='flag-5'>FLASH</b><b class='flag-5'>中</b><b class='flag-5'>運(yùn)行</b>應(yīng)用<b class='flag-5'>程序</b>_從<b class='flag-5'>FLASH</b><b class='flag-5'>轉(zhuǎn)移到</b><b class='flag-5'>RAM</b><b class='flag-5'>運(yùn)行</b>_BIOS

    【單片機(jī)程序RAM程序RAM調(diào)試的運(yùn)行方式&程序固化后運(yùn)行方式

    程序固化后運(yùn)行方式: 程序開始運(yùn)行后需要將RW 和ZI段搬移到RAM中去,
    發(fā)表于 12-03 15:21 ?4次下載
    【單片機(jī)<b class='flag-5'>程序</b>和<b class='flag-5'>RAM</b>】<b class='flag-5'>程序</b>在<b class='flag-5'>RAM</b><b class='flag-5'>中</b>調(diào)試的<b class='flag-5'>運(yùn)行</b>方式&<b class='flag-5'>程序</b>固化后<b class='flag-5'>運(yùn)行</b>方式

    嵌入式開發(fā)如何將Flash程序轉(zhuǎn)移到RAM運(yùn)行

    對于獨(dú)立的嵌入式系統(tǒng),需要把程序存入non-volitale存儲單元,常用的也就是flash。但是程序flash
    發(fā)表于 02-09 10:14 ?4次下載
    嵌入式開發(fā)<b class='flag-5'>中</b>,<b class='flag-5'>如何將</b><b class='flag-5'>Flash</b><b class='flag-5'>中</b>的<b class='flag-5'>程序</b><b class='flag-5'>轉(zhuǎn)移到</b><b class='flag-5'>RAM</b><b class='flag-5'>中</b><b class='flag-5'>運(yùn)行</b>?

    嵌入式開發(fā)如何將Flash程序轉(zhuǎn)移到RAM運(yùn)行

    嵌入式開發(fā)如何將Flash程序轉(zhuǎn)移到RAM
    的頭像 發(fā)表于 10-29 16:23 ?3967次閱讀
    主站蜘蛛池模板: 99精品免费久久久久久久久日本 | 久久毛片视频 | 日韩人妻精品久久日 | 8x华人免费视频 | 一级毛片免费视频网站 | 国产69精品久久久久妇女 | 色色激情网 | 99精品久久久久久久 | 成人毛片在线播放 | 久久精品电影网 | 久久人妻AV一区二区软件 | 一道本无吗d d在线播放 | 欧美日韩另类在线观看视频 | 蜜桃婷婷狠狠久久综合9色 蜜桃视频一区二区 | 国产精品嫩草影院一区二区三区 | 久久久久伊人 | 亚洲免费观看 | 4438成人情人网站 | 被男按摩师添的好爽在线直播 | 亚洲精品入口一区二区乱麻豆精品 | 国产成人综合高清在线观看 | 被老总按在办公桌吸奶头 | 永久免费精品精品永久-夜色 | 成人在无码AV在线观看一 | 国产又湿又黄又硬又刺激视频 | 97超碰在线视频人人av | 成人精品视频99在线观看免费 | 97国产成人精品免费视频 | 米奇在线8888在线精品视频 | 永久免费在线视频 | 四虎永久在线精品免费A | 恋夜影视列表免费安卓手机版 | 啦啦啦 中文 中国 免费 高清在线 | 把她带到密室调教性奴 | 秋霞影音先锋一区二区 | 最近中文字幕高清中文 | a在线观看免费视频 | 免费韩伦影院在线观看 | 在线观看免费小视频 | h片下载地址| 国产亚洲日韩另类在线播放 |