完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题1:在UCOSIII的例10-1直接访问共享例程当中,当“任务1”,“任务2”,和第一个”second task Running“字符串输出到串口助手之后,我可以理解为,下一步是通过task1_task中的OStimeDlyHMSM函数进行的任务切换至task2_task中,才输出的第二个”second task Running“字符串的吗?之后再通过task2_task中的OSTimeDlyHMSM函数切换至task1_task中又重新开始的吗?如果不是,请问是如何进行任务1和2之间的切换的?
问题2:请问例10-2中,加入信号量之后的task1和task2的任务是如何切换的,因为当任务一使用OSSemPend的时候,信号量减一,但是delay_ms是有任务切换的,此时切换到任务2,但是任务2中OSSemPend中请求的信号量此时为0,而且其参数OS_OPT_PEND_BLOCKING为阻塞型,任务也无法向下进行了,此时任务2无法进行,也切换不到任务1,那程序下面是如何运行的? 希望各位大神能够帮助解答,非常感谢。 |
|
相关推荐
4个回答
|
|
OS在这各种情况下,为了仿止你说的卡住的情况, 会让获得信号量的任务优先级自动提升到最高优先级, 以最快最优先的状态运行获得信号量的任务, 然后当任务释放信号量后, 自动改为原先设置的优先级, 这就是OS的仿锁死处理方法!
|
|
|
|
任务切换发生在延时和高优先级任务的抢占。
|
|
|
|
非常感谢,但是还是有一块没有懂。
我知道延时的时候进行了任务切换,但是比如例10-2中,由于task1中调用delay_ms延时函数切换到task2时的信号量为0,而由于task2中的OSSemPend的opt参数为OS_OPT_PEND_BLOCKING,我理解这个是堵塞型的,就是信号量如果一直为0,它就继续等待信号量,堵塞当前任务,既然此时任务被堵塞了,那么task2不就卡在这里了吗,也运行不到task2中的延时函数delay_ms来进行切换到任务1啊,那么这里是怎么切换到任务1的。难道是假如任务2堵塞了,task1由于优先级较高来抢占了? 非常感谢。 |
|
|
|
好的,我明白了,非常感谢你,也谢谢原子哥。
|
|
|
|
只有小组成员才能发言,加入小组>>
651 浏览 0 评论
1081 浏览 1 评论
2451 浏览 5 评论
2776 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2612 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
634浏览 9评论
630浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
760浏览 6评论
606浏览 5评论
650浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 23:21 , Processed in 1.283404 second(s), Total 85, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号