完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在学习关于信号量的时候,其中,while(1)中第一句是OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);没有信号量的话就无法执行下面的语句,一直等待,那么是如何切换到有按键扫描的任务中的呢?
这个函数中有void OSSched (void);这个函数是可以进行上下文切换的,并且在OSSemPend中 OSSched是没有在if判断语句中的,也就是说,在这个函数就可以执行上下文切换,那怎么执行下一句的num++;啊 另外,我搜索最高优先级的话是除本任务外的最高优先级吧? |
|
相关推荐
1个回答
|
|
任务1按键释放信号量
任务2 有信号量的话,输出一次 在没有按键没有释放信号的时候,在任务一中任务切换发生在这句OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_HMSM_STRICT,&err); / 任务2 我之前不知道任务切换发生在哪里(如果没有接受到信号量的话) OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); F12进去上面的函数是这个(部分) OS_CRITICAL_ENTER_CPU_CRITICAL_EXIT(); /* Lock the scheduler/re-enable interrupts */ OS_Pend(&pend_data, /* Block task pending on Semaphore */ (OS_PEND_OBJ *)((void *)p_sem), OS_TASK_PEND_ON_SEM, timeout); OS_CRITICAL_EXIT_NO_SCHED(); OSSched(); //我理解这个是进行任务切换的函数 点进去的英文注释是这么说的 我理解的两个任务的切换是,没有信号量释放的时候,先执行任务1,在延时的时候切换到任务2(因为只有两个任务除了任务一之外任务2的优先级最高)任务2 只能执行到信号量等待这一句话,然后就进行了任务切换,到任务1,继续循环 这样的话如果有信号量的话,也会在 OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);的时候进行一次切换了吧 对任务切换不太明白谢谢 |
|
|
|
只有小组成员才能发言,加入小组>>
695 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
655浏览 9评论
651浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
783浏览 6评论
630浏览 5评论
670浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 18:59 , Processed in 1.284961 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号