大多數單片機學習者入門時,在編譯過程中會遇到這樣一個問題:“編寫的程序大小超出了單片機規定的範圍”,如何解決呢?
以Keil爲例,首先我們在編譯結束後,會得到如下提示(單位爲字節Byte):
-
其中,data,xdata,code指的是什麼呢?
-
data 可尋址片內ram xdata 可尋址片外ram (64k 地址範圍FFFFH) code 程序存儲區rom (64k 地址範圍),對應MOVC @DPTR
-
這些數據存放在單片機的哪裏呢?
- 1.瞭解單片機的Flash、RAM、ROM大小及功能
- 打開單片機芯片手冊:(以STC12C5A系列爲例)
- 根據具體型號找到對應的Flash、RAM、ROM大小
- 功能如下:
-
ROM
存儲固化程序【存放指令代碼和固定數值,程序運行後不可改動】 RAM 程序運行中數據的隨機存取【掉電丟失數據】 FLASH 存儲編寫的程序和永久保存的數據
- 2.對應單片機和keil編譯後的大小,看是否滿足要求
- STC單片機的SRAM,一般包括內部RAM和片上RAM,其中內部RAM最大爲256字節,其餘SRAM爲片上RAM,片上RAM相當於外部數據存儲器。 故:片外ram=SRAM1280字節 減去 片內RAM256字節 = 1024KB
- 根據芯片手冊,用戶程序區的程序Flash可作爲ROM用。 故:EEROM+Flash=總rom大小
- 以我們最開始Keil中顯示的數據爲例,data=103.2KB保存在片內ram,小於128字節(片內RAM最大256字節,其中128字節是做寄存器用,用戶不可使用),符合要求!
- xdata=123KB保存在片外ram,遠小於1024KB,符合要求!
- code=12461保存在rom,遠小於(EEROM+Flash)大小,符合要求!