打印

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

[复制链接]
1593|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 ) ;



、、

使用特权

评论回复
5
kiss_cxf| | 2011-10-14 15:14 | 只看该作者
:lol学习

使用特权

评论回复
6
DownCloud| | 2011-10-14 16:13 | 只看该作者
是啊

使用特权

评论回复
7
sparkwxl| | 2011-10-14 22:47 | 只看该作者
就是这样滴。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

30

帖子

1

粉丝