SDCC 及 Keil C51 記憶體變數宣告方式

Posted by: 邱小新 at 下午4:51 in ,

SDCC

記憶體區塊指向位址變數型別變數名稱初始值
__xdata[__at 0xC000]unsigned chartest_data[=0x01]

指向位址及初始值可以不宣告。指向位址沒有宣告的話,則由編譯器自動分配位置給變數,但由於 sfr 的特殊性,所以一定要包含 __at。

  1. data / near // c code __data unsigned char test_data=0x01; // asm code mov _test_data,#0x01

  2. xdata / far // c code __xdata unsigned char test_xdata=0x01; // asm code mov dptr,#_test_xdata mov a,#0x01 movx @dptr,a

未完待續......

Keil C51

新的定義方式。

變數型別記憶體區塊變數名稱初始值
unsigned charxdatatest_data[=0x01]

舊的定義方式,不建議使用。

記憶體區塊變數型別變數名稱初始值
xdataunsigned chartest_data[=0x01]

指向絕對位址定義方式,不可直接給初始值。

變數型別記憶體區塊變數名稱指向位址
unsigned charxdatatest_data_at_ 0xC000

但是如果一定要在指向絕對位址時又同時給初始值呢?? 請看http://blog.sina.com.cn/s/blog_4c5cec3b0100dmtd.html

未完待續......