由于我有点时刻就去开发51单片机。发现在Linux(Debian和Ubuntu上)无法编译51单片机程序,只好在网上下了个Keil.然后便是wine仿真。可是老溃散。代码也有问题。然后又改成了在虚拟机里跑。可是仍是不爽!知道发现了SDCC后才知道了什么叫便利。一些Keil中的语法在SDCC中要更正。
比如说P0.1口的LED.点亮他在Keil中这么写
sbit LED=P0^1;
void XXXX(void)
{
LED=1;
LED=0;
while (1){}
}
可是在sdcc中却通不过。网上查了下,要用这种办法:
__sbit __at 0x80 LED;
//或许#define LED P0_1
void XXXX(void)
{
LED=1;
LED=0;
while (1){}
}
这才是正确的。
还有在sdcc中的一些细节写法,比如说
unsigned char Data;
while (!ReadData()==Data){}
这便是有错的。由于在 sdcc中,你没有把Data界说成signed char .所以他会报错,说这个不是有符号位的。
在sdcc的写法是:(ReadData!=Data).
好的。修改后经过编译和烧写的E51PRO源代码在这里:EP5-SDCC-src.tar.bz2