1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
发出信号量 若被唤醒的任务是最高优先级则切换到该任务
305 OS_ENTER_CRItiCAL(); //关闭中断 306 if (pevent->OSEventGrp != 0x00) { //有任务在等待信号量,等待事件的任务组=0 307 OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM); //使任务进入就绪态 308 OS_EXIT_CRITICAL(); //打开中断 309 OS_Sched(); //进入调度任务,使就绪态优先级最高任务运行 310 return (OS_NO_ERR); //返回(信号量成功的置位) 311 } 第309行就切换到别的任务了,那么何时能执行第310行?切换到别的任务后,CPU已经跟本任务A没有关系了,如果再有别的什么消息或中断,则不停切换到其它任务了,那么本任务A的第310行啥时才能执行到呢? 特别的,当在中断程序里使用Post时,若切换到别的任务了,那么这个中断不是一直无法结束吗? |
|
相关推荐
5个回答
|
|
|
|
|
|
哦 我明白了 虽然中断服务程序里调用了Post 而Post又调用了OS_Sched 但并不必然发生切换 因为OS_Sched里会检测是否退出中断了 若非则不切换 基础知识不牢啊 一看到OS_Sched就以为必然发生切换 实际它里面有许多条件判断的
|
|
|
|
我看不少例子都在中断里使用Post发送信号量啊 而Post函数里就调用了任务切换函数呀
|
|
|
|
|
|
如果在执行A任务的时候进入了中断执行了必要的操作并Post(通常都是这样,会在中断里面发送信号量或者消息到其他监听的任务),退出中断后内核会对等待信号量或者消息对象进行处理并更新相应标志,如果任务B在等待该信号量或者消息(通常在等待消息或者信号量的任务都会挂起的),那么会将B任务放入就绪列表,然后就启动任务调度,扫描任务就绪列表里面的就绪任务,如果有则调度,没有话还是返回到原任务继续执行
|
|
|
|
只有小组成员才能发言,加入小组>>
793 浏览 0 评论
1152 浏览 1 评论
2528 浏览 5 评论
2861 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2711 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1071浏览 3评论
194浏览 2评论
456浏览 2评论
369浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
454浏览 1评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 21:03 , Processed in 1.158532 second(s), Total 54, Slave 45 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号