在中断服务程序中不应该调用可能引起任务切换的 FreeRTOS API 函数,因为中断服务程序结束后,上下文切换必须在任务级别发生。
这是因为在中断服务程序中调用会导致任务切换的 FreeRTOS API 函数可能会引发问题。因为中断服务程序执行完毕后,系统必须回到任务级别的上下文,并且只有任务调度器能够决定下一个要运行的任务。如果在中断服务程序中调用了这些会导致任务切换的 API 函数,那么系统会试图在中断服务程序的上下文中进行任务切换,这可能导致不可预测的结果,例如任务调度器数据结构损坏、死锁等问题。
为了确保系统的稳定性和可靠性,应该遵循以下原则:
在中断服务程序中尽量避免调用 FreeRTOS API 函数,尤其是可能引起任务切换的函数。
如果确实需要在中断服务程序中与任务进行通信或同步操作,应该使用专门为中断上下文设计的 FromISR 版本的 API 函数,如 xSemaphoreGiveFromISR()、xQueueSendFromISR() 等。
在任务级别中处理复杂的逻辑和任务切换,以确保系统的稳定性和可靠性。
通过遵循这些原则,可以确保系统在中断服务程序和任务之间进行正确的协作,并提高系统的性能和可维护性。
|