2017年8月8日 星期二

[C51/ARM] Keil C中的RO-data, RW-data, ZI-data說明

此介紹是給在Keil C編譯器上使用8051(C51)和ARM.


●Code
編譯器編譯後的所產生的bit或hex檔,會被存到Flash或ROM裡面.

●RO-data (Read-Only data)
程式裡宣告為常數的變數,存在ROM裡.
eq. const int a = 100;

●RW-data (Read-Write data)
程式裡宣告帶有初始值的變數,存在ROM裡,執行時會複製到RAM.
eq. int a = 100;

●ZI-data (Zero Initialie data)
程式裡宣告無初始值的變數,只佔RAM.
eq. int a;

ROM = Code + RO +RW
RAM = RW + ZI

 ----------------------------------------------------------------------------------
補充:
1. 函式(function)內無初始值的變數會被放在ZI-data,所以當進入函式(function)時會從RAM中的棧空間(Stack)申請空間給區域變數.

----------------------------------------------------------------------------------
ARM映像文件的組成:
1. ARM映像文件就是指燒錄到ROM中的bin或hex檔,也成為image,其包含了RO和RW.
2. image不包含ZI,因為ZI都是0.






嵌入式程序存儲結構及IAR段類型說明
IAR彙編指令SFB和SFE
IAR中如何定向把數組和函數放在指定的地址單元
參考:第48章 MDK的编译过程及文件类型全解
技術筆記 STM32 memory usage 

#Keil#C#8051#RW#RO#ZI

沒有留言:

張貼留言