打印

多任务系统的时间管理怎么实现的?

[复制链接]
781|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
peace555|  楼主 | 2015-8-26 09:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
多任务系统的时间管理怎么实现的?
沙发
zb0830| | 2015-8-26 09:07 | 只看该作者
与人一样,多任务系统也需要一个“心跳” 来维持其正常运行, 这个心跳叫做时钟节拍 ,通常由 定时器产生一个固 定周 期的中断来充当 , 频率一般为 50-100Hz。 在TargetInit.c 文件中有下面的定时器 0 初始化函数, T0 用作系统心跳计时, 产生时钟节拍。

使用特权

评论回复
板凳
zb0830| | 2015-8-26 09:07 | 只看该作者
OSTimeDly 函数就是以时钟节拍为基准来延时的。 这个函数完成功能很简单, 就是先挂起当起当前任务, 设定其延时节拍数,然后进行任务切换, 在指定的时钟节拍数到来之后, 将当前任务恢复为就绪状态。 任务必须通过 OSTimeDly 或 OSTaskSuspend 让出 CPU的使用权, 使更低优先级任务有机会运行。

使用特权

评论回复
地板
zb0830| | 2015-8-26 09:07 | 只看该作者
在 T0 的中断服务函数中, 依次对各个延时任务的延时节拍数减 1。 若发现某个任务的延时节拍数变为 0, 则把它从挂起态置为就绪态。

使用特权

评论回复
5
波越| | 2015-8-26 09:47 | 只看该作者
系统自身创建了一个空闲任务, 并设它为最低优先级, 当系统没有任何任务就绪时,则运行这个任务, 让 CPU“有事可干”。用户程序可以在这个任务中加入一些“无关紧要”的功能, 如统计 CPU 使用率等。

使用特权

评论回复
6
波越| | 2015-8-26 09:47 | 只看该作者
不要在空闲任务中运行有可能使任务挂起的函数。 空闲任务应该一直处于就绪状态。

使用特权

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

本版积分规则

89

主题

620

帖子

2

粉丝