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

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

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

ARM STM32中的程序是在RAM里還是在FLASH里運(yùn)行?

冬至子 ? 來(lái)源:老羊快跑 與 深度學(xué)習(xí) ? 作者:老羊快跑 ? 2023-10-27 14:06 ? 次閱讀

STM32有兩個(gè)存儲(chǔ)空間,一個(gè)是片上的FLASH,一個(gè)是片上的RAM。RAM相當(dāng)于內(nèi)存,F(xiàn)LASH相當(dāng)于硬盤(pán)。(以下英文大小寫(xiě)不分)

圖片

Keil下,工程編譯完成總會(huì)出現(xiàn)上面的信息,這些信息都代表什么呢?代表程序占用的空間。

Code表示程序代碼部分

RO-data 表示程序定義的常量(如:intconst x等);

RW-data 表示已初始化的全局變量

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

下面給出三個(gè)值:

RO Size= Code + ROData (程序占用FLASH空間的大?。?/strong>

RW Size=RW Data + ZIData (運(yùn)行時(shí)程序占用RAM空間的大?。?/strong>

ROM Size=Code + RO Data + RWData (燒寫(xiě)時(shí)程序占用FLASH空間的大小)

我們都知道,在燒寫(xiě)程序的時(shí)候,需要燒寫(xiě)bin文件或者h(yuǎn)ex文件到STM32的flash當(dāng)中,被燒寫(xiě)的文件稱為映像文件image。Image的內(nèi)容包含三部分:code,RO-data 和RW-data。

為什么Image不包含ZI數(shù)據(jù)呢,是因?yàn)閆I數(shù)據(jù)都是0,沒(méi)必要包含,只要程序運(yùn)行之前將ZI數(shù)據(jù)所在的區(qū)域(這一區(qū)域在RAM中)一律清零即可。包含進(jìn)去反而浪費(fèi)flash存儲(chǔ)空間。

STM32上電啟動(dòng)以后,cpu根據(jù)boot0和boot1的硬件引腳決定從flash還是ram中啟動(dòng),默認(rèn)是從flash中啟動(dòng);啟動(dòng)之后會(huì)搬運(yùn)rw-data到ram,但是不會(huì)搬運(yùn)code;也就是說(shuō)cpu執(zhí)行的代碼是在flash中讀取的,而不是在ram中。當(dāng)然這個(gè)flash是nor型的.

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

    關(guān)注

    10

    文章

    1598

    瀏覽量

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

    關(guān)注

    8

    文章

    1344

    瀏覽量

    114214
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10828

    瀏覽量

    352468
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ram還是flash快?

    ] ...... /****************************************************/ 結(jié)論就是: 1. 跑ram還是
    發(fā)表于 05-17 15:49

    用STM8S103K3來(lái)做IAP自升級(jí)功能,燒寫(xiě)Flash程序運(yùn)行RAM,到了某一個(gè)固定的位置就會(huì)寫(xiě)錯(cuò)為什么?

    大家好,我目前用STM8S103K3來(lái)做IAP自升級(jí)功能。 目前,我是用ARM來(lái)轉(zhuǎn)128個(gè)字節(jié)過(guò)來(lái)給STM8,然后,讓燒寫(xiě)Flash程序運(yùn)行RA
    發(fā)表于 05-16 06:45

    STM32F4 Keil程序RAM調(diào)試運(yùn)行的問(wèn)題求解

    用Keil,設(shè)置好向量表ram,然后修改程序位置,調(diào)試載入時(shí)設(shè)置pc,sp等,能正常調(diào)試。我的程序僅僅就是進(jìn)入main后,初始化串口,開(kāi)
    發(fā)表于 05-13 06:51

    STM32F103XX系統(tǒng)的mcuFLASH_OBR寄存器中有個(gè)USER【User option bytes】字段,這是什么意思?

    STM32F103XX系統(tǒng)的mcu,FLASH_OBR寄存器中有個(gè)USER【User option bytes】字段,請(qǐng)問(wèn)這個(gè)是什么意思?用于什么作用的?必須得配置
    發(fā)表于 05-10 06:13

    STM8RAM運(yùn)行遇到的疑問(wèn)求解

    系統(tǒng)函數(shù),而這個(gè)系統(tǒng)函數(shù)flash里面。這個(gè)時(shí)候我把flash 已經(jīng)關(guān)了。程序就執(zhí)行不動(dòng)了。 RAM的地址域是from 0x0000 t
    發(fā)表于 05-07 07:32

    為什么將延時(shí)程序搬到RAM運(yùn)行反而變慢了?

    原先delay()主循環(huán)中演示閃燈的,后來(lái)搬到RAM運(yùn)行,發(fā)現(xiàn)閃燈變慢了,怎么會(huì)在RAM
    發(fā)表于 05-07 06:32

    關(guān)于STM32G473程序運(yùn)行FlashRam速度的疑問(wèn)求解

    關(guān)于STM32G473程序運(yùn)行FlashRam速度問(wèn)題,向大家請(qǐng)教一下。之前用的是F4系列的程序
    發(fā)表于 04-12 07:18

    使用外部QSPIKEIL調(diào)試?yán)鲜遣粚?duì),為什么?

    我打算程序QSPI 運(yùn)行,但是要實(shí)現(xiàn)在KEIL調(diào)試,我首先將STM32H750 W25Q6
    發(fā)表于 04-01 07:21

    STM32HIAR如何實(shí)現(xiàn)從FLASH加載到SRAM運(yùn)行程序?

    如題,STM32H IAR如何實(shí)現(xiàn)從FLASH加載到SRAM運(yùn)行程序 有沒(méi)有相關(guān)的例程可供
    發(fā)表于 03-28 07:46

    怎么才能實(shí)現(xiàn)eclipse+jlinkRAM調(diào)試代碼?

    使用eclipse+jlink下載到flash調(diào)試stm32g0已經(jīng)可以,現(xiàn)在想把代碼放到RAM調(diào)試,改了3個(gè)地方,但失敗了,請(qǐng)問(wèn)有研究
    發(fā)表于 03-08 07:20

    TC265如何將特定函數(shù)挪至RAM運(yùn)行?

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

    STM32的串口通信

    STM32的串口通信 STM32,串口通信是USART,STM32可以通過(guò)串口和其他設(shè)備進(jìn)
    的頭像 發(fā)表于 11-10 15:58 ?2596次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>里</b>的串口通信

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

    嵌入式開(kāi)發(fā),如何將Flash程序轉(zhuǎn)移到RAM運(yùn)行
    的頭像 發(fā)表于 10-29 16:23 ?2873次閱讀

    KEIL如何讓程序RAM運(yùn)行

    STM32F411Nucleo 的一個(gè)例子來(lái)介紹幾種讓程序 RAM 運(yùn)行的方法。
    發(fā)表于 09-28 08:19

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

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