[应用相关] 单片机NOP 指令

[复制链接]
5103|44
 楼主| 小夏天的大西瓜 发表于 2023-12-23 15:52 | 显示全部楼层 |阅读模式

_nop_() 函数产生的是 NOP 指令,先来简单介绍一下 NOP 指令,基本介绍走个流程把:

NOP 是编程语言中一个经常用到的指令,它的全称是 No Operation,即无操作指令。

NOP 是汇编语言中的一个伪指令,通过NOP一系列的编程语句,能够不改变任何程序可以访问的寄存器。

NOP 指令的作用:
我们知道,指令、数据对齐可以有效地提高程序的性能, 使用 NOP 指令,可以使得指令按字对齐,从而提高效率 。比如一条指令占用 3 个字节,再加上一个 NOP 指令,就使得指令 4 字节对齐了。

通过 NOP 指令产生一定的延迟,这与 CPU 的频率有关系,适用于一些频率低的 单片机 场合。

计算机在输入或者输出的过程中,使用 NOP 指令可可以很好的等待计算机缓冲区清空,等待总线恢复正常,其实也算是延时的一种了

中国龙芯CDX 发表于 2023-12-28 09:33 | 显示全部楼层
NOP 指令产生一定的延迟,这个可以做延时使用吧
LOVEEVER 发表于 2024-1-25 12:32 | 显示全部楼层
NOP 是编程语言中一个经常用到的指令,它的全称是 No Operation,即无操作指令。
albertaabbot 发表于 2024-2-2 20:16 | 显示全部楼层
指令表示一个空操作,即不执行任何操作的指令。
maqianqu 发表于 2024-2-2 21:48 | 显示全部楼层
这种指令通常用于在等待外设或延迟时间时占用一个时钟周期。
tifmill 发表于 2024-2-3 08:33 | 显示全部楼层
在C语言中,可以使用__nop()函数来插入一个NOP指令,该函数是ARM Cortex-M核的一部分。
updownq 发表于 2024-2-3 16:44 | 显示全部楼层
在ARM Cortex-M系列处理器(如STM32)中,NOP指令的汇编表示为nop。
chenci2013 发表于 2024-2-3 18:24 | 显示全部楼层
NOP指令执行的延时并不是绝对准确的
saservice 发表于 2024-2-3 20:50 | 显示全部楼层
当CPU执行到此指令时,不会执行任何实际操作,只是简单地将程序计数器(PC)加1,指向下一个指令。
tifmill 发表于 2024-2-3 22:55 | 显示全部楼层
一种特殊的指令,它不执行任何操作,只是占用一个时钟周期。
caigang13 发表于 2024-2-4 08:06 来自手机 | 显示全部楼层
我记得大佬说过,这个指令的发明弊大于利。
sesefadou 发表于 2024-2-4 21:15 | 显示全部楼层
如果一个STM32单片机的主频是72MHz,那么一个机器周期大约是1/72000000秒。由于NOP指令消耗的时间正好是一个机器周期,因此可以通过执行NOP指令来达到微秒级别的延时。具体来说,如果要实现1微秒的延时,理论上需要执行72个NOP指令。
albertaabbot 发表于 2024-2-5 11:17 | 显示全部楼层
为了获得准确延时效果,往往需要考虑更多因素,如指令流水线、中断等因素的影响,并且对于更精确的延时,通常推荐采用定时器硬件的方式来完成。
houjiakai 发表于 2024-2-5 11:55 | 显示全部楼层
使用NOP指令进行延迟并不是最精确的方法,因为它依赖于单片机的时钟频率
claretttt 发表于 2024-2-5 12:48 | 显示全部楼层
在该函数中通过循环执行NOP指令来实现延时效果。
mickit 发表于 2024-2-5 14:49 | 显示全部楼层
可以使用NOP指令来产生一个短暂的延迟
jackcat 发表于 2024-2-5 17:47 | 显示全部楼层
在STM32的库函数中,并没有提供专门的us级别延时函数, 往往需要通过软件手段来实现精准的延时。
everyrobin 发表于 2024-2-5 18:16 | 显示全部楼层
__asm__ __volatile__ ("nop");
pmp 发表于 2024-2-6 10:09 | 显示全部楼层
常用于在程序中插入空闲周期或调整指令的执行顺序。
wangdezhi 发表于 2024-2-6 16:34 | 显示全部楼层
在编写延时函数时, 使用NOP指令来增加额外的延时  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

273

主题

2390

帖子

3

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