起因
最近在有一个项目因为任务比较多,就上了freertos,但是在我接收串口数据后,使用xTaskResumeFromISR函数,进入一个更高优先级的任务时,死活进不去。
问题描述
在运行一个优先级为5的任务,这个时候串口有数据传给单片机,进入中断接收数据,并使用xTaskResumeFromISR恢复一个优先级为6的任务,使数据写入内部flash。这个时候,恢复的任务优先级为6,原本在运行的任务优先级为5,应该优先执行优先级为6的任务,但单片机不这么执行。
解决方法
如果函数xTaskResumeFromISR()返回值为pdTRUE,那么说明要恢复的这个任务的任务优先级等于或者高于正在运行的任务(被中断打断的任务),所以在退出中断的时候一定要进行上下文切换!
void USART3_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart3);
BaseType_t YieldRequire
Freertos任务调度问题

本文描述了一个关于FreeRTOS中任务调度的问题,在串口中断后尝试恢复一个较高优先级的任务失败的情况。通过检查xTaskResumeFromISR函数的返回值并正确执行上下文切换解决了该问题。
最低0.47元/天 解锁文章
357

被折叠的 条评论
为什么被折叠?



