打印
[uCOS/RTOS]

关于系统节拍和系统中断的问题不太明白???

[复制链接]
1422|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
we167527|  楼主 | 2016-11-3 13:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
446252221| | 2016-11-3 14:43 | 只看该作者
ARM Cortex-M是可以利用PendSV来进行任务切换的。
任务内延时就是利用定时器中断了,给每个要延时的任务设定延时计数,计数时间到了,就进行任务切换。
你可以看看单片机操作系统的源码。
这是我的帖子:
https://bbs.21ic.com/icview-1639890-1-1.html

使用特权

评论回复
板凳
woshixinshou| | 2016-11-3 17:33 | 只看该作者
任务切换分为两种,一是任务级的切换,而是中断级的切换;
1,任务级的切换是利用OSTimeDly()函数进行,这个函数首先给本任务赋予一个延时的节拍数,即是将本任务挂起多少个节拍,然后调用OS_Sched()进行任务切换,任务切换首先看是否有已经就绪的任务,如果没有,则运行空闲任务OS_TaskIdle();
2、此时,时钟节拍中断函数,将会调用OSTimeTick()对每个任务的延时节拍进行自减,若有自减为0的任务,则将该任务就绪,也有多个就绪的可能,然后在时钟节拍中断函数退出之前,调用OSIntExit()对就绪的最高优先级的任务进行堆栈弹出,中断退出后即是最高级的任务在运行;
3,除时钟节拍中断函数,在普通用户的自定义中断里面,也是可以调用OSIntExit()进行任务切换,此时的切换,主要是一些因信号量、邮箱等挂起的任务,在此中断里,可以对那些挂起的任务进行信号量邮箱的消息的发送,以致于在调用OSIntExit()时更新高优先级任务就绪状态并运行。

使用特权

评论回复
地板
we167527|  楼主 | 2016-11-9 09:10 | 只看该作者
446252221 发表于 2016-11-3 14:43
ARM Cortex-M是可以利用PendSV来进行任务切换的。
任务内延时就是利用定时器中断了,给每个要延时的任务设 ...

谢谢!

使用特权

评论回复
5
we167527|  楼主 | 2016-11-9 09:11 | 只看该作者
woshixinshou 发表于 2016-11-3 17:33
任务切换分为两种,一是任务级的切换,而是中断级的切换;
1,任务级的切换是利用OSTimeDly()函数进行,这 ...

谢谢!

使用特权

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

本版积分规则

54

主题

294

帖子

6

粉丝