SDCC
記憶體區塊 | 指向位址 | 變數型別 | 變數名稱 | 初始值 |
__xdata | [__at 0xC000] | unsigned char | test_data | [=0x01] |
指向位址及初始值可以不宣告。指向位址沒有宣告的話,則由編譯器自動分配位置給變數,但由於 sfr 的特殊性,所以一定要包含 __at。
- data / near
// c code __data unsigned char test_data=0x01; // asm code mov _test_data,#0x01 - 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 char | xdata | test_data | [=0x01] |
舊的定義方式,不建議使用。
記憶體區塊 | 變數型別 | 變數名稱 | 初始值 |
xdata | unsigned char | test_data | [=0x01] |
指向絕對位址定義方式,不可直接給初始值。
變數型別 | 記憶體區塊 | 變數名稱 | 指向位址 |
unsigned char | xdata | test_data | _at_ 0xC000 |
但是如果一定要在指向絕對位址時又同時給初始值呢?? 請看http://blog.sina.com.cn/s/blog_4c5cec3b0100dmtd.html。
未完待續......