因?yàn)槲矣悬c(diǎn)時間就去開發(fā)51單片機(jī)。發(fā)現(xiàn)在Linux(Debian和Ubuntu上)無法編譯51單片機(jī)程序,只好在網(wǎng)上下了個Keil.然后就是wine仿真。但是老崩潰。代碼也有問題。然后又改成了在虛擬機(jī)里跑。但是還是不爽!知道發(fā)現(xiàn)了SDCC后才知道了什么叫方便。一些Keil中的語法在SDCC中要更正。
比如說P0.1口的LED.點(diǎn)亮他在Keil中這么寫
sbit LED=P0^1;
void XXXX(void)
{
LED=1;
LED=0;
while (1){}
}
但是在sdcc中卻通不過。網(wǎng)上查了下,要用這種方法:
__sbit __at 0x80 LED;
//或者#define LED P0_1
void XXXX(void)
{
LED=1;
LED=0;
while (1){}
}
這才是正確的。
還有在sdcc中的一些細(xì)節(jié)寫法,比如說
unsigned char Data;
while (!ReadData()==Data){}
這就是有錯的。因?yàn)樵?sdcc中,你沒有把Data定義成signed char .所以他會報錯,說這個不是有符號位的。
在sdcc的寫法是:(ReadData!=Data).
好的。修改后通過編譯和燒寫的E51PRO源代碼在這里:EP5-SDCC-src.tar.bz2