我正在为嵌入式设备编写代码(没有操作系统,所以没有系统调用或任何东西),我需要延迟,但编译器不提供time.h
. 我还有什么其他选择?
问问题
1167 次
3 回答
1
根据系统的时钟,您可以使用 NOP(无操作)汇编指令实现延迟。您可以根据系统的 MIPS 计算一个 NOP 的时间,例如,如果 1NOP
是1[us]
,那么您可以实现类似:
void delay(int ms)
{
int i;
for (i = 0; i < ms*1000; i++)
{
asm(NOP);
}
}
于 2013-07-30T02:05:40.253 回答
0
对于较短的固定时间延迟,无操作循环将满足需要,但当然需要校准。
void Delay_ms(unsigned d /* ms */) {
while (d-- > 0) {
unsigned i;
i = 2800; // Calibrate this value
// Recommend that the flowing while loop's asm code is check for tightness.
while (--i);
/* add multiple _nop_() here should you want precise calibration */
}
}
于 2013-07-30T17:57:41.783 回答
0
取决于设备。你能启用一个稳定的定时器中断吗?您可能只能忙于等待并等待计时器中断。这可能有多准确(以及需要多准确)尚不清楚。
于 2013-07-30T01:55:58.470 回答