打印

[uCOS/RTOS] uCOS II 任务切换及中断的问题

[复制链接]
1019|11
跳转到指定楼层
楼主
刚开始学μC  看了一下午有点蒙,问大家一个问题。
系统有两个任务为A和任务B,任务A优先级高于任务B优先级。当系统任务A挂起之后,就会进入任务B执行,在这个时候来了一个中断,当中断还没有执行完成的时候,A就准备就绪, 问,如果跳出中断之后,会继续执行B任务还是会去直接执行A任务?

使用特权

评论回复
沙发
| 2019-6-7 22:25 | 只看该作者
A

使用特权

评论回复
板凳
 楼主 | 2019-6-7 23:03 | 只看该作者

合着就是中断里面也有任务调度函数呗

使用特权

评论回复
地板
| 2019-6-9 07:44 | 只看该作者
A 已就绪,  这个状态会让 OS 调度系统切换任务, 跟中断无关

使用特权

评论回复
5
 楼主 | 2019-6-9 10:03 | 只看该作者
airwill 发表于 2019-6-9 07:44
A 已就绪,  这个状态会让 OS 调度系统切换任务, 跟中断无关

好的好的  谢谢

使用特权

评论回复
6
| 2019-6-10 13:43 | 只看该作者
每时每刻主要有更高优先级的任务就绪,并且调度器未上锁(能进行任务调度),那么就会执行优先级更高的任务

使用特权

评论回复
7
| 2019-6-10 14:04 | 只看该作者
会重新调度。

使用特权

评论回复
8
| 2019-6-10 16:58 | 只看该作者
楼主你可以这么理解,A任务就绪是有条件的,比如说休眠时间到了,或者有信号量触发,或者A在等待队列消息时超时或者有消息来了等等,系统内核会执行一次调度,确保把高优先级任务在中断返回时被执行,你在中断里面A任务就绪了,说明有就绪条件达成了(中断函数里面有唤醒A任务的操作),所以中断出来就会执行A。

使用特权

评论回复
9
 楼主 | 2019-6-10 19:44 | 只看该作者
caijie001 发表于 2019-6-10 13:43
每时每刻主要有更高优先级的任务就绪,并且调度器未上锁(能进行任务调度),那么就会执行优先级更高的任务 ...

明白了  谢谢

使用特权

评论回复
10
 楼主 | 2019-6-10 19:44 | 只看该作者
5992230 发表于 2019-6-10 16:58
楼主你可以这么理解,A任务就绪是有条件的,比如说休眠时间到了,或者有信号量触发,或者A在等待队列消息时 ...

OK 明白了  感谢

使用特权

评论回复
11
 楼主 | 2019-6-10 19:44 | 只看该作者

明白了  谢谢

使用特权

评论回复
12
| 2019-6-10 21:06 | 只看该作者
A不会莫名其妙的就绪,一定是有原因的,就是两个原因,1)发生了systick时间发现A时间到了,2)中断post一个event,而A正在挂起在这个event上面。

ucosii任务调度函数就两个,OSSched()是由systick调用的,OSIntExit()是中断函数最后要调用的。写的比较正规的代码,楼上各位的答复都是正确的,但是不正规的代码,比如中断函数最后没有OSIntExit,看上去还是能正常运转的,但是中断退出后显然还是会去执行B而不会执行A。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /6 下一条

在线客服 快速回复 返回顶部 返回列表
全民彩票