我用KEIL编写了一个程序。
该程序使用以下代码
asm(“NOP”)
不幸的是,KEIL编译器不接受该语句。
其思想是使用NOP (无操作)汇编代码引入延迟。
这在C中的实际等效值是多少?这与我使用的嵌入式控制器不同吗?
发布于 2014-09-10 10:24:24
这与我使用的嵌入式控制器不同吗?
是。内联程序集并不是C标准的一部分,它因编译器而异,有时甚至在同一编译器的不同目标体系结构之间也有所不同。有关详细信息,请参阅内联asm是ANSI C标准的一部分吗?。
例如,对于C51 Keil编译器,内联程序集语法是
...
#pragma asm
NOP
#pragma endasm
...而对于ARM,语法类似于
...
__asm {
NOP
}
...您需要检查手册中实际使用的编译器。
对于一些更常见的操作码,一些编译器提供所谓的本质--它们可以像C函数一样调用,但本质上是插入汇编代码,比如_nop_ ()。
发布于 2014-09-10 10:35:24
发布于 2019-10-27 12:19:28
如果您使用Keil作为ARM Cortex目标(例如stm32),那么您很可能也在使用CMSIS库。它具有可移植的宏和内联函数,用于编写如下所示的所有组装指令:__NOP()。
https://stackoverflow.com/questions/25762871
复制相似问题