我使用KEIL编译程序。
该程序使用如下代码
asm("NOP");
不幸的是,KEIL编译器不接受此语句。
这个想法是通过使用NOP(无操作)汇编代码来引入延迟。
在C中,实际等效于此的是什么? 这是否因我使用的嵌入式控制器而有所不同?
我使用KEIL编译程序。
该程序使用如下代码
asm("NOP");
不幸的是,KEIL编译器不接受此语句。
这个想法是通过使用NOP(无操作)汇编代码来引入延迟。
在C中,实际等效于此的是什么? 这是否因我使用的嵌入式控制器而有所不同?
大多数编译器都有内在的nop
,Keil也应该有-尝试使用__nop()
请参阅- https://www.keil.com/support/man/docs/armcc/armcc_chr1359124998347.htm
为了兼容性原因,内在函数通常比直接添加汇编代码更安全。
我使用的嵌入式控制器会影响这个吗?
是的。内联汇编不是C标准的一部分(目前),它因编译器而异,有时甚至在同一编译器的不同目标架构之间也有所不同。有关更多信息,请参见内联汇编是否属于ANSI C标准?。
例如,对于C51 Keil编译器,内联汇编的语法为:
...
#pragma asm
NOP
#pragma endasm
...
而对于ARM
,语法大致如下:
...
__asm {
NOP
}
...
_nop_ ()
。__NOP()
。
__delay_cycles(constant)
,它会生成代码以等待指定数量的周期。我不确定Keil编译器是否有此功能。 - Lindydancer