东莞同科电子 范伟
mail: fanwei326@163.com; 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]作为高字节的
3,C51 中只能在函数的开始部分定义局部变量,而MDK可以在函数任何位置定义变量。