About Bare Metal Multitasking

// 任务结构
typedef struct _TASK_COMPONENTS
{
     uint8 Run;        // 程序运行标记:0-不运行,1运行
     uint8 Timer;       // 计时器
     uint8 ItvTime;      // 任务运行间隔时间
     void (*TaskHook)( void );  // 要运行的任务函数
} TASK_COMPONENTS;        // 任务定义
 
 
// timer interrupt function
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;           // 任务可以运行
             }
         }
    }
}
 
/**************************************************************************************
* FunctionName   : TaskProcess()
* Description    : 任务处理
* EntryParameter : None
* ReturnValue    : None
**************************************************************************************/
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
         }
     }  
}
 
 
 
static TASK_COMPONENTS TaskComps[] =
{
     {0, 60, 60, TaskDisplayClock},            // 显示时钟
     {0, 20, 20, TaskKeySan},               // 按键扫描
     {0, 30, 30, TaskDispStatus},            // 显示工作状态
      // 这里添加你的任务。。。。
};
 
 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325471722&siteId=291194637