完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
//开始任务void start_task(void *pdata){ OS_CPU_SR cpu_sr=0;u8 err; pdata = pdata; msg_key=OSMboxCreate((void*)0);//创建消息邮箱q_msg=OSQCreate(&MsgGrp[0],256);//创建消息队列 flags_key=OSFlagCreate(0,&err); //创建信号量集 OSStatinit();//初始化统计任务.这里会延时1秒钟左右 OS_ENTER_CRITICAL();//进入临界区(无法被中断打断) OSTaskCreate(led_task,(void *)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO); OSTaskCreate(touch_task,(void *)0,(OS_STK*)&TOUCH_TASK_STK[TOUCH_STK_SIZE-1],TOUCH_TASK_PRIO); OSTaskCreate(qmsgshow_task,(void *)0,(OS_STK*)&QMSGSHOW_TASK_STK[QMSGSHOW_STK_SIZE-1],QMSGSHOW_TASK_PRIO); OSTaskCreate(main_task,(void *)0,(OS_STK*)&MAIN_TASK_STK[MAIN_STK_SIZE-1],MAIN_TASK_PRIO); OSTaskCreate(flags_task,(void *)0,(OS_STK*)&FLAGS_TASK_STK[FLAGS_STK_SIZE-1],FLAGS_TASK_PRIO); OSTaskCreate(key_task,(void *)0,(OS_STK*)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO); OSTaskSuspend(START_TASK_PRIO);//挂起起始任务.OS_EXIT_CRITICAL();//退出临界区(可以被中断打断)}
临界区内中断一直关闭,这时候suspend自身,任务被调度走,感觉最后一句 OS_EXIT_CRITICAL(); 应该没机会执行到啊,中断始终处于关闭状态,是这样吗? |
|
相关推荐
6个回答
|
|
会执行的.
|
|
|
|
我曾经也有你这样的疑问,后来做个实验确实是会执行的。
|
|
|
|
哦 仔细想了想 懂了
这个case 因为schedule并不是像linux那样做一个真正的调度,而仅仅是激活一个中断,由于中断在临界区内是关的,所以无法立即执行,那么sched会继续向下执行, 到出临界区打开中断,再执行真正的调度。 一开始没想明白是忘了这个schedule和linux的不一样。。。 但个人不喜欢这种方式,逻辑上就很不顺。。。 |
|
|
|
我认为你的解释不对 sched确实不直接调度 而是要判断好多条件 但也不是激活中断 至于你的主帖问题 我也没想明白如何继续执行下去
我也曾被sched纠结过 也觉得逻辑不是很顺 名为“切换” 实际是“满足某些条件才切换” |
|
|
|
我弄清除了 3楼说对了 SCHED确实激活了一个中断 系统的切换是依靠被激活的这个中断才能实现的 但由于之前关闭中断了 所以无法切换 只能继续执行到开中断 然后立即切换
|
|
|
|
这个问题很深入啊,我倒感觉最后那句话没有执行,调用Sched本身就有开放中断了,而任务切换一般是靠软中断触发,当执行完Sched后因为中断已经开放,所以立刻执行切换操作。而楼主的最后一句OS_EXIT_CRITICAL();执行与否其实对系统没有任何影响
|
|
|
|
只有小组成员才能发言,加入小组>>
705 浏览 0 评论
1114 浏览 1 评论
2491 浏览 5 评论
2826 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2671 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
659浏览 9评论
667浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
789浏览 6评论
634浏览 5评论
678浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 12:58 , Processed in 1.034074 second(s), Total 90, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号