时间片轮询架构

//时间片轮询的架构
// 任务结构
typedef struct _TASK_COMPONENTS
{
    uint8 Run;                 // 程序运行标记:0-不运行,1运行
    uint8 Timer;                // 计时器
    uint8 ItvTime;              // 任务运行间隔时间     用于初始化定时器的时间
    void (*TaskHook)(void);    // 要运行的任务函数      用于传入执行的函数
} TASK_COMPONENTS;       // 任务定义

//任务标志处理函数  将此函数放置于定时器的服务中断中
void TaskRemarks(void)
{
    uint8 i;

    for (i=0; i<TASKS_MAX; i++)          // 逐个任务时间处理
    {
         if (TaskComps[i].Timer)          // 时间不为0
        {
            TaskComps[i].Timer--;         // 减去一个节拍
            if (TaskComps[i].Timer == 0)       // 时间减完了
            {
                 TaskComps[i].Timer = TaskComps[i].ItvTime;       // 恢复计时器值,从新下一次
                 TaskComps[i].Run = 1;           // 任务可以运行
            }
        }
   }
}
//通过这个函数来判断 任务的执行情况

//任务处理函数  用于处理达到标志位的函数  放在main函数里面 
void TaskProcess(void)
{
    uint8 i;

    for (i=0; i<TASKS_MAX; i++)             // 逐个任务时间处理
    {
         if (TaskComps[i].Run)              // 时间不为0
        {
             TaskComps[i].TaskHook();       // 运行任务   运行的函数
             TaskComps[i].Run = 0;          // 标志清0
        }
    }   
}

//  注意 初始化的顺序代表着具体执行时间的优先级关系  
//  如果有某一块的程序反应慢了 可以改变定时器的设定值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值