東莞權智集團 範偉
mail: [email protected]; [email protected] QQ: 493786141 歡迎技術交流
近來用Keil C51做幾個小專案,發現雖然同是C語言,但是C51的使用與MDK還是有區別的。
1,const關鍵字,在MDK中表示定義的是常數,放在ROM空間中。但是C51中const只表示被修飾的變數不可改變,但是變數是被儲存在RAM內。我開始沒注意到這一點,在C51將LCD的自定義字型檔用const定義,結果XDATA超過了2K, 程式執行會出現莫名的異常。後改爲用code關鍵字代替後問題解決。
2,共用體的位元組順序不同:
typedef union{
int int_Data; //共用體佔2個位元組
char char_Data[2]; //C51中char_Data[0]爲16位元數的高8位元, MDK中char_Data[0]爲16位元數的低8位元
} uion_intDATA;
比如:
uion_intDATA ADC_Value;
ADC_Value.int_Data = 0x1234;
那麼在C51中,
ADC_Value.char_Data[0] 的值是 0x12,
ADC_Value.char_Data[1] 的值是 0x34
在MDK中:
ADC_Value.char_Data[0] 的值是 0x34,
ADC_Value.char_Data[1] 的值是 0x12
實際中我只看到過C51是這將char_Data[0]作爲高位元組的,我用過的其它編譯器都是將char_Data[1]作爲高位元組的