[MM32硬件] 在中断服务程序中调用会导致任务切换的 FreeRTOS API 函数可能会引发问题

[复制链接]
2253|12
 楼主| lxs0026 发表于 2024-5-30 14:18 | 显示全部楼层 |阅读模式
在中断服务程序中不应该调用可能引起任务切换的 FreeRTOS API 函数,因为中断服务程序结束后,上下文切换必须在任务级别发生。

这是因为在中断服务程序中调用会导致任务切换的 FreeRTOS API 函数可能会引发问题。因为中断服务程序执行完毕后,系统必须回到任务级别的上下文,并且只有任务调度器能够决定下一个要运行的任务。如果在中断服务程序中调用了这些会导致任务切换的 API 函数,那么系统会试图在中断服务程序的上下文中进行任务切换,这可能导致不可预测的结果,例如任务调度器数据结构损坏、死锁等问题。

为了确保系统的稳定性和可靠性,应该遵循以下原则:

在中断服务程序中尽量避免调用 FreeRTOS API 函数,尤其是可能引起任务切换的函数。

如果确实需要在中断服务程序中与任务进行通信或同步操作,应该使用专门为中断上下文设计的 FromISR 版本的 API 函数,如 xSemaphoreGiveFromISR()、xQueueSendFromISR() 等。

在任务级别中处理复杂的逻辑和任务切换,以确保系统的稳定性和可靠性。

通过遵循这些原则,可以确保系统在中断服务程序和任务之间进行正确的协作,并提高系统的性能和可维护性。

小小蚂蚁举千斤 发表于 2024-5-31 22:05 | 显示全部楼层
中断服务程序结束后,上下文切换必须在任务级别切换
ClarkLLOTP 发表于 2024-6-3 17:36 来自手机 | 显示全部楼层
是不能在裸机中断里调用吗
p0gon9y 发表于 2024-11-10 22:38 | 显示全部楼层
在中断服务程序(ISR)中调用会导致任务切换的 FreeRTOS API 函数确实可能会引发问题。FreeRTOS 提供了一些特定的 API 函数,可以在中断服务程序中安全地使用,但并非所有 API 函数都适合在中断上下文中调用。

zhizia4f 发表于 2024-11-11 21:11 | 显示全部楼层
中断服务程序通常具有较高的优先级,可以打断正在执行的任务。

w2nme1ai7 发表于 2024-11-13 14:11 | 显示全部楼层
FreeRTOS API 函数可以分为两类:这些函数只能在任务上下文中调用,不能在中断服务程序中调用。中断安全函数:这些函数可以在中断服务程序中安全地调用。

tax2r6c 发表于 2024-11-14 21:21 | 显示全部楼层
任务通知函数,队列函数,信号量函数,事件组函数,中断安全函数确实要是调用不好会出现问题

t1ngus4 发表于 2024-11-15 20:11 | 显示全部楼层
避免在中断服务程序中调用可能导致任务切换的 API 函数:这些函数可能会导致任务切换,从而引发不可预知的行为。

ex7s4 发表于 2024-11-16 07:47 | 显示全部楼层
使用中断安全函数:如果需要在中断服务程序中进行任务间通信或同步操作,应使用中断安全函数。

lix1yr 发表于 2024-11-16 08:48 | 显示全部楼层
最小化中断服务程序的执行时间:中断服务程序应尽可能快地执行,以减少对系统响应时间的影响。

d1ng2x 发表于 2024-11-16 09:11 | 显示全部楼层
在中断服务程序中调用可能导致任务切换的 FreeRTOS API 函数可能会引发问题。

lamanius 发表于 2024-11-16 10:44 | 显示全部楼层
为了避免这些问题,应避免在中断服务程序中调用这些函数,并使用中断安全函数进行任务间通信和同步操作。通过遵循这些建议,可以确保系统的稳定性和可靠性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

1290

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部