假设以下 while
循环以 1kHz 运行。在没有多线程的情况下,在这个循环中运行另一段代码但频率不同(即 500Hz)的正确方法是什么?
while (1){ // running 1kHz (i.e. outer loop)
do stuff
if (){ // running 500Hz (i.e. inner loop)
do another stuff
}
}
另一个问题是假设外循环以 CPU 的最大速度运行,是否可以以外循环的百分比(即外循环的 50%)运行内循环。
回答1
最简单的方法是这样的:
int counter = 0;
while (1) {
// do stuff
if (++counter == 2) { // inner loop
counter = 0;
// do other stuff
}
}
请注意,在这样的自旋循环中,不能保证外循环将以 1kHz 运行;它将以由 CPU 速度和循环内发生的工作量确定的速度运行。如果你真的需要精确的 1kHz 执行,你可能想要编写一个定时器中断来代替。可以保证的是,内部 if()
块中的代码将在外部循环的每第二次迭代中执行。
回答2
像这样的东西应该工作
unsigned int counter = 0;
while (1) {
// do stuff
counter+=1;
if ((counter%2) == 0) { // inner loop
// do other stuff
}
}