单片机NOP 指令

[应用相关]

单片机NOP 指令

[复制链接]

4473|44

手机看帖扫描二维码随时随地手机跟帖

小夏天的大西瓜

当前离线

关注TA

发消息

256

主题2184

帖子6807

积分

高级工程师

高级工程师, 积分 6807, 距离下一级还需 1193 积分

高级工程师, 积分 6807, 距离下一级还需 1193 积分

积分6807

在线时间85 小时

精华0

注册时间2022-9-6

最后登录2025-6-27

打赏0.00受赏10.00

电梯直达

楼主

小夏天的大西瓜|

楼主

|

2023-12-23 15:52

|

只看该作者

|倒序浏览

|阅读模式

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

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

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

NOP 指令的作用:

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

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

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

使用特权

评论回复

赏

标题置顶

标题高亮

点赞共0人点赞

中国龙芯CDX

当前离线

关注TA

发消息

331

主题2435

帖子7480

积分

高级工程师

高级工程师, 积分 7480, 距离下一级还需 520 积分

高级工程师, 积分 7480, 距离下一级还需 520 积分

积分7480

在线时间95 小时

精华1

注册时间2022-9-6

最后登录2025-6-30

打赏0.00受赏43.00

沙发

中国龙芯CDX|

|

2023-12-28 09:33

|

只看该作者

NOP 指令产生一定的延迟,这个可以做延时使用吧

使用特权

评论回复

赏

点赞共0人点赞

LOVEEVER

当前离线

关注TA

发消息

334

主题2478

帖子7680

积分

高级工程师

高级工程师, 积分 7680, 距离下一级还需 320 积分

高级工程师, 积分 7680, 距离下一级还需 320 积分

积分7680

在线时间104 小时

精华1

注册时间2022-9-6

最后登录2025-6-30

打赏0.00受赏5.00

板凳

LOVEEVER|

|

2024-1-25 12:32

|

只看该作者

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

使用特权

评论回复

赏

点赞共0人点赞

albertaabbot

当前在线

关注TA

发消息

13

主题1485

帖子4374

积分

中级工程师

中级工程师, 积分 4374, 距离下一级还需 626 积分

中级工程师, 积分 4374, 距离下一级还需 626 积分

积分4374

在线时间334 小时

精华0

注册时间2020-3-6

最后登录2025-7-7

打赏0.00受赏5.00

地板

albertaabbot|

|

2024-2-2 20:16

|

只看该作者

指令表示一个空操作,即不执行任何操作的指令。

使用特权

评论回复

赏

点赞共0人点赞

maqianqu

当前在线

关注TA

发消息

18

主题2674

帖子8031

积分

技术达人

技术达人, 积分 8031, 距离下一级还需 1969 积分

技术达人, 积分 8031, 距离下一级还需 1969 积分

积分8031

在线时间418 小时

精华0

注册时间2016-8-19

最后登录2025-7-7

5楼

maqianqu|

|

2024-2-2 21:48

|

只看该作者

这种指令通常用于在等待外设或延迟时间时占用一个时钟周期。

使用特权

评论回复

赏

点赞共0人点赞

tifmill

当前在线

关注TA

发消息

45

主题1551

帖子4536

积分

中级工程师

中级工程师, 积分 4536, 距离下一级还需 464 积分

中级工程师, 积分 4536, 距离下一级还需 464 积分

积分4536

在线时间343 小时

精华0

注册时间2020-3-6

最后登录2025-7-7

打赏0.00受赏10.00

6楼

tifmill|

|

2024-2-3 08:33

|

只看该作者

在C语言中,可以使用__nop()函数来插入一个NOP指令,该函数是ARM Cortex-M核的一部分。

使用特权

评论回复

赏

点赞共0人点赞

updownq

当前离线

关注TA

发消息

55

主题3403

帖子1万

积分

资深工程师

资深工程师, 积分 10204, 距离下一级还需 9796 积分

资深工程师, 积分 10204, 距离下一级还需 9796 积分

积分10204

在线时间524 小时

精华0

注册时间2015-9-20

最后登录2025-7-7

打赏0.00受赏16.00

7楼

updownq|

|

2024-2-3 16:44

|

只看该作者

在ARM Cortex-M系列处理器(如STM32)中,NOP指令的汇编表示为nop。

使用特权

评论回复

赏

点赞共0人点赞

chenci2013

当前在线

关注TA

发消息

122

主题6599

帖子1万

积分

资深工程师

资深工程师, 积分 19816, 距离下一级还需 184 积分

资深工程师, 积分 19816, 距离下一级还需 184 积分

积分19816

在线时间624 小时

精华0

注册时间2013-5-4

最后登录2025-7-7

打赏0.00受赏28.00

8楼

chenci2013|

|

2024-2-3 18:24

|

只看该作者

NOP指令执行的延时并不是绝对准确的

使用特权

评论回复

赏

点赞共0人点赞

saservice

当前在线

关注TA

发消息

43

主题1470

帖子4311

积分

中级工程师

中级工程师, 积分 4311, 距离下一级还需 689 积分

中级工程师, 积分 4311, 距离下一级还需 689 积分

积分4311

在线时间328 小时

精华0

注册时间2020-3-6

最后登录2025-7-7

打赏0.00受赏5.00

9楼

saservice|

|

2024-2-3 20:50

|

只看该作者

当CPU执行到此指令时,不会执行任何实际操作,只是简单地将程序计数器(PC)加1,指向下一个指令。

使用特权

评论回复

赏

点赞共0人点赞

tifmill

当前在线

关注TA

发消息

45

主题1551

帖子4536

积分

中级工程师

中级工程师, 积分 4536, 距离下一级还需 464 积分

中级工程师, 积分 4536, 距离下一级还需 464 积分

积分4536

在线时间343 小时

精华0

注册时间2020-3-6

最后登录2025-7-7

打赏0.00受赏10.00

10楼

tifmill|

|

2024-2-3 22:55

|

只看该作者

一种特殊的指令,它不执行任何操作,只是占用一个时钟周期。

使用特权

评论回复

赏

点赞共0人点赞

caigang13

当前离线

关注TA

发消息

5

主题3595

帖子1万

积分

资深工程师

资深工程师, 积分 10683, 距离下一级还需 9317 积分

资深工程师, 积分 10683, 距离下一级还需 9317 积分

积分10683

在线时间122 小时

精华0

注册时间2020-8-26

最后登录2025-6-3

打赏0.00受赏25.00

11楼

caigang13|

|

2024-2-4 08:06

|

只看该作者

我记得大佬说过,这个指令的发明弊大于利。

使用特权

评论回复

赏

点赞共0人点赞

sesefadou

当前离线

关注TA

发消息

25

主题1788

帖子5355

积分

高级工程师

高级工程师, 积分 5355, 距离下一级还需 2645 积分

高级工程师, 积分 5355, 距离下一级还需 2645 积分

积分5355

在线时间410 小时

精华0

注册时间2020-3-5

最后登录2025-7-7

12楼

sesefadou|

|

2024-2-4 21:15

|

只看该作者

如果一个STM32单片机的主频是72MHz,那么一个机器周期大约是1/72000000秒。由于NOP指令消耗的时间正好是一个机器周期,因此可以通过执行NOP指令来达到微秒级别的延时。具体来说,如果要实现1微秒的延时,理论上需要执行72个NOP指令。

使用特权

评论回复

赏

点赞共0人点赞

albertaabbot

当前在线

关注TA

发消息

13

主题1485

帖子4374

积分

中级工程师

中级工程师, 积分 4374, 距离下一级还需 626 积分

中级工程师, 积分 4374, 距离下一级还需 626 积分

积分4374

在线时间334 小时

精华0

注册时间2020-3-6

最后登录2025-7-7

打赏0.00受赏5.00

13楼

albertaabbot|

|

2024-2-5 11:17

|

只看该作者

为了获得准确延时效果,往往需要考虑更多因素,如指令流水线、中断等因素的影响,并且对于更精确的延时,通常推荐采用定时器硬件的方式来完成。

使用特权

评论回复

赏

点赞共0人点赞

houjiakai

当前离线

关注TA

发消息

191

主题6151

帖子1万

积分

资深工程师

资深工程师, 积分 18360, 距离下一级还需 1640 积分

资深工程师, 积分 18360, 距离下一级还需 1640 积分

积分18360

在线时间523 小时

精华0

注册时间2013-5-27

最后登录2025-7-7

打赏0.00受赏13.00

14楼

houjiakai|

|

2024-2-5 11:55

|

只看该作者

使用NOP指令进行延迟并不是最精确的方法,因为它依赖于单片机的时钟频率

使用特权

评论回复

赏

点赞共0人点赞

claretttt

当前离线

关注TA

发消息

69

主题1600

帖子4800

积分

中级工程师

中级工程师, 积分 4800, 距离下一级还需 200 积分

中级工程师, 积分 4800, 距离下一级还需 200 积分

积分4800

在线时间367 小时

精华0

注册时间2020-3-6

最后登录2025-7-7

打赏0.00受赏10.00

15楼

claretttt|

|

2024-2-5 12:48

|

只看该作者

在该函数中通过循环执行NOP指令来实现延时效果。

使用特权

评论回复

赏

点赞共0人点赞

mickit

当前离线

关注TA

发消息

88

主题1492

帖子4386

积分

中级工程师

中级工程师, 积分 4386, 距离下一级还需 614 积分

中级工程师, 积分 4386, 距离下一级还需 614 积分

积分4386

在线时间323 小时

精华0

注册时间2020-3-6

最后登录2025-7-7

16楼

mickit|

|

2024-2-5 14:49

|

只看该作者

可以使用NOP指令来产生一个短暂的延迟

使用特权

评论回复

赏

点赞共0人点赞

jackcat

当前离线

关注TA

发消息

27

主题1753

帖子5238

积分

高级工程师

高级工程师, 积分 5238, 距离下一级还需 2762 积分

高级工程师, 积分 5238, 距离下一级还需 2762 积分

积分5238

在线时间404 小时

精华0

注册时间2020-3-6

最后登录2025-7-7

打赏0.00受赏20.00

17楼

jackcat|

|

2024-2-5 17:47

|

只看该作者

在STM32的库函数中,并没有提供专门的us级别延时函数, 往往需要通过软件手段来实现精准的延时。

使用特权

评论回复

赏

点赞共0人点赞

everyrobin

当前在线

关注TA

发消息

30

主题1571

帖子4608

积分

中级工程师

中级工程师, 积分 4608, 距离下一级还需 392 积分

中级工程师, 积分 4608, 距离下一级还需 392 积分

积分4608

在线时间349 小时

精华0

注册时间2020-3-6

最后登录2025-7-7

打赏0.00受赏5.00

18楼

everyrobin|

|

2024-2-5 18:16

|

只看该作者

__asm__ __volatile__ ("nop");

使用特权

评论回复

赏

点赞共0人点赞

pmp

当前离线

关注TA

发消息

182

主题7726

帖子2万

积分

技术总监

技术总监, 积分 23096, 距离下一级还需 26904 积分

技术总监, 积分 23096, 距离下一级还需 26904 积分

积分23096

在线时间691 小时

精华0

注册时间2013-1-23

最后登录2025-7-7

打赏0.00受赏29.00

19楼

pmp|

|

2024-2-6 10:09

|

只看该作者

常用于在程序中插入空闲周期或调整指令的执行顺序。

使用特权

评论回复

赏

点赞共0人点赞

wangdezhi

当前在线

关注TA

发消息

204

主题7486

帖子2万

积分

技术总监

技术总监, 积分 22375, 距离下一级还需 27625 积分

技术总监, 积分 22375, 距离下一级还需 27625 积分

积分22375

在线时间598 小时

精华0

注册时间2013-5-27

最后登录2025-7-7

打赏0.00受赏24.00

20楼

wangdezhi|

|

2024-2-6 16:34

|

只看该作者

在编写延时函数时, 使用NOP指令来增加额外的延时

使用特权

评论回复

赏

点赞共0人点赞