找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3761|回復(fù): 26
收起左側(cè)

_nop_()這個函數(shù)的括號里寫入什么值

  [復(fù)制鏈接]
ID:711481 發(fā)表于 2020-3-24 20:02 來自觸屏版 | 顯示全部樓層 |閱讀模式
如題
回復(fù)

使用道具 舉報

ID:452950 發(fā)表于 2020-3-24 21:28 | 顯示全部樓層
什么都不用填,只有定義函數(shù)時有輸入?yún)?shù)的才要在括號里填
回復(fù)

使用道具 舉報

ID:388929 發(fā)表于 2020-3-24 21:29 | 顯示全部樓層
我一直以為這是個空操作符,就是讓單片機白白浪費一個機器周期用的。。。。還能寫入值的嗎???我也坐等答案呢
回復(fù)

使用道具 舉報

ID:711481 發(fā)表于 2020-3-24 21:53 來自觸屏版 | 顯示全部樓層
billaj 發(fā)表于 2020-3-24 21:29
我一直以為這是個空操作符,就是讓單片機白白浪費一個機器周期用的。。。。還能寫入值的嗎???我也坐等答 ...

我初學(xué)  不太懂
回復(fù)

使用道具 舉報

ID:711481 發(fā)表于 2020-3-24 21:54 來自觸屏版 | 顯示全部樓層
xxpp2011 發(fā)表于 2020-3-24 21:28
什么都不用填,只有定義函數(shù)時有輸入?yún)?shù)的才要在括號里填

單獨把它放在一行上,不用填入?yún)?shù),就會延遲嗎?
回復(fù)

使用道具 舉報

ID:473159 發(fā)表于 2020-3-24 22:16 | 顯示全部樓層
_nop_()本身是一個操作為空的函數(shù)(不執(zhí)行具體事情的函數(shù)(括號類也是空)),作用就是白白浪費單片機周期時間,起到簡短延時效果
回復(fù)

使用道具 舉報

ID:388135 發(fā)表于 2020-3-24 22:41 | 顯示全部樓層
nop后面有括號嗎?
回復(fù)

使用道具 舉報

ID:481073 發(fā)表于 2020-3-25 07:56 | 顯示全部樓層
就是一個周期,就有的時候你要做很精確的延時的時候很多單片機自己延時函數(shù)做不到,一般us級別的,就要用到這個函數(shù),可以仿真測下時間,然后決定用幾個
回復(fù)

使用道具 舉報

ID:592807 發(fā)表于 2020-3-25 08:29 | 顯示全部樓層
空白操作,不寫值
回復(fù)

使用道具 舉報

ID:685726 發(fā)表于 2020-3-25 16:56 | 顯示全部樓層
不用填,這個是空操作符,延時函數(shù)里面的指令,相當(dāng)于延時一個機器周期。
回復(fù)

使用道具 舉報

ID:426861 發(fā)表于 2020-3-25 17:07 | 顯示全部樓層
不要填任何值
回復(fù)

使用道具 舉報

ID:697917 發(fā)表于 2020-3-25 17:28 | 顯示全部樓層
nothing,就是一個空指令,會占用一個機器周期,匯編中為了防止程序跑飛也會對此調(diào)用該指令,防止程序死掉。
回復(fù)

使用道具 舉報

ID:517951 發(fā)表于 2024-10-10 07:59 | 顯示全部樓層
_nop_(); 是空轉(zhuǎn)指令, 主要用于非常短暫的延時. 不需要參數(shù).
回復(fù)

使用道具 舉報

ID:466250 發(fā)表于 2024-10-10 21:52 | 顯示全部樓層
本帖最后由 藍(lán)藍(lán)小星星 于 2024-10-11 00:17 編輯

_nop_();的由來是宏定義

#define _nop_()  asm"nop"
回復(fù)

使用道具 舉報

ID:155507 發(fā)表于 2024-10-11 13:50 | 顯示全部樓層

_nop_();的由來是宏定義

函數(shù)原型

#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()


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

回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2024-10-11 20:45 | 顯示全部樓層
_nop_()  根本不是來自宏定義!! 來自于 系統(tǒng)函數(shù)庫!
你只需要使用
extern void          _nop_     (void);
來申明就能直接調(diào)用, 而不需要 勞神子 的 define
根據(jù)這個函數(shù)模型可以看出, 這是一個不傳參的 函數(shù)。
回復(fù)

使用道具 舉報

ID:466250 發(fā)表于 2024-10-11 23:25 | 顯示全部樓層
188610329 發(fā)表于 2024-10-11 20:45
_nop_()  根本不是來自宏定義!! 來自于 系統(tǒng)函數(shù)庫!
你只需要使用
extern void          _nop_     (voi ...

使用函數(shù)傳遞空指令會發(fā)生LCALL跳轉(zhuǎn),而不是匯編NOP指令,所謂的庫函數(shù),就是系統(tǒng)封裝好的指令。
部分編譯器能看到NOP()被宏定義,部分編譯器可能看不到。
通過宏定義還可以重定義自己喜好的寫法。
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2024-10-17 23:53 | 顯示全部樓層
藍(lán)藍(lán)小星星 發(fā)表于 2024-10-11 23:25
使用函數(shù)傳遞空指令會發(fā)生LCALL跳轉(zhuǎn),而不是匯編NOP指令,所謂的庫函數(shù),就是系統(tǒng)封裝好的指令。
部分編 ...

你用過么? 你能不想當(dāng)然的 認(rèn)為 有LCALL 而實際 編譯一下看看么?
回復(fù)

使用道具 舉報

ID:466250 發(fā)表于 2024-10-18 00:09 | 顯示全部樓層
188610329 發(fā)表于 2024-10-17 23:53
你用過么? 你能不想當(dāng)然的 認(rèn)為 有LCALL 而實際 編譯一下看看么?

1.png

現(xiàn)在用過了,直接無法編譯。
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2024-10-18 14:14 | 顯示全部樓層
藍(lán)藍(lán)小星星 發(fā)表于 2024-10-18 00:09
現(xiàn)在用過了,直接無法編譯。

你這 多打一個 _ 以為大家看不見么? 不要自欺欺人好吧?
回復(fù)

使用道具 舉報

ID:466250 發(fā)表于 2024-10-20 04:02 | 顯示全部樓層
188610329 發(fā)表于 2024-10-18 14:14
你這 多打一個 _ 以為大家看不見么? 不要自欺欺人好吧?

1.png


刪除所有代碼,只寫2行足以測試,別總以為別人是傻子,你倒是來解釋解釋為什么不能通過編譯。
至于為什么會多出來_,是因為按你的寫法只聲明了函數(shù),但沒有書寫函數(shù)所以警告,編譯器直接在出錯函數(shù)前面加上_符號而已。
回復(fù)

使用道具 舉報

ID:466250 發(fā)表于 2024-10-20 04:05 | 顯示全部樓層
188610329 發(fā)表于 2024-10-18 14:14
你這 多打一個 _ 以為大家看不見么? 不要自欺欺人好吧?

2.png
3.png

按正常書寫方法,可通過編譯,并產(chǎn)生了CALL指令,并非NOP指令。
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2024-10-20 21:07 | 顯示全部樓層
藍(lán)藍(lán)小星星 發(fā)表于 2024-10-20 04:05
按正常書寫方法,可通過編譯,并產(chǎn)生了CALL指令,并非NOP指令。

正常的書寫方式,應(yīng)該是這樣:
testnop2.png
編譯后不會有任何錯誤。

Ctrl+F5 查看匯編指令后,也是一個空指令NOP。
testnop.png

嘴上說著別以為別人都是傻子,但是你卻總以為別人都是傻子。
都說了這是系統(tǒng)函數(shù)庫的東西了,你去KEIL 的 HELP 里面都能搜到這個指令,壓根不需要什么自作聰明的 define, 只要一個extern 就能調(diào)用,你如果調(diào)用不了,就是你系統(tǒng)函數(shù)庫出了問題!

回復(fù)

使用道具 舉報

ID:466250 發(fā)表于 2024-10-21 00:10 | 顯示全部樓層
188610329 發(fā)表于 2024-10-20 21:07
正常的書寫方式,應(yīng)該是這樣:

編譯后不會有任何錯誤。

不是所有的編譯器都支持這種寫法,這是keil的寫法,你找其他的編譯器看看能支持?
按標(biāo)準(zhǔn)寫法,肯定會成成call指令,如果是替換為nop只能說明這是編譯器的關(guān)鍵字。
define的寫法在一些編譯器的未加密的庫函數(shù)可以看到封裝后的寫法,但如果這時用keil就會報錯。而define這種寫法的通用性還可以用在keil上。
回復(fù)

使用道具 舉報

ID:592807 發(fā)表于 2024-10-21 08:18 | 顯示全部樓層

你可以理解成void _nop_(void){;}這是個什么都不做就浪費單片機時間的函數(shù)就行了
回復(fù)

使用道具 舉報

ID:1133676 發(fā)表于 2024-10-26 13:26 | 顯示全部樓層
不用填
回復(fù)

使用道具 舉報

ID:1134816 發(fā)表于 2024-10-27 18:36 | 顯示全部樓層
什么都不寫,本來就是個空指令
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表