问题描述
我有一个运行FreeRTOS的嵌入式项目,我想在其本地计算机上运行部件。为此,我使用了基于Posix线程构建的FreeRTOS模拟器。 FreeRTOS内部依赖于每毫秒(或其他可配置间隔)调用滴答处理程序的中断。模拟器使用itimers(setitimer)以规则的时间间隔生成信号,并使用信号处理程序将处理程序附加到信号上。但是后来我意识到,滴答处理程序的调用时间远远少于每毫秒。在一次又一次地简化程序之后,我意识到即使是这段代码
std::thread t([]() {
int i = 0;
while (true) {
std::this_thread::sleep_for(std::chrono::microseconds(1000));
if ((i++ % 100) == 0)
printf("tick\n");
}
});
t.detach();
while(true) {}
打印刻度比您期望的要少得多。 我知道睡眠功能通常不能保证在间隔时间过后就醒来,而大量的开销会导致睡眠时间缩短而引人注意的延迟。 我正在寻找一种实用的解决方案,以令人满意的精度模拟RTOS的操纵杆计时器。
顺便说一句,我的平台是Windows 10上的Cygwin。可能是在Linux发行版上的itimer实现更好。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)