久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: _nop_()這個函數的括號里寫入什么值 [打印本頁]

作者: 可愛萌萌噠    時間: 2020-3-24 20:02
標題: _nop_()這個函數的括號里寫入什么值
如題

作者: xxpp2011    時間: 2020-3-24 21:28
什么都不用填,只有定義函數時有輸入參數的才要在括號里填
作者: billaj    時間: 2020-3-24 21:29
我一直以為這是個空操作符,就是讓單片機白白浪費一個機器周期用的。。。。還能寫入值的嗎???我也坐等答案呢
作者: 可愛萌萌噠    時間: 2020-3-24 21:53
billaj 發表于 2020-3-24 21:29
我一直以為這是個空操作符,就是讓單片機白白浪費一個機器周期用的。。。。還能寫入值的嗎???我也坐等答 ...

我初學  不太懂
作者: 可愛萌萌噠    時間: 2020-3-24 21:54
xxpp2011 發表于 2020-3-24 21:28
什么都不用填,只有定義函數時有輸入參數的才要在括號里填

單獨把它放在一行上,不用填入參數,就會延遲嗎?
作者: yoxi    時間: 2020-3-24 22:16
_nop_()本身是一個操作為空的函數(不執行具體事情的函數(括號類也是空)),作用就是白白浪費單片機周期時間,起到簡短延時效果
作者: jiasirer123    時間: 2020-3-24 22:41
nop后面有括號嗎?
作者: 流星2019    時間: 2020-3-25 07:56
就是一個周期,就有的時候你要做很精確的延時的時候很多單片機自己延時函數做不到,一般us級別的,就要用到這個函數,可以仿真測下時間,然后決定用幾個
作者: 黃youhui    時間: 2020-3-25 08:29
空白操作,不寫值
作者: az12580    時間: 2020-3-25 16:56
不用填,這個是空操作符,延時函數里面的指令,相當于延時一個機器周期。
作者: 天風情    時間: 2020-3-25 17:07
不要填任何值
作者: 黎明初至    時間: 2020-3-25 17:28
nothing,就是一個空指令,會占用一個機器周期,匯編中為了防止程序跑飛也會對此調用該指令,防止程序死掉。
作者: rayin    時間: 2024-10-10 07:59
_nop_(); 是空轉指令, 主要用于非常短暫的延時. 不需要參數.
作者: 藍藍小星星    時間: 2024-10-10 21:52
本帖最后由 藍藍小星星 于 2024-10-11 00:17 編輯

_nop_();的由來是宏定義

#define _nop_()  asm"nop"
作者: angmall    時間: 2024-10-11 13:50
可愛萌萌噠 發表于 2020-3-24 21:53
我初學  不太懂

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


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


作者: 188610329    時間: 2024-10-11 20:45
_nop_()  根本不是來自宏定義!! 來自于 系統函數庫!
你只需要使用
extern void          _nop_     (void);
來申明就能直接調用, 而不需要 勞神子 的 define
根據這個函數模型可以看出, 這是一個不傳參的 函數。
作者: 藍藍小星星    時間: 2024-10-11 23:25
188610329 發表于 2024-10-11 20:45
_nop_()  根本不是來自宏定義!! 來自于 系統函數庫!
你只需要使用
extern void          _nop_     (voi ...

使用函數傳遞空指令會發生LCALL跳轉,而不是匯編NOP指令,所謂的庫函數,就是系統封裝好的指令。
部分編譯器能看到NOP()被宏定義,部分編譯器可能看不到。
通過宏定義還可以重定義自己喜好的寫法。
作者: 188610329    時間: 2024-10-17 23:53
藍藍小星星 發表于 2024-10-11 23:25
使用函數傳遞空指令會發生LCALL跳轉,而不是匯編NOP指令,所謂的庫函數,就是系統封裝好的指令。
部分編 ...

你用過么? 你能不想當然的 認為 有LCALL 而實際 編譯一下看看么?
作者: 藍藍小星星    時間: 2024-10-18 00:09
188610329 發表于 2024-10-17 23:53
你用過么? 你能不想當然的 認為 有LCALL 而實際 編譯一下看看么?



現在用過了,直接無法編譯。

作者: 188610329    時間: 2024-10-18 14:14
藍藍小星星 發表于 2024-10-18 00:09
現在用過了,直接無法編譯。

你這 多打一個 _ 以為大家看不見么? 不要自欺欺人好吧?
作者: 藍藍小星星    時間: 2024-10-20 04:02
188610329 發表于 2024-10-18 14:14
你這 多打一個 _ 以為大家看不見么? 不要自欺欺人好吧?




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

作者: 藍藍小星星    時間: 2024-10-20 04:05
188610329 發表于 2024-10-18 14:14
你這 多打一個 _ 以為大家看不見么? 不要自欺欺人好吧?




按正常書寫方法,可通過編譯,并產生了CALL指令,并非NOP指令。

作者: 188610329    時間: 2024-10-20 21:07
藍藍小星星 發表于 2024-10-20 04:05
按正常書寫方法,可通過編譯,并產生了CALL指令,并非NOP指令。

正常的書寫方式,應該是這樣:

編譯后不會有任何錯誤。

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


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


作者: 藍藍小星星    時間: 2024-10-21 00:10
188610329 發表于 2024-10-20 21:07
正常的書寫方式,應該是這樣:

編譯后不會有任何錯誤。

不是所有的編譯器都支持這種寫法,這是keil的寫法,你找其他的編譯器看看能支持?
按標準寫法,肯定會成成call指令,如果是替換為nop只能說明這是編譯器的關鍵字。
define的寫法在一些編譯器的未加密的庫函數可以看到封裝后的寫法,但如果這時用keil就會報錯。而define這種寫法的通用性還可以用在keil上。
作者: 黃youhui    時間: 2024-10-21 08:18
可愛萌萌噠 發表于 2020-3-24 21:53
我初學  不太懂

你可以理解成void _nop_(void){;}這是個什么都不做就浪費單片機時間的函數就行了
作者: djalkdkal    時間: 2024-10-26 13:26
不用填
作者: jhl0928    時間: 2024-10-27 18:36
什么都不寫,本來就是個空指令




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产视频一区二区三区四区 | 国产精品手机在线观看 | 免费成人蒂法网站 | 国产精品视频一区二区三区 | 日韩欧美在线观看视频 | 成人免费看片39 | 午夜久久久 | 黄色aaa| 好色婷婷 | 黄色a网站| 国产午夜在线观看 | 成人午夜激情视频 | 首尔之春在线看 | 国产精品区二区三区日本 | 国产成人在线免费视频 | 中文字幕一区二区在线播放 | 免费亚洲婷婷 | 国产区一区二区 | 亚洲激情综合网 | 亚洲视频一区二区三区 | 日韩精品一区二区三区免费视频 | 亚洲免费大片 | 99热1| 97色伦图片 | 在线播放黄色 | 日本一区二区不卡视频 | 成人在线视频播放 | 国产精品免费一区 | 黄色大片免费在线观看 | 亚洲美女毛片 | 伊人成人在线视频 | 毛片网站在线观看 | 国产ts系列| 天堂av影院| 成人免费毛片片v | 国产视频一 | 国产91av视频 | 亚洲精品国产精品国自产观看浪潮 | 亚洲天堂久久 | 中国免费毛片 | 毛片毛片毛片 |