迅维网

查看: 790|回复: 0
打印 上一主题 下一主题

时间调度的架构

[复制链接]
跳转到指定楼层
1#
发表于 2016-3-8 14:06:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 山东青岛 来自 山东青岛

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
1.设计一个结构体:
代码:
// 任务结构
typedef struct _TASK_COMPONENTS
{
    uint8 Run;                 // 程序运行标记:0-不运行,1运行
    uint8 Timer;              // 计时器
    uint8 ItvTime;              // 任务运行间隔时间
    void (*TaskHook)(void);    // 要运行的任务函数
} TASK_COMPONENTS;       // 任务定义
这个结构体的设计非常重要,一个用4个参数,注释说的非常详细,这里不在描述。
2. 任务运行标志出来,此函数就相当于中断服务函数,需要在定时器的中断服务函数中调用此函数每隔TaskComps.Timer时间执行一次对应的函数。这里独立出来,并于移植和理解。
代码:
void TaskRemarks(void)
{
    uint8 i;
    for (i=0; i逐个任务时间处理
    {
         if (TaskComps.Timer)          // 时间不为0
        {
            TaskComps.Timer--;         // 减去一个节拍
            if (TaskComps.Timer == 0)       // 时间减完了
            {
                 TaskComps.Timer = TaskComps.ItvTime;       // 恢复计时器值,重新开始计时
                 TaskComps.Run = 1;           // 任务可以运行
            }
        }
   }
}
大家认真对比一下次函数,和上面定时复用的函数是不是一样的呢?
3. 任务处理
代码:
void TaskProcess(void)
{
    uint8 i;
    for (i=0; i逐个任务时间处理
    {
         if (TaskComps.Run)           // 时间不为0
        {
             TaskComps.TaskHook();         // 运行任务
             TaskComps.Run = 0;          // 标志清0
        }
    }  
}
此函数就是判断什么时候该执行那一个任务了,实现任务的管理操作,应用者只需要在main()函数中调用此函数就可以了,
并不需要去分别调用和处理任务函数。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
到此,一个时间片轮询应用程序的架构就建好了,
简单吧?此架构只需要两个函数,一个结构体


您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复