打印
[ZLG-ARM]

请教:UCOS的任务调度

[复制链接]
1441|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
id001|  楼主 | 2008-3-2 23:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
任务级的任务切换,函数的结构如下:
void OSSched(void){

关中断                  //!!!这里关闭了中断!!!

如果(不是中断嵌套并且系统可以被调度){

   确定优先级最高的任务

   如果(最高级的任务不是当前的任务){

          调用OSCtxSw(); //!!如在这里切换到一个高优先级的任务,系统的中断不是被关闭了吗?

   }

}

开中断

}
==========================
请教的问题是:如调用OSCtxSw()函数时发生了任务切换,程序切换到另一个TASK任务中运行,也也就说在另外一个任务中运行时的 总中断 是被关闭的???

相关帖子

沙发
id001|  楼主 | 2008-3-3 08:52 | 只看该作者

困扰好几天了!!

使用特权

评论回复
板凳
dld2| | 2008-3-3 09:13 | 只看该作者

俺对ucos第一不感冒的地方,就是它总是喜欢关中断

就楼主的问题:
任务切换时,会将当前任务的CPSR入栈,会把目标任务的CPSR出栈。
给CPSR赋值,也就给中断控制位赋值了。

使用特权

评论回复
地板
heuyck| | 2008-3-3 09:30 | 只看该作者

当任务切换时

新任务的CPSR的中断允许位如果是开
就会重新开启中断
当初就弄得一头雾水
各种信号量什么的也都涉及到任务切换
也就是会改变中断 en/disable

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

107

帖子

0

粉丝