簡體   English   中英

相當於 C 語言中的 NOP for Embedded?

[英]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 標准的一部分嗎? 想要查詢更多的信息。

例如,對於C51 Keil 編譯器,內聯匯編語法

...
#pragma asm
      NOP
#pragma endasm
...

而對於ARM ,語法類似於

...
__asm  {
          NOP
       }
...

您需要查看您正在使用的實際編譯器的手冊。

對於一些更常見的操作碼,一些編譯器提供所謂的內在函數 - 這些可以像 C 函數一樣調用,但本質上是插入匯編代碼,如_nop_ ()

如果您將 Keil 用於 ARM Cortex 目標(例如 stm32),您很可能也在使用 CMSIS 庫。 它具有用於所有匯編指令的可移植宏和內聯函數,如下所示: __NOP()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM