【发布时间】:2014-04-26 14:59:56
【问题描述】:
我目前遇到一个问题,其中涉及使用任务调度程序的程序和使用延迟的任务。
一个任务正在运行以下代码:
// Some function
delay(_speedVar);
// Some function
delay(_speedVar);
// End of task.
因为我还有另一个任务,只是从 UART 轮询信息,所以设置 _speedVar 的值。
// Uart task
if(Serial.available())
{
_speedVar = Serial.read();
}
// End of task
我的问题是,如果 speedVar 设置为一个高值,比如 10 秒,那么执行某些功能且延迟为 (_speedVar) 的任务需要以某种方式中断,并使用新的 _speedVar 值重新开始.
我使用的任务计划程序实际上没有灵活性。它只允许我创建和销毁任务。我还没有找到一个有更多功能并且可能有效的,所以我现在坚持使用这个
解决方案的唯一想法是使用中断,但我不确定在使用任务调度程序时如何正确实现这一点。
所有编程都是使用 Arduino 的 Sketch 工具在 C++ 中完成的。编程单元是一个 Arduino Uno。
【问题讨论】:
-
您说的是 C/C++,但只标记了 C - C 或 C++ - 它不能同时是两者。
-
带有下划线前缀的严格符号保留供编译器及其标准库实现使用。
-
使用可信的多任务操作系统并停止轮询。
-
抱歉没有说明清楚。我对 c/c++ 的意思是在 Arduino 的嵌入式 C 程序中实现 C++ 类。对于操作系统,我一直使用meatandnetworking.com/code/… 来安排任务。我所希望的是一些功能,就像你在 FreeRTOS 中所拥有的一样,带有 taskPause 功能。基本上将任务置于阻塞状态 x ms,然后将其移回就绪队列。
标签: c++ arduino embedded interrupt scheduler