[应用相关]
单片机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人点赞