日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Keil中的Code,RO,RW,ZI分别表示什么?

發布時間:2023/12/10 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Keil中的Code,RO,RW,ZI分别表示什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在使用keil開發STM32應用程序時,點擊Build后在Build Output窗口中經常會有如下信息:

以前一直好奇這幾個參數和實際使用的STM32芯片中Flash和SRAM的對應關系,于是上網搜了一圈,做如下總結:

  • 這些參數的單位是Byte
  • 圖中幾個參數分別代表?
    • Code:代碼的大小
    • RO:常量所占空間
    • RW:程序中已經初始化的變量所占空間
    • ZI:未初始化的static和全局變量以及堆棧所占的空間
  • 上述參數和芯片Flash以及SRAM的對應關系是?
    • Flash占用大小=Code+RO+RW
    • SRAM占用大小=RW+ZI

不知道有沒有人會像我一樣好奇為什么RW參數同時參與了Flash和SRAM占用量的計算。這是因為Flash部分的屬性是Read-Only的,而SRAM雖然是Read-Write但里面數據不能掉電保存,所以只能把已經初始化的值保存到ROM里,上電后再拷貝到SRAM中進行讀寫操作,即兩部分都需要留出RW變量所占用的空間。這里給出的解釋比較詳細,在此我參照著用STM32F407ZGT6圖解一下。?
STM32F407ZGT6的Flash大小為1MB,SRAM大小為(128KB+64KB)。這里SRAM之所以分開表示是因為在芯片內部前面的128KB和后面的64KB地址不是連續的,后面的64KB在ST官方叫做CCM (core coupled memory) ,據說是由內核直接訪問的,不能由外設訪問(見原帖2樓)。下面給出的示意圖中只標出了前面的128KB的SRAM空間。紅色部分表示STM32F407ZGT6提供的Flash和SRAM大小。

結合上圖說下STM32F407ZGT6的啟動過程(采用Cortex-M4、Cortex-M3內核的芯片基本都是這個過程):上電后首先從0x00000000(映射到0x08000000,這里只考慮從內部Flash啟動)處獲得中斷向量表,然后在運行用戶代碼之前會在標號2處有一段引導代碼負責把存在Flash中的初始化變量的值Copy到SRAM中對應的變量位置(標號3),之后把ZI區域全部清零(標號4),之后才正式開始運行用戶代碼(標號5)。

對于詳細的啟動過程,這個帖子寫得比較詳細,可以試試~

參考資料:?
http://stackoverflow.com/questions/5430284/rom-and-ram-in-arm?
http://blog.csdn.net/he_ning/article/details/35226125?
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/4027.html?
http://anlx27.iteye.com/blog/1575848

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Keil中的Code,RO,RW,ZI分别表示什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。