KEIL C51 與MDK 編譯器的幾點區別

2020-08-14 01:04:39

東莞權智集團 範偉

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]作爲高位元組的