keil c编译程序出现的奇怪问题

[复制链接]
3114|6
 楼主| xiangxiaowei 发表于 2011-10-13 22:13 | 显示全部楼层 |阅读模式
这两天在复习51单片机,准备笔试面试啥的。写了个串口计算波特率的函数,但是出现了诡异的问题。
我用的keil vision4.
#define fosc 22118400
baud_rate=9600;
count=256-2*fosc/12/32/baud_rate;//这样计算出来的count是正确的
count=256-2*fosc/(12*32*baud_rate);//这样计算出来的count是错误的
刚开始我是按照count=256-2*fosc/(12*32*baud_rate)这么写的,结果波特率计算的总是不对。后来我发现这个语句计算出的结果不对,然后改成count=256-2*fosc/12/32/baud_rate;就可以了。
请问一下,这到底是什么问题呢?语句的意思是一样的,就是乘除顺序不一样。这个是编译器的问题吗?
HWM 发表于 2011-10-13 22:49 | 显示全部楼层
分母(12*32*baud_rate)溢出了。
ayb_ice 发表于 2011-10-14 08:54 | 显示全部楼层
常量如果不加后缀U,UL,F,一律按16位有符号数处理,这样预处理在计算过程中有可能溢出,这是程序员的事,编译器不管
只能说明LZ对C还不是很了解
刘前辈 发表于 2011-10-14 10:32 | 显示全部楼层
本帖最后由 刘前辈 于 2011-10-14 10:35 编辑

count= 256 - fosc(SMOD+1)/ (384L * baud_rate ) ;



、、
kiss_cxf 发表于 2011-10-14 15:14 | 显示全部楼层
:lol学习
DownCloud 发表于 2011-10-14 16:13 | 显示全部楼层
sparkwxl 发表于 2011-10-14 22:47 | 显示全部楼层
就是这样滴。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

30

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部