关于C编程的一点小问题

[复制链接]
2321|5
 楼主| ksslx 发表于 2007-10-8 17:34 | 显示全部楼层 |阅读模式
void SCISend1(unsigned char o)
 {
       //判断ReStatusR的第SendTestBit位是否为1,是1可以发送
   while(1) 
      if ((ReSendStatusR & (1<<SendTestBit)) != 0)
         { ReSendDataR=o;
           break;}
 }

上面的这段程序怎么能够判断ReStatusR的第SendTestBit位是否为1
  麻烦大虾解释一下  谢谢
computer00 发表于 2007-10-8 18:03 | 显示全部楼层

((ReSendStatusR 跟(1<

grady1125 发表于 2007-10-8 19:58 | 显示全部楼层

菜鸟有话说

用while((ReSendStatusR &(1<<SendTestBit))== 0); ReSendDataR=o;是不是更好呢?

      
computer00 发表于 2007-10-8 20:05 | 显示全部楼层

意思一样的。

平常人 发表于 2007-10-8 20:11 | 显示全部楼层

3楼的方法也对,无所谓哪个好

一定要评判哪个更好,只有看编译器的优化功能,哪种写法可以产生更短的代码。

另外就是从阅读者的角度看,哪种写法更容易懂啦。个人认为3楼的写法,熟手比较常用,LZ的写法初学者比较常用;从这个角度看,LZ的写法应该更通俗些,但3楼的写法更精炼些。
hotpower 发表于 2007-10-8 23:16 | 显示全部楼层

应该采用3楼的写法,但注意软件的bug

while((ReSendStatusR &(1<<SendTestBit))== 0);//等待SCI中断设置SendTestBit位

ReSendDataR=o;//通知允许发送数据.

俺认为应该加:
ReSendStatusR &=~ (1<<SendTestBit);//清除SCI中断标志位SendTestBit

否则可能会出现重复发送的现象.

这个程序应该是双标志,所以在执行任务时ReSendDataR也要做相应的处理.

有时可能还要开关中断.

完整的应该:
while((ReSendStatusR &(1<<SendTestBit))== 0);//等待SCI中断设置SendTestBit位

ReSendStatusR &=~ (1<<SendTestBit);//清除SCI中断标志位SendTestBit
ReSendDataR=o;//通知允许发送数据.

.......
ReSendDataR=...; 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

105

帖子

0

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