如何实现自己的任务调度模块

来源:互联网 发布:淘宝复核认证气死人了 编辑:程序博客网 时间:2024/06/05 11:34

任务(线程)调度是操作系统最基本的功能,但在工业控制中受成本、实时性或认证等因素可能不可使用操作系统,为了解决复杂的任务调度问题,有些企业会采用一个大循环的方法来规避,但这会导致程序的灵活性下降,其实实现操作系统的基本任务调度(注意,是基本)并不复杂,主要有以下内容:

(1).链表:一个循环单项链表,用于实现所有任务的分时调度。调用创建任务接口时添加到该链表。

(2).回调函数:该回调函数就是用户的任务,在该部分实现你自己的代码。

(3).参数指针:在指针在创建任务时传递到链表的数据结构中,在任务调度时会将指针回传到回调函数中,需要注意的是该对象不能是从栈中申请的。

(4).系统时间:用提供时间基准,可用硬件定时器实现。

(5).任务运行时间控制:例如要让任务每1S5S调度一次,需要利用系统时间实现。

 

几点说明:

(1)   该任务调度方法中没有实现上下文切换,实现方法是保存一些寄存器,例如PC寄存器。

(2)   C++实现程序结构会比较清晰,这里利用的是C++的封装特性。

(3)   该任务调度方法中没有使用优先级,即不能实现抢占式调度,但对于硬件中断还是会抢占当前任务。

 

下一博文:工业安全系统中的几个指标:安全性、可靠性、可用性