找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1788|回复: 22
打印 上一主题 下一主题
收起左侧

_nop_()这个函数的括号里写入什么值

  [复制链接]
跳转到指定楼层
楼主
ID:711481 发表于 2020-3-24 20:02 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:452950 发表于 2020-3-24 21:28 | 只看该作者
什么都不用填,只有定义函数时有输入参数的才要在括号里填
回复

使用道具 举报

板凳
ID:388929 发表于 2020-3-24 21:29 | 只看该作者
我一直以为这是个空操作符,就是让单片机白白浪费一个机器周期用的。。。。还能写入值的吗???我也坐等答案呢
回复

使用道具 举报

地板
ID:711481 发表于 2020-3-24 21:53 来自手机 | 只看该作者
billaj 发表于 2020-3-24 21:29
我一直以为这是个空操作符,就是让单片机白白浪费一个机器周期用的。。。。还能写入值的吗???我也坐等答 ...

我初学  不太懂
回复

使用道具 举报

5#
ID:711481 发表于 2020-3-24 21:54 来自手机 | 只看该作者
xxpp2011 发表于 2020-3-24 21:28
什么都不用填,只有定义函数时有输入参数的才要在括号里填

单独把它放在一行上,不用填入参数,就会延迟吗?
回复

使用道具 举报

6#
ID:473159 发表于 2020-3-24 22:16 | 只看该作者
_nop_()本身是一个操作为空的函数(不执行具体事情的函数(括号类也是空)),作用就是白白浪费单片机周期时间,起到简短延时效果
回复

使用道具 举报

7#
ID:388135 发表于 2020-3-24 22:41 | 只看该作者
nop后面有括号吗?
回复

使用道具 举报

8#
ID:481073 发表于 2020-3-25 07:56 | 只看该作者
就是一个周期,就有的时候你要做很精确的延时的时候很多单片机自己延时函数做不到,一般us级别的,就要用到这个函数,可以仿真测下时间,然后决定用几个
回复

使用道具 举报

9#
ID:592807 发表于 2020-3-25 08:29 | 只看该作者
空白操作,不写值
回复

使用道具 举报

10#
ID:685726 发表于 2020-3-25 16:56 | 只看该作者
不用填,这个是空操作符,延时函数里面的指令,相当于延时一个机器周期。
回复

使用道具 举报

11#
ID:426861 发表于 2020-3-25 17:07 | 只看该作者
不要填任何值
回复

使用道具 举报

12#
ID:697917 发表于 2020-3-25 17:28 | 只看该作者
nothing,就是一个空指令,会占用一个机器周期,汇编中为了防止程序跑飞也会对此调用该指令,防止程序死掉。
回复

使用道具 举报

13#
ID:517951 发表于 2024-10-10 07:59 | 只看该作者
_nop_(); 是空转指令, 主要用于非常短暂的延时. 不需要参数.
回复

使用道具 举报

14#
ID:466250 发表于 2024-10-10 21:52 | 只看该作者
本帖最后由 蓝蓝小星星 于 2024-10-11 00:17 编辑

_nop_();的由来是宏定义

#define _nop_()  asm"nop"
回复

使用道具 举报

15#
ID:155507 发表于 2024-10-11 13:50 | 只看该作者

_nop_();的由来是宏定义

函数原型

#define           _nop_()        __asm { nop }

/////////////////////////////////////////////////
#define NOP1()  _nop_()
#define NOP2()  NOP1(),NOP1()
#define NOP3()  NOP2(),NOP1()
#define NOP4()  NOP3(),NOP1()
#define NOP5()  NOP4(),NOP1()
#define NOP6()  NOP5(),NOP1()
#define NOP7()  NOP6(),NOP1()
#define NOP8()  NOP7(),NOP1()
#define NOP9()  NOP8(),NOP1()
#define NOP10() NOP9(),NOP1()
#define NOP11() NOP10(),NOP1()
#define NOP12() NOP11(),NOP1()
#define NOP13() NOP12(),NOP1()
#define NOP14() NOP13(),NOP1()
#define NOP15() NOP14(),NOP1()
#define NOP16() NOP15(),NOP1()
#define NOP17() NOP16(),NOP1()
#define NOP18() NOP17(),NOP1()
#define NOP19() NOP18(),NOP1()
#define NOP20() NOP19(),NOP1()
#define NOP21() NOP20(),NOP1()
#define NOP22() NOP21(),NOP1()
#define NOP23() NOP22(),NOP1()
#define NOP24() NOP23(),NOP1()
#define NOP25() NOP24(),NOP1()
#define NOP26() NOP25(),NOP1()
#define NOP27() NOP26(),NOP1()
#define NOP28() NOP27(),NOP1()
#define NOP29() NOP28(),NOP1()
#define NOP30() NOP29(),NOP1()
#define NOP31() NOP30(),NOP1()
#define NOP32() NOP31(),NOP1()
#define NOP33() NOP32(),NOP1()
#define NOP34() NOP33(),NOP1()
#define NOP35() NOP34(),NOP1()
#define NOP36() NOP35(),NOP1()
#define NOP37() NOP36(),NOP1()
#define NOP38() NOP37(),NOP1()
#define NOP39() NOP38(),NOP1()
#define NOP40() NOP39(),NOP1()
#define NOP(N)  NOP##N()


/////////////////////////////////////////////////

回复

使用道具 举报

16#
ID:624769 发表于 2024-10-11 20:45 | 只看该作者
_nop_()  根本不是来自宏定义!! 来自于 系统函数库!
你只需要使用
extern void          _nop_     (void);
来申明就能直接调用, 而不需要 劳神子 的 define
根据这个函数模型可以看出, 这是一个不传参的 函数。
回复

使用道具 举报

17#
ID:466250 发表于 2024-10-11 23:25 | 只看该作者
188610329 发表于 2024-10-11 20:45
_nop_()  根本不是来自宏定义!! 来自于 系统函数库!
你只需要使用
extern void          _nop_     (voi ...

使用函数传递空指令会发生LCALL跳转,而不是汇编NOP指令,所谓的库函数,就是系统封装好的指令。
部分编译器能看到NOP()被宏定义,部分编译器可能看不到。
通过宏定义还可以重定义自己喜好的写法。
回复

使用道具 举报

18#
ID:624769 发表于 2024-10-17 23:53 | 只看该作者
蓝蓝小星星 发表于 2024-10-11 23:25
使用函数传递空指令会发生LCALL跳转,而不是汇编NOP指令,所谓的库函数,就是系统封装好的指令。
部分编 ...

你用过么? 你能不想当然的 认为 有LCALL 而实际 编译一下看看么?
回复

使用道具 举报

19#
ID:466250 发表于 2024-10-18 00:09 | 只看该作者
188610329 发表于 2024-10-17 23:53
你用过么? 你能不想当然的 认为 有LCALL 而实际 编译一下看看么?



现在用过了,直接无法编译。
回复

使用道具 举报

20#
ID:624769 发表于 2024-10-18 14:14 | 只看该作者
蓝蓝小星星 发表于 2024-10-18 00:09
现在用过了,直接无法编译。

你这 多打一个 _ 以为大家看不见么? 不要自欺欺人好吧?
回复

使用道具 举报

21#
ID:466250 发表于 2024-10-20 04:02 | 只看该作者
188610329 发表于 2024-10-18 14:14
你这 多打一个 _ 以为大家看不见么? 不要自欺欺人好吧?




删除所有代码,只写2行足以测试,别总以为别人是傻子,你倒是来解释解释为什么不能通过编译。
至于为什么会多出来_,是因为按你的写法只声明了函数,但没有书写函数所以警告,编译器直接在出错函数前面加上_符号而已。
回复

使用道具 举报

22#
ID:466250 发表于 2024-10-20 04:05 | 只看该作者
188610329 发表于 2024-10-18 14:14
你这 多打一个 _ 以为大家看不见么? 不要自欺欺人好吧?




按正常书写方法,可通过编译,并产生了CALL指令,并非NOP指令。
回复

使用道具 举报

23#
ID:624769 发表于 2024-10-20 21:07 | 只看该作者
蓝蓝小星星 发表于 2024-10-20 04:05
按正常书写方法,可通过编译,并产生了CALL指令,并非NOP指令。

正常的书写方式,应该是这样:

编译后不会有任何错误。

Ctrl+F5 查看汇编指令后,也是一个空指令NOP。


嘴上说着别以为别人都是傻子,但是你却总以为别人都是傻子。
都说了这是系统函数库的东西了,你去KEIL 的 HELP 里面都能搜到这个指令,压根不需要什么自作聪明的 define, 只要一个extern 就能调用,你如果调用不了,就是你系统函数库出了问题!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表