【單片機筆記】data、xdata、code、const之前的區別與關係

在Keil 51中,code修飾的變量放在ROM(Flash)中,而const修飾的變量爲只讀(不可修改),放在RAM中!可以用“code const”修飾變量,表示變量存儲在ROM中,且爲只讀,由此看來“code”與“code const”修飾變量有一樣的功用。

 

Keil MDK中的const與code

在Keil MDK中,如進行STM32的開發,code修飾符無法使用,使用的話會報錯。那麼要怎麼來修飾存放在ROM中的變量?此時是用到const,用const修飾的變量是存放在ROM中的。

總結,注意不同編譯器對於const與code的規定。code一般用於51中,而const應用則非常廣泛,注意其在不同的編譯環境中表現的數據存儲位置。

 

存儲類型與存儲區關係 


data —>   可尋址片內ram 
bdata —>   可位尋址的片內ram 
idata —>  可尋址片內ram,允許訪問全部內部ram 
pdata —> 分頁尋址片外ram (MOVX @R0) (256 BYTE/頁) 
xdata —> 可尋址片外ram (64k 地址範圍FFFFH) 
code —> 程序存儲區 (64k 地址範圍),對應MOVC @DPTR

uchar 和uchar code ,前面是可以改變的,後面是固定的,如表格。 
看看下面你就明白了! 
uchar aa[5]; 
uchar code bb[5]; 
在以上語句中,數組aa[5]中的內容是存放在數據存儲區(RAM)中的,在程序運行工程中各個數組元素的值可以被修改,掉電後aa[5]中的數據無法保存。 
而數組bb[5]中的內容是存放在程序存儲區(如flash)中的,只有在燒寫程序時,才能改變bb[5]中的各元素的值,在程序運行工程中無法修改,並且掉電後bb[5]中的數據不消失。

data 定義的是芯片的內核RAM,如51系列的前0X00-0X7F,和4個分組的R1-R7,所佔用的區域. 
xdata 定義的芯片內核外部的擴展RAM,包括芯片外擴展的RAM,和芯片內擴展的RAM.

data是指存儲在內部RAM中的數據,xdata是指存儲在外部RAM中的數據,code是存儲在ROM中的數據。
 

部分內容爲轉載:原文

By Urien

2019年12月11日 21:44:00

發佈了101 篇原創文章 · 獲贊 115 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章