stm32後生成編譯檔案大小探索之二

2021-09-28 07:59:34 字數 798 閱讀 2141

之前總結過編譯檔案大小的一些研究:

總結起來是這樣的:

微控制器:生產的編譯資訊中,包含了

code : **資訊

ro-data: 唯讀資訊–》程式中的指令 和常量

rw-data: 被初始化的變數

zi-data: 無需初始化的變數

我做了這麼乙個實驗,

①增加乙個很大的陣列,不初始化或者初始化為0; 它會被分配到zi-data資訊中。

②增加乙個很大的陣列,切對其進行初始化, 它會被分配到rw-data資訊中

燒錄檔案的大小=code + ro-data + rw-data

增加zi-data的大小,bin檔案未必增大很多。 應該是,對於不需要初始化賦值的變數,zi-data資訊包含了是一些 起始位址 ,資料大小 等等這一些資訊。

晶元需要的ram大小=rw-data+zi-data

bin檔案我們稱之為 arm映像檔案(image檔案):image檔案包含了ro和rw資料。之所以image檔案不包含zi資料,是因為zi資料都是0,沒必要包含,只要程式執行之前將zi資料所在的區域一律清零即可。包含進去反而浪費儲存空間。

arm程式的執行過程

1. 將rw從rom中搬到ram中,因為rw是變數。

2. 將zi所在的ram區域全部清零,因為zi區域並不在image中,所以需要程式根據編譯器給出的zi位址及大小來將相應得ram區域清零。zi中也是變數.

STM32 編譯後生成檔案探索

一般在stm32工程使用keil編譯之後,keil的build output欄目下面會出現如圖所示的輸出資訊,其中會顯示code 大小 ro data rw data zi data的大小。一般別人不怎麼會在意這個的大小。arm程式的組成 此處所說的 arm程式 是指在arm系統中正在執行的程式,而...

STM32部分工程編譯檔案簡介

功能 初始化堆疊指標sp 初始化程式計數器指標 pc 設定堆 棧的大小 設定中斷向量表的入口位址 配置外部 sram 作為資料儲存器 這個由使用者配置,一般的開發板可沒有外部 sram 呼叫 systemini 函式配置 stm32 的系統時鐘 設定 c 庫的分支入口 main 最終用來呼叫 mai...

stm32生成bin axf檔案

圖1 如圖1錯誤記錄一下在使用stm32生成bin axf檔案注意的問題。生成bin axf檔案的路徑要選擇正確,比如工程當前目錄使用.也沒有問題 我的bin檔案放在工程目錄下級目錄bin中,故使用.bin a1 boot f3.bin 生成bin axf檔案需要設定一些選項,如圖2和3 圖2 圖3...