#ifndef __LH_TASKMANAGER_H__ #define __LH_TASKMANAGER_H__ /* 文件说明:任务管理器源文件 作者: LiuHao 更新日期:2020年3月27日 模块功能:主要解决MCU裸机运行时,多任务管理,使程序能够很好的模块化设计,便于后期维护。 实现思想:参考了FreeROTOS操作系统时间片调度算法实现 */ #include "system.h" #define TaskNumber 10 //定义任务数量 #define ENABLED_INTERRUPT__ __enable_irq();//开启全局中断 #define DISABLE_INTERRUPT__ __disable_irq(); //关闭全局中断 struct LiuHaoTaskStruct ; typedef struct LiuHaoTaskStruct TaskList_Items; typedef TaskList_Items *LH_TaskList; struct LiuHaoTaskStruct { int Task_ID; int Task_Time; int (*_Fun)(void); LH_TaskList LIst_Next;//指向下一个列表项 }; void TaskManager_Init(void); // 初始化任务管理器 void TaskManager_Scheduling(void) ; // 任务调度管理器 放到定时器中断里面 滴答计数 进行调度 void TaskManager_Run(void) ; // 任务执行器 放到主函数执行任务函数 void Add_WaitList(LH_TaskList LHpStack) ; // 进入等待态 添加待执行的任务 void Add_TimingList(LH_TaskList LHpStack) ; // 添加任务到定时区 void Add_SuspendList(LH_TaskList LHpStack) ; // 进入挂起态 添加任务到挂起列表 /*********************************************************************** 创建任务函数,将某个函数作为任务,可以完成定时调用等功能 参数:Task_ID:任务Task_ID,不能重复,否侧将创建失败 _Fun: 用户任务函数名 time: 创建后,延时time * 系统滴答时间 后执行 _Fun函数 ,如果是0,则暂时不执行,由Start_Tasks函数启动 ***********************************************************************/ char UserTask_Create(char id,int (*_Fun)(void),int time); // 用户创建普通任务 /*********************************************************************** 创建定时函数,延时time * 系统滴答时间 后,执行该函数*** 系统滴答时间一般由定时器定时一个10ms _Fun: 用户定时器任务函数名 time: 创建后,延时time * 系统滴答时间 后执行 _Fun函数 ***********************************************************************/ char UserTimerTask_Create(int (*_Fun)(void),int time); // 创建定时器任务 /*********************************************************************** 让某个任务开始执行*** id: 任务id time: 启动后,延时time * 系统滴答时间 后执行,如果为0,立刻执行 ***********************************************************************/ char Start_Tasks(char id,int time); // 启动(挂起)任务 // 停止一个任务 char Stop_Tasks(char id) ; // 将执行任务挂起(停止) // 删除任务 char Delete_Tasks(char id) ; // 删除任务 #endif