Event Handler

一种基于队列的调度器的实现

混江龙づ霸主 提交于 2019-11-28 16:32:54
一种基于队列的调度器的实现 软件开发中,经常会遇到下边几种情况;中断中处理部分任务,后续耗时操作需要转移到中断外执行,否则导致中断不能及时响应后续任务;回调函数中处理部分任务,然后由其他模块处理其他任务。在有OS支持时,可通过信号量、事件、消息队列等方法去实现。在无OS支持时,常见的方法有通过设置状态标志、由主循环的任务去接着执行,这种方法在基于状态机的框架比较常见,缺点也是显而易见的,代码可读性较差,中断中设置了一堆状态,然后再去找相关的状态机后续操作,有时候跳转几次就晕了,后续业务逻辑变化,升级也比较困难。 本文提出一种基于队列的调度器,分割前后台任务平面,配合分层、封装等方法,实现复杂的操作。主要参考了Nodic公司的SDK 基本原理 初始化一个任务队列,任务队列每一项包含参数、任务处理函数句柄;中断/回调等后台任务,负责保存数据,同时构造后续操作的任务结构体入队列,通过级联的方法实现复杂的逻辑。调度执行程序按顺序取队列中的元素,执行任务处理函数。 代码 头文件: m_scheduler.h #ifndef M_SCHEDULER_H__ #define M_SCHEDULER_H__ #include <stdint.h> #include <stdbool.h> #ifdef __cplusplus extern "C" { #endif #define M_SCHED