野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4565|回复: 0

[freertos] 函数xQueueSendFromISR为什么要检查一下任务优先级?

[复制链接]
发表于 2021-2-27 09:01:46 | 显示全部楼层 |阅读模式
本帖最后由 snakeemail 于 2021-2-27 09:03 编辑


问题背景:函数xQueueSendFromISR会检查一下队列,如果有优先级更高的任务,就将pxHigherPriorityTaskWoken置为真,如果pxHigherPriorityTaskWoken为真,在中断中做上下文切换,退出中断后会切到高优先级的任务。


:函数xQueueSendFromISR为什么非要检查一下任务优先级?


我的想法,内核认为,既然用户调用了函数xQueueSendFromISR,那么肯定有另外一个任务task_Recieve,可能正在阻塞(很可能是高优先级任务),等待队列发过来数据。
因为中断的消息是紧急消息,需要立即处理,所以函数xQueueSendFromISR得到高优先级任务标志pxHigherPriorityTaskWoken,在中断中切上下文,退出中断后,程序就跑到高优先级任务task_Recieve了。


BaseType_t xQueueSendFromISR(QueueHandle_t xQueue,    const void *pvItemToQueue,  BaseType_t *pxHigherPriorityTaskWoken );



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-6 23:39 , Processed in 0.034257 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表