gogo专业大尺度亚洲高清人体,美女张开双腿让男生桶,亚洲av无码一区二区三区鸳鸯影院,久久久久国产精品人妻

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 單片機MCU如何實現(xiàn)讓部分代碼運行在RAM中

單片機MCU如何實現(xiàn)讓部分代碼運行在RAM中 時間:2019-06-06      來源:華清遠見

隨著單片機硬件的發(fā)展,其中的RAM和flash越做越大。MCU在實際的使用中,通常程序都是運行在flash上的,RAM的高速空間并沒有得到充分的利用,如果我們的程序需要運行的更快,系統(tǒng)有更好的實時性,我們可以考慮將這部分代碼放到RAM中運行,下邊我們將以STMF103RCT6作為舉例,向大家介紹在keil環(huán)境中如何使程序在RAM中運行。

在STMF103RCT6單片機上有兩個存儲空間,一個是片上的FLASH(相當于硬盤),有256K,另一個就是SRAM(相當于內(nèi)存),有64K。

下邊是使用keil生成項目時的項目大小信息:

Code:程序代碼不分大小

RO-data:程序定義的常量

PW-data:已經(jīng)初始化的的全局變量

ZI-data:未初始化的全局變量,以及初始化為0的變量

下面給出三個值:

RO Size= Code + RO Data (程序占用FLASH空間的大小).

RW Size-RW Data +ZI Data (運行時程序占用RAM空間的大小).

ROM Size=Code + RO Data + RW Data (燒寫時程序占用FLASH空間的大小).

 

我們都知道,在燒寫程序的時候,需要燒寫bin文件或者hex文件到STM32的flash當中,三部分:cole, RO-data和RW-data,為什么不包含ZI數(shù)據(jù)呢,是因為ZI數(shù)據(jù)都是0,沒必要包含,只要程序運行之前將ZI數(shù)據(jù)所在的區(qū)域(這一區(qū)域在RAM中)一律清零即可。包含進去反而浪費flash存儲空間。

 

STM32上電啟動以后, cpu根據(jù)boot0和boot1的硬件引腳決定從flash還是ram中啟動,默認是從flash中啟動;啟動之后會搬運rw-data到ram,但是不會搬運code;也就是說 cpu執(zhí)行的代碼是在flash中讀取的,而不是在ram中。

快速新建一個項目,使一個LED燈閃爍。

實現(xiàn)函數(shù)如下:

在main函數(shù)中:

通過查看xx.msp文件,可以看到LEDToggle函數(shù)編譯后的地址是放在flash中的

那么如何將LEDToggle函數(shù)放在STM32的SRAM中:

1.打開編譯后生成的xx.sct文件,修改該文件

同時可以看到

Flash起始地址:0x08000000

RAM起始地址:0x20000000

2.在xx.sct文件中,定義一個RAMCODE的section,放在RW_IRAM1執(zhí)行區(qū)域(0x20000000-0x00002000)。

3.修改代碼

方法一:用#pragma arm section code = "RAMCODE" 和 #pragma arm section將需要放到SRAM中的程序包括起來;

然后編譯,重新打開xx.msp文件,可以看到LEDToggle函數(shù)編譯后的地址已經(jīng)在SRAM中

方法二:在需要放到RAM中的函數(shù)前,用__attribute__((section("RAMCODE")))聲明該函數(shù)放在RAMCODE section中。

然后編譯,重新打開xx.msp文件,可以看到LEDToggle函數(shù)編譯后的地址同樣在SRAM中

注意事項:

注意使用方法一時,該函數(shù)中調(diào)用到的所有函數(shù)也要放到RAMCODE section中,#pragma arm section code=“RAMCODE ”和#pragma arm section中可以包含多段代碼。

上一篇:linux curl命令用法簡介

下一篇:STM32 keil開發(fā)環(huán)境搭建

熱點文章推薦
華清學員就業(yè)榜單
高薪學員經(jīng)驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權(quán)所有 ,京ICP備16055225號-5,京公海網(wǎng)安備11010802025203號

回到頂部