完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
void PackUpdateRegular_task(void *pvParameters) 任务优先级最高
{ while(1) { err=xSemaphoreTake(RegHeartSemaphore,portMAX_DELAY); //获取信号量 if( err==pdTRUE) { .......... } } } void 任务1 // 任务优先级低 { while(1) { ...... } } void 任务2 // 任务优先级低 { while(1) { ...... } } void 某个中断 { xSemaphoreGiveFromISR(RegHeartSemaphore,&xHigherPriorityTaskWoken); //释放二值信号量 } 大神 请教下这样处理 ,PackUpdateRegular_task里面一直在获取二值信号量,是不是获取第一次 信号量无效的时候 就进入堵塞态的,然后就去执行低优先级的任务,PackUpdateRegular_task阻塞态没有结束,不会去频繁查询二值信号量,只有当中断里面释放了 二值信号量 才会再下次任务调度后 去执行PackUpdateRegular_task 里面的内容,。。。。。。。。。。。。。。。。还是每次任务调度后 都去判断下任务优先级高的PackUpdateRegular_task的二值信号量的状态 |
|
相关推荐
6个回答
|
|
|
任务阻塞以后会把任务放到对应等待的信号量的等待列表里面,这样信号量更新的时候会查询等待该信号量的任务,并将对应的任务移到就绪列表中,下一次时钟节拍来的时候会将最高优先级的任务运行
|
|
|
|
|
|
|
|
|
自己再顶下,我自己理解和实验的结果是, PackUpdateRegular_task获取一次 信号量无效的时候 就进入堵塞态,直到中断释放了信号量 这个任务才到就绪态,等待下次任务切换。
|
|
|
|
|
|
讲清这个问题最好结合代码。把源码拉出来
|
|
|
|
|
|
也可能是恢复调度器的时候做任务切换?
|
|
|
|
|
|
4楼正解!
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1018 浏览 1 评论
1849 浏览 0 评论
1830 浏览 1 评论
3254 浏览 5 评论
3581 浏览 9 评论
1021浏览 1评论
1850浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1360浏览 1评论
1852浏览 0评论
1178浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 03:16 , Processed in 2.743480 second(s), Total 84, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1535