之前一直很奇怪一個問題,每次寫好單片機程序之後,用燒錄軟件進行燒錄時,能看到燒錄文件也就是 hex 的文件大小:
我用的單片機芯片是 STM32F103C8T6,程序儲存器(FLASH)隻有 64K。
從上圖可以看出,hex 有 128K。
我有兩點疑問,
1. 隻是一個很簡單的平衡小車程序而已,有 128K,這麼大嗎?
2. 就算有 128K,能下載到隻有 64K 容量的單片機中去?
這可能是一道送命題!
下面開始我們的探索之旅,以 STM32 開發為例。在 keil 中進行程序編譯之後,在界面部分:
很多朋友估計看到這界面,也隻關心 2 個點:
第一、自己編寫的程序是否正确生成了 hex!第二、自己編寫的程序有沒有錯誤,有沒有警告!
在圖中紅線部分:
有 4 個:Code、RO-data、RW-data、ZI-data。
Code:表示所要執行的代碼,程序中所有的函數都位于此處。
RO-data:表示隻讀數據,程序中所定義的全局常量數據和字符串都位于此處。
RW-data:表示已初始化的讀寫數據,程序中定義并且初始化的全局變量和靜态變量位于此處。
ZI-data:表示未初始化的讀寫數據,程序中定義了但沒有初始化的全局變量和靜态變量位于此處。
從描述中可以得出:
1. 下載到單片機 FLASH 的程序是:Code RO-data RW-data(上圖中數據為字節數,kb=byte/1024);
hex=(39546 5862 12428)/1024=56.48
2. 運行在 RAM 中的數據是:RW-data ZI-data;
原來 window 下顯示的 hex 大小,并非是我們下載到單片機中的 hex 大小。
關于為什麼顯示不同,這又是一個十分有趣的問題,有興趣的朋友可以一起探讨下。
最後,貌似 C8T6 這個芯片的資源差不多被榨幹了,要考慮換芯片了。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!