KEIL C51 与MDK 编译器的几点区别

东莞同科电子 范伟

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可以在函数任何位置定义变量。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值