我使用KEIL编译程序.
该程序使用该代码
asm(“NOP”);
不幸的是,KEIL编译器不接受该声明.
想法是通过使用NOP(无操作)汇编代码来引入延迟.
C中的实际等价物是多少?这与我使用的嵌入式控制器有什么不同吗?
解决方法
Does this vary with the embedded controller that I use?
是.内联汇编不是C标准(尚未)的一部分,它因编译器而异,有时甚至在同一编译器的不同目标架构之间.有关更多信息,请参见Is inline asm part of the ANSI C standard?.
例如,对于C51 Keil编译器,syntax for inline assembly是
... #pragma asm NOP #pragma endasm ...
而对于ARM
,语法就像
... __asm { NOP } ...
您需要查看您正在使用的实际编译器的手册.
对于一些更常见的操作码,一些编译器提供所谓的内在函数 – 这些可以被称为C函数,但实际上是插入汇编代码,如_nop_ ()
.