keil 软件的不足

来源:百度文库 编辑:神马文学网 时间:2024/04/28 08:08:37
一、
<<=  和 >>= 是C语言表准中的运算符,可是在keil中貌似就不是那么回事了。我用
a = 0x23;
low = a & 0x0f;              //取低四位
a >>= 4;                        //高位移到低位
high = a & 0x0f;            //去移到低位的高四位
结果 low 等于4,但high却莫名其妙地等于0,我很不解,<<= 和 >>= 可都是C语言的运算符啊!
为什么结果不是预料的呢?也许在头文件 intrins.h 中 _cror_( )  _irol_( ) 等会给我们答案,这些是循环左移或循环右移函数,既然keil c51的头文件有他们,就说明有他们的必要。我不知道为什么上面的方法不行,但我知道下面的方法可以
a = 0x23;
low = a & 0x0f;
a = _cror_(a,4);
high = a & 0x0f;
我用这种方法得到了a的高四位和低四位,我对它的解释是keil 不支持第一种方法,因为这是keil ,它是给MCU编程的。
二、
65 + 3   和 'A' +3 有区别吗?在keil里面貌似有,但要分情况,大多数是没有区别的。但当你把ASCII作为整型的一个子集参与算术运算时,结果莫名其妙,你就要考虑把'A'换成65了。
三、
P2^0 = 1;  这语句有错误吗?我是想给单片机的P2.0口赋1,让它为高电平,但你知道Keil怎么说吗?它说systax error

当我用了C51的关键字sbit 后,顺利通过了编译,这时,我才知道为什么有关键字sbit了。

四、
变量的定义,最好不要放在主函数里,我的建议是不要放在主函数里。程序小,编译不会报错;程序大了,编译就会报错。如果你写了一个比较大的程序,而在主函数里又进行了变量定义,这时,你应该考虑把变量定义放在主函数外。变量定义放在主函数外和内,就程序效率和占用内存资源角度来看,他们是没有区别的。所以,我强烈建议把变量定义放在主函数之外。