打印

发现单片机中语句_nop_();与 ;有区别?

[复制链接]
2681|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
7120223|  楼主 | 2010-10-11 15:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 7120223 于 2010-10-11 15:43 编辑

以前一直以为_nop_();与 ;是同一个意思都是延时一机器周期,今天做了一个实验,发现不一样,同样一个循环体,_nop_();用示波器看波形周期要比 ;长。为什么?

相关帖子

沙发
赤铸| | 2010-10-11 15:56 | 只看该作者
nop 是空指令,CPU 沿着系统时钟向前走一步,但啥事也不干
“;” 是空,空空如也,是无,了无一物
前者是CPU里的概念,后者是C语言里的概念,看看C语言书里怎么解释的吧

使用特权

评论回复
板凳
sxdxy| | 2010-10-11 17:37 | 只看该作者
_nop_();与reg51.h库里面的定义有关。正常情况是CPU空转一个周期。瞎猜测 ;可能表示不执行。最好查查关于C语言的好书

使用特权

评论回复
地板
lfjwfm| | 2010-10-11 20:27 | 只看该作者
_nop_(); 在IAR里面差别大了,特别是用来做延时的时候,选优化时,如果无_nop_();,则时序完全不对,因此不用,IAR认为这个循环无意义,被优化掉了。

增加我们为这一个语句查了一个晚上。呵呵。

使用特权

评论回复
5
mxh0506| | 2010-10-11 23:11 | 只看该作者
_nop_()对应于目标CPU指令集中的一条空操作指令(NOP——No Operation),在C语言实现中一般作为intrinsic function提供,编译后直接替换成一条NOP指令;而在C程序中写一条空语句";"编译后不会产生任何机器指令。

使用特权

评论回复
6
SLEET1986| | 2010-10-12 08:20 | 只看该作者
_nop_()对应于目标CPU指令集中的一条空操作指令(NOP——No Operation),在C语言实现中一般作为intrinsic function提供,编译后直接替换成一条NOP指令;而在C程序中写一条空语句";"编译后不会产生任何机器指令。 ...
mxh0506 发表于 2010-10-11 23:11
:victory:

使用特权

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

本版积分规则

105

主题

389

帖子

0

粉丝