c语言实现任务调度器

一、介绍
调度器是常用的一种编程框架,也是操作系统的拆分多任务的核心,比如单片机的裸机程序框架,网络协议栈的框架如can网关、485网关等等,使用场合比较多,是做稳定产品比较常用的编程技术
二、原理
1、超级循环
void main(){ while(1) {  task1();  task2();  ... }}123456789  
2、时间片与时标
1)我们把cpu执行时间分成一段一段的,每一段时间称为时间片2)时间片的时间计时由定时器完成,把定时器定的时间成为时标
3、调度算法介绍
1)时间片轮转调度2)强占试调度
4、注意事项
1)所有任务的执行时间不能超过时标的时间2)任务中不能有任何阻塞,比如使用延时函数3)任务中的延时或者长时间任务利用状态机拆分成多段
三、任务调度代码实现
这里拿linux来测试schduler.c
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//        头文件区//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#include #include scheduler.h//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//        接口定义区//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#define max_tasks 10static volatile unsigned char cur_task_num = 0;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//        变量定义区//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~static running_queue_def running_queue[max_tasks] = {0};//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//        函数定义区//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~int create_task(const void (*fun)(), unsigned short period){    unsigned char i; if(cur_task_num >= max_tasks) {  printf(over limit max_tasks);  return -1; }    running_queue[i].fun = fun;    running_queue[i].period = period;    running_queue[i].cnt = 0;        cur_task_num++;    return 0;}int scheduler_run(){    unsigned char i;    for(i = 0; i  0)        {            running_queue[i].cnt--;        }        else        {            running_queue[i].cnt = running_queue[i].period;            running_queue[i].fun();        }    }    return 0;}  
schduler.h
#ifndef __scheduler_h#define __scheduler_htypedef struct {     void (*fun)();        //运行函数     unsigned short period;//周期        unsigned short cnt;}running_queue_def;int create_task(const void (*fun)(), unsigned short period);int scheduler_run();#endif  
main.c
#include scheduler.h#include #include void task1(){    printf(task1 run);}void task2(){    printf(task2 run);}int main(){    create_task(task1, 1000);    create_task(task2, 2000);    while(1)    {        scheduler_run();        usleep(1000);    }    return 0;}  
编译脚本
build.sh
echo delet mainrm -rf mainsleep 1gcc main.c scheduler.c -o main  -wecho build ok ./main  


PCB电路板如何清洁及维护
Intel将联合这个公司在汽车领域重造“Wintel”辉煌
全球车企加紧布局PHEV(插电式混合动力),PHEV受青睐的四大原因分析
星环科技Sophon AutoCV助力视觉AI工业化生产
保护您的RS-485通信网络免受有害EMC事件的影响
c语言实现任务调度器
面对多种信号干扰,如何实现高效干扰测试?
基于OpenVINO™和AIxBoard的智能安检盒子设计
百度携手生态伙伴成立“安徽省智能交通产业联盟”
苹果A12处理器:第一个实现量产应用的7nm移动SoC芯片
基于NI USRP的2X2 MIMO系统
4G工业路由器在太阳能物联网领域的应用
SiC功率器件降低成本以推动采用
汽车电子氛围灯呼吸效果控制原理
LTC3619/LTC3619B -具平均输入电流限制的40
高德智感参加Enforce Tac 2023,新品TR系列红外热成像瞄准镜亮相
M4单片机更值得青睐
新松“面向智能制造的边缘侧工业软件平台项目”荣登工信部榜单
ibeacon是什么_ibeacon工作原理
近红外双模式单光子探测器----单光子探测主力量子通讯