单片机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人点赞