91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

ARM STM32中的程序是在RAM里還是在FLASH里運行?

冬至子 ? 來源:老羊快跑 與 深度學習 ? 作者:老羊快跑 ? 2023-10-27 14:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

STM32有兩個存儲空間,一個是片上的FLASH,一個是片上的RAM。RAM相當于內存,F(xiàn)LASH相當于硬盤。(以下英文大小寫不分)

圖片

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

Code表示程序代碼部分

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

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

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

下面給出三個值:

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

RW Size=RW Data + ZIData (運行時程序占用RAM空間的大小)

ROM Size=Code + RO Data + RWData (燒寫時程序占用FLASH空間的大?。?/strong>

我們都知道,在燒寫程序的時候,需要燒寫bin文件或者hex文件到STM32的flash當中,被燒寫的文件稱為映像文件image。Image的內容包含三部分:code,RO-data 和RW-data。

為什么Image不包含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中。當然這個flash是nor型的.

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

    關注

    10

    文章

    1748

    瀏覽量

    155511
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1399

    瀏覽量

    120546
  • STM32
    +關注

    關注

    2309

    文章

    11162

    瀏覽量

    373413
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    單片機程序運行方式

    控制權交給用戶程序。如果是新的芯片還沒有下載過,那么就停留在讀取串口狀態(tài)的循環(huán)中。 啟動代碼通常都燒寫在flash,它是系統(tǒng)一上電就執(zhí)行的一段程序,它
    發(fā)表于 01-16 06:57

    Infineon SEMPER NOR Flash與HYPERRAM? 2.0 Gen2 Flash+RAM MCP產品解析

    Infineon SEMPER NOR Flash與HYPERRAM? 2.0 Gen2 Flash+RAM MCP產品解析 引言 汽車集群和工業(yè)HMI應用,通常會使用NOR
    的頭像 發(fā)表于 12-20 16:20 ?1200次閱讀

    FLASH的代碼是如何得到運行的呢

    ARM為例: ARM-cortex-M3/4的單片機(比如STM32 等):該類單片機的代碼nor flash
    發(fā)表于 12-04 08:06

    MCU代碼需要搬到RAM才能運行嗎?不這樣做會有什么不妥嘛?

    是塊,不能對指令直接尋址,因此不能直接運行其中的代碼。 因此保存在nand flash程序不加載到ram
    發(fā)表于 12-04 07:39

    單片機程序的執(zhí)行

    memory)存放,而數(shù)據(jù)就放在了RAM(flash的寫入次數(shù)有限制,同時它的速度和RAM還是
    發(fā)表于 12-04 06:20

    Nuclei IDE燒寫程序無法成功的原因及部分解決辦法

    ; 重新生成mcu200t的mcs文件,下載至FPGA 2. lim運行蜂鳥的helloworld程序,若成功則執(zhí)行步驟3 3. 下載helloword
    發(fā)表于 10-31 06:24

    如何從 flash 把代碼搬運到 ram 運行的?

    沒有已經移植適配過的芯片 運行機制是從 flash 把代碼搬運到 ram 運行
    發(fā)表于 09-28 11:03

    TLE9893是否支持FLASH1上運行代碼來擦除和編程FLASH1?

    芯片TLE9893是否支持FLASH1上運行代碼來擦除和編程FLASH1。NVM-PROG_UCODE
    發(fā)表于 08-13 08:14

    嵌入式系統(tǒng)FLASH 程序代碼必須搬到 RAM 運行嗎?

    嵌入式系統(tǒng)FLASH 程序代碼并非必須搬到 RAM
    的頭像 發(fā)表于 08-06 10:19 ?1356次閱讀
    嵌入式系統(tǒng)<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'>RAM</b> <b class='flag-5'>中</b><b class='flag-5'>運行</b>嗎?

    如何將Flash刷寫程序放到SRAM運行?

    客戶要求Flash driver不能存儲Flash,需要在升級的時候,由CAN FBL發(fā)送到SRAM,再
    發(fā)表于 07-15 07:22

    【中科昊芯Core_DSC280025C開發(fā)板試用體驗】+2.RAM工程與FLASH工程對比

    。代碼運行RAM下,主要用于開發(fā)調試模式,優(yōu)點是下載速度快,運行的也快,缺點是斷電程序就丟失了。 若代碼
    發(fā)表于 07-04 10:37

    STM32IDE如何設定代碼到ITCM運行

    摸索到了如何將變量定義到某個地址,但是不清楚如何讓代碼指定RAM運行。按照設定變量的方式設定代碼,程序直接進入了異常中斷{:16:}。
    發(fā)表于 06-24 06:45

    STM32Cube IDE1.18.0 寫ODR編譯不成,咋辦?

    STM32Cube IDE1.18.0寫ODR 編譯不成,咋辦?
    發(fā)表于 06-09 07:36

    CUEBIDE生成的APP程序,寫入FLASH之后無法正常跳轉怎么解決?

    (); STM32F407ZGTX_FLASH.ld修改 / Memories definition / MEMORY { CCMRAM (xrw) : ORIGIN = 0x10000000
    發(fā)表于 06-09 06:43

    CUEBIDE生成的APP程序,寫入FLASH之后無法正常跳轉怎么解決?

    (); STM32F407ZGTX_FLASH.ld修改 /[i] Memories definition / MEMORY { CCMRAM (xrw) : ORIGIN = 0x10000000
    發(fā)表于 06-05 07:15