打印

关于C编程的一点小问题

[复制链接]
1798|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 | 只看该作者

意思一样的。

使用特权

评论回复
5
平常人| | 2007-10-8 20:11 | 只看该作者

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

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

另外就是从阅读者的角度看,哪种写法更容易懂啦。个人认为3楼的写法,熟手比较常用,LZ的写法初学者比较常用;从这个角度看,LZ的写法应该更通俗些,但3楼的写法更精炼些。

使用特权

评论回复
6
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

粉丝