[英]Is `__asm nop` the Windows equivalent of `asm volatile(“nop”);` from GCC compiler
[英]Equivalent for NOP in C for Embedded?
我使用KEIL編譯程序。
程序使用代碼
asm("NOP");
不幸的是 KEIL 編譯器不接受該聲明。
這個想法是通過使用 NOP(無操作)匯編代碼來引入延遲。
C 中 this 的實際等價物是什么? 這是否因我使用的嵌入式控制器而異?
大多數編譯器都有一個內在的nop
,Keil 也應該有這個 - 試試__nop()
見 - http://www.keil.com/support/man/docs/armccref/armccref_CJABCDAD.htm
出於兼容性原因,內部函數通常比直接添加匯編代碼更安全。
這是否因我使用的嵌入式控制器而異?
是的。 內聯匯編不是 C 標准的一部分(還),它因編譯器而異,有時甚至在同一編譯器的不同目標體系結構之間。 請參閱內聯匯編是 ANSI C 標准的一部分嗎? 想要查詢更多的信息。
...
#pragma asm
NOP
#pragma endasm
...
而對於ARM
,語法類似於
...
__asm {
NOP
}
...
您需要查看您正在使用的實際編譯器的手冊。
對於一些更常見的操作碼,一些編譯器提供所謂的內在函數 - 這些可以像 C 函數一樣調用,但本質上是插入匯編代碼,如_nop_ ()
。
如果您將 Keil 用於 ARM Cortex 目標(例如 stm32),您很可能也在使用 CMSIS 庫。 它具有用於所有匯編指令的可移植宏和內聯函數,如下所示: __NOP()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.