我有两个任务,T1 和 T2。我想通过调用 ISR 在这两者之间切换,但是,T1 和 T2 都有自己的私有
vTaskDelay
。当代码中有延迟时如何让它们运行得更流畅?
void T1(void){
while(1){
if (tsk == 1) {
/// doSth
vTaskDelay(2000) // 2seconds
// doSth
}
}
}
void T2(void){
while(1){
if (tsk == 2) {
/// doSth
vTaskDelay(1000) // 1seconds
// doSth
}
}
}
void ISR(){
if (READGPIO){
// change tsk between 1 and 2
}
}
我尝试将
vTaskDelay
分成这样的小块
for (int i = 0; i < 200; i++) {
vTaskDelay(10);
if (tsk == 1) break;;
}
但是,它对平滑度没有帮助,除了
如果您在开始使用 RTOS 编程之前了解更多有关任务间通信原语的知识,将会有所帮助。
例如使用任务通知,并从 ISR 向特定任务发出通知。