非抢占式,有优先级的简易OS
原理 最简单的 OS 就是合作式操作系统,实现的方式是循环检查任务可执行标志,这个标志会在时间中断中来设置。优点是简单不容易出bug,缺点是实时性一般,并且每个任务需要拆分很细,最好小于时间中断。 实现 OS头文件 os_cfg.h #include "reg51.h" #define TIME_PER_SEC 200 //定义任务时钟频率,200Hz #define CLOCK 22118400 //定义时钟晶振,单位Hz #define MAX_TASK 4 //定义任务数量 //函数变量声明,在需要用以下函数或变量的文件中包含此头文件即可 extern void task0(void); extern void task1(void); extern void task2(void); extern void task3(void); extern unsigned char task_delay[MAX_TASK]; extern void run(void (*ptask)()); extern void os_timer0_init(void); OS 源文件 os_c.c #include "os_cfg.h" unsigned char task_delay[MAX_TASK]; //定义任务延时量变量 //定时器0初始化 void os_timer0_init(void) { unsigned char i; for(i=0;i<MAX_TASK;i++) task_delay[i]=0; TMOD = (TMOD & 0XF0) | 0X01; //定时器 0工作在模式 1,16Bit 定时器模式 TH0 = 255-CLOCK/TIME_PER_SEC/12/256; //CRY_OSC,TIME_PER_SEC在 os_cfg....