打印

这个空指令怎么用的啊?

[复制链接]
1841|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lizye|  楼主 | 2013-6-23 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zhenykun| | 2013-6-23 16:47 | 只看该作者
什么地方用?

使用特权

评论回复
板凳
huangchui| | 2013-6-23 16:52 | 只看该作者
可以当很短时间的延时使用

使用特权

评论回复
地板
lizye|  楼主 | 2013-6-23 16:52 | 只看该作者
就这些了?

使用特权

评论回复
5
zhenykun| | 2013-6-23 16:52 | 只看该作者
uchar Read(void) /*读一个字节的数据,并返回该字节值*/   
{   
        
    uchar temp=0;   
        
    uchar temp1=0;   
        
    uchar BitCounter=8;   
        
    Sda=1;   
        
    do{         
        Scl=0;   
            
        _nop_ ();   
            
        _nop_ ();   
            
        _nop_ ();   
            
        _nop_ ();   
            
        Scl=1;   
            
        _nop_ ();   
            
        _nop_ ();   
            
        _nop_ ();   
            
        _nop_ ();   
            
        if(Sda) /*如果Sda=1;*/               
            temp=temp|0x01; /*temp的最低位置1*/         
        else               
            temp=temp&0xfe; /*否则temp的最低位清0*/   
            
        if(BitCounter-1)               
        {     
            temp1=temp<<1;              
            temp=temp1;            
        }   
            
        BitCounter--;   
            
    }while(BitCounter);   
        
    return(temp);   
        
}

使用特权

评论回复
6
jiahy| | 2013-6-23 16:56 | 只看该作者
楼主可以自己再想想啊

使用特权

评论回复
7
jiahy| | 2013-6-23 17:00 | 只看该作者
这条指令的时间是确定的,
可用作精确延时。

使用特权

评论回复
8
zhenykun| | 2013-6-23 17:00 | 只看该作者
还有一些地方可以用到NOP。某些430的errta上会说到430芯片CPU在某些情况下会出现执行错误的情况。比如JMP不能再return之前之类的,这是芯片设计的bug。提出的解决方法就是JMP后加一个NOP,这样就保证了,不会发生错误了。

使用特权

评论回复
9
jiahy| | 2013-6-23 17:03 | 只看该作者
使用
  • NOP;

复制代码
可以让MCU什么都不干运行一个Cycle。可以用来进行延时什么的。使用4个NOP可以延时4个Cycles
  • _nop_ ();
  • _nop_ ();
  • _nop_ ();
  • _nop_ ();

复制代码

使用特权

评论回复
10
jlyuan| | 2013-6-23 17:03 | 只看该作者
NOP指令设计的初衷是为了处理器流水线技术,使已经进入指令队列的指令不因为跳转或是转移指令而浪费CPU的执行效率

使用特权

评论回复
11
heweibig| | 2013-6-23 17:09 | 只看该作者
在in430.h里有此类的定义
#define _NOP()         __no_operation()
就是一个空操作指令。

使用特权

评论回复
12
lizye|  楼主 | 2013-6-23 17:09 | 只看该作者
哦,知道了,多谢啦

使用特权

评论回复
13
comeon201208| | 2013-6-23 22:19 | 只看该作者
这个在程序里面做非常短的延时,特别是涉及到时序问题的时候

使用特权

评论回复
14
comeon201208| | 2013-6-23 22:23 | 只看该作者
像做I2C、SPI等模拟总线的,需要用着个控指令的来调节时序的

使用特权

评论回复
15
李冬发| | 2013-6-24 02:58 | 只看该作者
本帖最后由 李冬发 于 2013-6-24 04:12 编辑
zhenykun 发表于 2013-6-23 17:00
还有一些地方可以用到NOP。某些430的errta上会说到430芯片CPU在某些情况下会出现执行错误的情况。比如JMP不 ...


这可不是芯片设计的BUG,所有单周期指令都存在这个问题。是原理性决定,是不可规避的。不能叫BUG。

使用特权

评论回复
16
gaoyang9992006| | 2013-6-24 15:05 | 只看该作者
说实话跟你多点几个分号效果一样。

使用特权

评论回复
17
i1mcu| | 2013-6-24 19:39 | 只看该作者
一个时钟延时

使用特权

评论回复
18
i1mcu| | 2013-6-24 19:40 | 只看该作者
跟;作用一样,可以不使用的!

使用特权

评论回复
19
angerbird| | 2013-6-24 23:41 | 只看该作者
空指令的作用总结一句话就是非常短的延时

使用特权

评论回复
20
gaochy1126| | 2013-6-28 14:22 | 只看该作者
;的作用的。

使用特权

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

本版积分规则

852

主题

9757

帖子

2

粉丝