jerry2cool 发表于 2020-1-29 10:12:18

新手求助,FreeRTOS里在中断中挂起任务出错

各位大佬,新手刚学习FreeRTOS,现在想在中断中挂起某个任务,我在教程里看到说有中断中的恢复函数xTaskResumeFromISR,但是没有在中断中的挂起函数,我搜了一下,有人说直接用vTaskSuspend就行,我在中断中就直接用了,结果确实不行,停在了下图中的位置,请问一下,vTaskSuspend确实不能在中断中用么?那如果我想在中断中挂起某个任务,应该怎么操作呢?多谢。。。。


hejun96 发表于 2020-1-31 12:45:26

vTaskSuspendAll()
   将调度器锁定,可执行嵌套的挂起任务调度器。任务调度器挂起后不能进行上下文的切换,但是中断仍然使能,当调度器被挂起后,如果有中断需要进行上下文切换,那么中断将会被挂起,在调度器恢复后才响应这个中断。调度器恢复可以调用 xTaskResumeAll()函数,调用了多少次的 vTaskSuspendAll()就要调用多少次xTaskResumeAll()进行恢复
void vTaskSuspendAll( void )
{
    ++uxSchedulerSuspended;
}

uxSchedulerSuspended 用于记录调度器是否被挂起,该变量默认初始值为 pdFALSE,表明调度器是没被挂起的,每调用一次vTaskSuspendAll()函数就将变量加一,用于记录调用了多少次 vTaskSuspendAll()函数

jerry2cool 发表于 2020-2-3 09:44:01

hejun96 发表于 2020-1-31 12:45
vTaskSuspendAll()
   将调度器锁定,可执行嵌套的挂起任务调度器。任务调度器挂起后不能进行上下文的切换 ...

非常感谢。。。。。
页: [1]
查看完整版本: 新手求助,FreeRTOS里在中断中挂起任务出错