1.擴展關鍵字:用於控制數據和指針
__eeprom 用於EEPROM 存儲空間, 控制數據存放,控制指針類型和存放
__tinyflash, __flash, __farflash, __hugeflash 用於flash 存儲空間, 控制數據存放,控制指針類型和存放
__ext_io, __io 用於I/O存儲空間, 控制數據存放,控制指針類型和存放
__regvar 放置一個變量在工作寄存器中
2.函數擴展關鍵字:
__nearfunc __farfunc 用於控制數據存放,這組關鍵字必須在函數聲明和定義的時候指定
__interrupt. 關鍵字控制函數的類型。這組關鍵字必須在函數聲明和定義的時候指定
__root. 關鍵字僅僅控制有定義的函數
3.其它特別的關鍵字:
@ 用於變量的絕對地址定位。也可以用#pragma location 命令
#pragma vector 提供中斷函數的入口地址。
__root 保證沒有使用的函數或者變量也能夠包含在目標代碼中
__no_init 禁止系統啟動的時候初始化變量.
asm, __asm 插入匯編代碼
====================================================================
__root 關鍵字保證沒有使用的函數或者變量也能夠包含在目標代碼中.
定義存放在__flash 空間的數據在程序編譯時會自動生成代碼嵌入到flash代碼中,對於程序沒有使用也要求編譯的數據(比如可以在代碼中嵌入你的版本號,時間等)必須加關鍵字__root 限制。
例:
#i nclude<iom8.h>
__root __flash unsigned char p @ 0x10 =0x56;
void main(void)
{
}
程序沒有使用P變量,編譯也會生成該代碼。
:020000020000FC
:1000000016C018951895189518951895189518955F
:10001000569518951895189518951895189518953A
:10002000189518951895089500008895FECF0FE94A
:100030000DBF00E00EBFC0E8D0E003D0F4DFF4DF76
:06004000F3CF01E008957A
:0400000300000000F9
:00000001FF
