1、KEIL MDK 編譯后的信息
Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116
1)Code 是代碼占用的空間;
2)RO-data 是 Read Only 只讀常量的大小,如const型;
3)RW-data 是(Read Write)初始化了的可讀寫變量的大小;
4)ZI-data 是(Zero Initialize) 沒有初始化的可讀寫變量的大小,ZI-data不會被算做代碼里因?yàn)椴粫怀跏蓟?p>
1.1、Flash 占用
在燒寫的時候是 FLASH 中的被占用的空間為:
Code+RO Data+RW Data
1.2、RAM 內(nèi)存占用(不包括堆棧)
程序運(yùn)行的時候,芯片內(nèi)部 RAM 使用的空間為:
RW Data + ZI Data
示例:
Program Size: Code="18248" RO-data=320 RW-data=260 ZI-data=3952
Code, RO-data,RW-data ..............flash
RW-data, ZIdata ..............RAM
注:初始化時 RW-data 從 flash 拷貝到 RAM
生成的map文件位于list文件夾下 (KEIL)
Total RO Size (Code + RO Data) 18568 ( 18.13kB)
Total RW Size (RW Data + ZI Data) 4212 ( 4.11kB)
Total ROM Size (Code + RO Data + RW Data) 18828 ( 18.39kB)
2、ARM 映像文件的組成
所謂ARM映像文件就是指燒錄到ROM中的bin文件,也稱為image文件。
Image文件包含了RO和RW數(shù)據(jù),之所以Image文件不包含ZI數(shù)據(jù),是因?yàn)閆I數(shù)據(jù)都是0,沒必要包含,只要程序運(yùn)行之前將ZI數(shù)據(jù)所在的區(qū)域一律清零即可,包含進(jìn)去反而浪費(fèi)存儲空間。
RO中的指令和常量以及RW中初始化過的變量是不能像ZI那樣“無中生有”。
3、ARM 程序的執(zhí)行過程
燒錄到ROM中的image文件與實(shí)際運(yùn)行時的ARM程序之間并不是完全一樣的。
因此就有必要了解ARM程序是如何從ROM中的image到達(dá)實(shí)際運(yùn)行狀態(tài)的。
RO中的指令至少應(yīng)該有這樣的功能:
1)將RW從ROM中搬到RAM中,因?yàn)镽W是變量,變量不能存在ROM中;
2)將ZI所在的RAM區(qū)域全部清零,因?yàn)閆I區(qū)域并不在Image中,所以需要程序根據(jù)編譯器給出的ZI地址及大小來將相應(yīng)得RAM區(qū)域清零。
ZI中也是變量,同理:變量不能存在ROM中,在程序運(yùn)行的最初階段,RO中的指令完成了這兩項(xiàng)工作后C程序才能正常訪問變量。
否則只能運(yùn)行不含變量的代碼。
示例:
1)RO
看下面兩段程序,他們之間差了一條語句,這條語句就是聲明一個字符常量。
因此按照我們之前說的,他們之間應(yīng)該只會在RO數(shù)據(jù)中相差一個字節(jié)(字符常量為1字節(jié))。
Prog1:
#include void main(void) { ; } Prog2 : #include const char a = 5; void main(void) { ; } Prog1編譯出來后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 60 0 96 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1008 ( 0.98kB) Total RW Size(RW Data + ZI Data) 96 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB) ================================================================================ Prog2編譯出來后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 61 0 96 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1009 ( 0.99kB) Total RW Size(RW Data + ZI Data) 96 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB) ================================================================================ 以上兩個程序編譯出來后的信息可以看出: Prog1和Prog2的RO包含了Code和RO Data兩類數(shù)據(jù)。 他們的唯一區(qū)別就是Prog2的RO Data比Prog1多了1個字節(jié)。 如果增加的是一條指令而不是一個常量,則結(jié)果應(yīng)該是Code數(shù)據(jù)大小有差別。 2)RW 同樣再看兩個程序,他們之間只相差一個“已初始化的變量”,按照之前所講的,已初始化的變量應(yīng)該是算在RW中的,所以兩個程序之間應(yīng)該是RW大小有區(qū)別。 Prog3: #include void main(void) { ; } Prog4: #include char a = 5; void main(void) { ; } Prog3編譯出來后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 60 0 96 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1008 ( 0.98kB) Total RW Size(RW Data + ZI Data) 96 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB) ================================================================================ Prog4編譯出來后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 60 1 96 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1008 ( 0.98kB) Total RW Size(RW Data + ZI Data) 97 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB) ================================================================================ 可以看出Prog3和Prog4之間確實(shí)只有RW Data之間相差了1個字節(jié),這個字節(jié)正是被初始化過的一個字符型變量“a”所引起的。 3)ZI 再看兩個程序,他們之間的差別是一個未初始化的變量“a”,從之前的了解中,應(yīng)該可以推測,這兩個程序之間應(yīng)該只有ZI大小有差別。 Prog3: #include void main(void) { ; } Prog4: #include char a; void main(void) { ; } Prog3編譯出來后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 60 0 96 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1008 ( 0.98kB) Total RW Size(RW Data + ZI Data) 96 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB) ================================================================================ Prog4編譯出來后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 60 0 97 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1008 ( 0.98kB) Total RW Size(RW Data + ZI Data) 97 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB) ================================================================================ 編譯的結(jié)果完全符合推測,只有ZI數(shù)據(jù)相差了1個字節(jié)。 這個字節(jié)正是未初始化的一個字符型變量“a”所引起的。 注意: 如果一個變量被初始化為0,則該變量的處理方法與未初始化華變量一樣放在ZI區(qū)域。 即:ARM C程序中,所有的未初始化變量都會被自動初始化為0。 總結(jié): 1) C中的指令以及常量被編譯后是RO類型數(shù)據(jù); 2) C中的未被初始化或初始化為0的變量編譯后是ZI類型數(shù)據(jù); 3) C中的已被初始化成非0值的變量編譯后市RW類型數(shù)據(jù)。 附: 程序的編譯命令(假定C程序名為tst.c): armcc -c -o tst.o tst.c armlink -noremove -elf -nodebug -info totals -info sizes -map -list aa.map -o tst.elf tst.o 編譯后的信息就在aa.map文件中。 ROM主要指:NAND Flash,Nor Flash RAM主要指:PSRAM,SDRAM,SRAM,DDRAM 簡單的說就是在燒寫完的時候是: FLASH中:Code+RO Data+RW Data 運(yùn)行的時候: RAM: RW Data + ZI Data,當(dāng)然還要有堆棧的空間。 refer: https://blog.csdn.net/xkzju2010/article/details/51323901
上一篇:STM32 編譯結(jié)果 map 之 code、RO-data、RW-data、ZI-data 字段解析
下一篇:readelf 命令讀取 STM32 編譯生成的 ELF 和 AXF 文件
推薦閱讀
史海拾趣
面對全球電子記錄儀市場的快速增長,ELDECO公司制定了國際化發(fā)展戰(zhàn)略。公司首先在歐洲市場設(shè)立了研發(fā)中心和生產(chǎn)基地,通過與當(dāng)?shù)睾献骰锇榈木o密合作,成功將產(chǎn)品打入歐洲市場。隨后,公司又在美國、亞洲等地設(shè)立了分支機(jī)構(gòu),進(jìn)一步拓展全球市場。通過國際化戰(zhàn)略布局,ELDECO公司不僅提高了品牌影響力,還獲得了更多的市場機(jī)會和客戶資源。
一直以來,BAHCO都秉持著創(chuàng)新的設(shè)計(jì)理念和對品質(zhì)的極致追求。其魚和魚鉤的商標(biāo)不僅代表了公司的品牌形象,更是品質(zhì)的保證。通過不斷的研發(fā)和技術(shù)創(chuàng)新,BAHCO的產(chǎn)品在功能性、耐用性和舒適性等方面都達(dá)到了行業(yè)領(lǐng)先水平。這種對品質(zhì)的不懈追求,使得BAHCO在全球工具市場上獲得了廣泛的認(rèn)可和好評。
進(jìn)入21世紀(jì),C.K TOOLS不滿足于現(xiàn)有的技術(shù)成果,開始與冶金和設(shè)計(jì)工程師合作,探索新材料在工具制造中的應(yīng)用。他們發(fā)現(xiàn)了一種新型合金材料,具有出色的硬度和耐磨性,非常適合用于制造電子制造中使用的切割和剝線工具。經(jīng)過多次試驗(yàn)和改進(jìn),C.K TOOLS成功推出了這一系列新型工具,并在電子制造領(lǐng)域取得了顯著的市場份額。
在產(chǎn)品質(zhì)量方面,EAO公司始終堅(jiān)持品質(zhì)至上的原則。公司建立了嚴(yán)格的質(zhì)量管理體系和檢測流程,確保每一件產(chǎn)品都符合高標(biāo)準(zhǔn)的質(zhì)量要求。同時,EAO公司還注重員工素質(zhì)的提升和技能培訓(xùn),確保員工具備專業(yè)的技能和知識來保障產(chǎn)品質(zhì)量。正是這種對品質(zhì)的堅(jiān)守和追求,讓EAO公司在激烈的市場競爭中贏得了客戶的信任和口碑。
請注意,以上故事均為虛構(gòu)內(nèi)容,旨在展示EAO公司在電子行業(yè)中可能的發(fā)展路徑和成就。實(shí)際情況可能因公司戰(zhàn)略、市場環(huán)境等因素而有所不同。
面對全球市場的競爭壓力,EAO公司堅(jiān)定實(shí)施全球化戰(zhàn)略。公司在全球范圍內(nèi)建立了完善的銷售網(wǎng)絡(luò)和售后服務(wù)體系,為客戶提供及時、高效的服務(wù)。同時,EAO公司還積極尋求與國際知名企業(yè)的合作機(jī)會,共同開拓市場、分享資源。通過全球化戰(zhàn)略的實(shí)施,EAO公司不斷提升品牌影響力和市場競爭力。
為了進(jìn)一步提升市場份額和品牌影響力,ATC公司積極開展市場拓展活動。公司加強(qiáng)與國際市場的聯(lián)系,與多家知名企業(yè)建立了戰(zhàn)略合作關(guān)系,共同開拓新的市場領(lǐng)域。同時,ATC公司還注重品牌塑造,通過參加行業(yè)展會、舉辦技術(shù)研討會等方式,提升品牌知名度和美譽(yù)度。這些努力使得ATC公司在全球電子市場中占據(jù)了一席之地。
【藏書閣】32 個單片機(jī)類畢業(yè)設(shè)計(jì) 資料雖好,僅供參考,還是要自己做啊 16×16點(diǎn)陣(滾動顯示)論文+程序.rar cdma通信系統(tǒng)中的接入信道部分進(jìn)行仿真與分析.rar LED顯示屏動態(tài)顯示和遠(yuǎn)程監(jiān)控的實(shí)現(xiàn).rar MCS-51單片機(jī)溫度控制系統(tǒng).rar USB接口設(shè)計(jì).rar 畢業(yè)設(shè)計(jì)(論文)OFDM通信 ...… 查看全部問答∨ |
Recommended Power Solutions for the TMS320x28xx DSPs Recommended Power Solutions for the TMS320x28xx DSPs… 查看全部問答∨ |
編譯通過后download到目標(biāo)機(jī)出現(xiàn)錯誤提示,是什么錯誤 請教一下,下面的錯誤是由什么引起的?工程編譯通過了,但是下載時提示錯誤。 Errors while downloading D:/downLoadable/PENTIUMgnu/breakPoint.out: _pingLibInit _ping 如果屏蔽了工程中用ping的代碼就不再出現(xiàn)_ping 錯誤, 同樣屏蔽了工程 ...… 查看全部問答∨ |
|
由于剛開始接觸AT指令這個東西,不是很清楚特來請教大家。 例如: AT+CSCS=" UCS2" 這個指令,我要串口發(fā)AT指令是不是連加號,雙引號一起變成ASCII碼的方式發(fā)送。 還有: <ctrl-Z> 這個又是 ...… 查看全部問答∨ |
我用dsPIC33FJ128GP306控制FM25H20芯片的讀寫,二者通過SPI接口連接。在程序中,我先向RAM中寫一個數(shù)據(jù),然后從寫入的地址中讀出數(shù)據(jù)。現(xiàn)象是:在CPU的SPIDOUT端有數(shù)據(jù)輸出,但是RAM的DOUT端沒有數(shù)據(jù)。(我所說的數(shù)據(jù)是否存在是通過觀察示波器的波形 ...… 查看全部問答∨ |
兄弟我把CD弄丟了,現(xiàn)在想看看里面的例程。哪位兄弟能把里面例程和驅(qū)動上傳? 說明一下,是那塊有幾個LED和白色導(dǎo)光板的811開發(fā)板。 謝謝了!… 查看全部問答∨ |
請問AM335X SK (WL1271) soft AP WIFI速度 請問.. 我做下列測試 PC 送出資料 ,AM335X SK 收到資料後會回應(yīng)資料 , PC 計(jì)算送出資料到讀取到資料得時間 使用無線網(wǎng)路與有線網(wǎng)路有一定程度的差異, 請問是什麼原因造成????? & ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實(shí)惠套件和強(qiáng)大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴(kuò)展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機(jī)自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創(chuàng)新升級
- 工業(yè)市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實(shí)現(xiàn)100%美國生產(chǎn)
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產(chǎn)品
- 強(qiáng)化中國市場戰(zhàn)略布局,德州儀器正靈活應(yīng)對全球關(guān)稅挑戰(zhàn)
- Molex莫仕通過本地合作和創(chuàng)新加強(qiáng)支持中國汽車行業(yè)
- 貿(mào)澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數(shù)字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實(shí)現(xiàn)車載充電器小型化!
- 用上車規(guī)級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術(shù)解析:聚焦高帶寬、多通道同步采集與協(xié)議分析
- 打卡最后一周,解鎖TI汽車解決方案。解鎖的數(shù)量決定獎品的質(zhì)量!
- 下載有禮|是德科技:測試設(shè)備如何影響產(chǎn)品質(zhì)量調(diào)研報告
- 溫故而知新——開關(guān)電源經(jīng)典課程學(xué)習(xí)
- 下載《TI MCU與無線連接技術(shù)研討會講座實(shí)錄》抽獎贏好禮!
- 芯(E)幣兌換Nucleo擴(kuò)展板:讓你的Nucleo變身成pyboard
- 美信基礎(chǔ)模擬IC APP下載 助力您創(chuàng)新模擬設(shè)計(jì)!評論、搶樓全有禮!
- 英飛凌BMS解決方案,為電動汽車和儲能系統(tǒng)保駕護(hù)航!
- 我給Xilinx資源中心做貢獻(xiàn)