【问题标题】:Ensure loop runs at fixed predefined frequency in C确保循环以 C 中的固定预定义频率运行
【发布时间】:2023-01-13 21:54:24
【问题描述】:
我想在 C 中创建一个 while(1) 循环,它必须以固定的 10,000Hz 频率运行,而不管执行循环中编写的语句所花费的时间。
可以有 2 个退出条件,基于运行时间(假设 1 秒,那么它应该运行 10,000 次,即迭代次数)和基于循环计数(假设 20,000 次迭代,那么理想情况下它应该需要 2 秒的时间)
int loopCount = 0;
while (1) {
// Some calculations
// loopCount++;
// Check for exit
// Delay based on frequency
}
如果我运行所有迭代(10,000 次),则需要超过 1 秒的时间。如果我只运行 1 秒,那么它在循环计数达到 10,000 之前就已经存在。
任何解决方案都会有很大帮助。
使用多个进程跟踪时间的期望解决方案。
【问题讨论】:
标签:
c
while-loop
delay
time-tracking
【解决方案1】:
为了精确测量时间,您需要在系统上运行一些计时器,该计时器使用中断并在 while 循环之外执行。
例如,如果您有一个以 100uS 运行的滴答计时器,它会递增一个名为 tick_counter 的计数器,您可以按以下方式在 while 循环中使用它:
int loopCount = 0;
static int current_tick;
current_tick = tick_counter;
while (1) {
// Some calculations
// loopCount++;
// Check for exit
// Delay based on frequency
if( (tick_counter - current_tick) > 10000)
{
current_tick = tick_counter; // save the current tick time for next check...
// do your calculations here...
}
}
上面的示例是 1 秒延迟的“硬编码”。
您需要根据需要修改它。