FreeRtos从IRQ调用vTaskDelete

时间:2019-01-11 08:50:53

标签: task freertos irq

我花了一些时间,但是如果允许从IRQ处理程序调用vTaskDelete,我找不到任何信息?我知道某些方法具有IRQ例程中使用的专门版本,但是我找不到与vTaskDelete相关的任何内容。目前它可以正常工作,但是我不想因为我没有找到信息而花些力气。

2 个答案:

答案 0 :(得分:1)

如果要从IRQ调用回调,则该回调仍在IRQ上下文中。使用NULL参数调用vTaskDelete()会删除进入中断之前正在运行的任务,因此中断将尝试返回到不再运行的任务。即使不是这种情况,经验法则是不要使用不以中断“ FromISR”结尾的API函数(单独的API确保该函数中的决策点更少,更快和标准的中断输入,因为它不会)无需保留中断嵌套变量,无需将在中断上下文中没有意义的参数(例如块时间)传递到中断函数中,等等。

答案 1 :(得分:0)

我假定您不使用NULL参数调用vTaskDelete,因为在中断上下文中没有当前任务。无论如何,都不应该从中断上下文中调用vTaskDelete()。例如,其实现将调用vPortFree()释放任务的TCB。