stm32 FreeRTOS 中断无法像我想象的那样顺利运行

问题描述 投票:0回答:1

我有两个任务,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;;
            }

但是,它对平滑度没有帮助,除了

synchronization embedded task interrupt freertos
1个回答
0
投票

如果您在开始使用 RTOS 编程之前了解更多有关任务间通信原语的知识,将会有所帮助。

例如使用任务通知,并从 ISR 向特定任务发出通知。

© www.soinside.com 2019 - 2024. All rights reserved.