使用STM32裸机实现时间轮片法进行多任务调度【单片机篇】

简介

使用STM32裸机实现时间轮片法进行多任务调度【单片机篇】_第1张图片 


代码

思路:在定时器中判断各个人物是否到执行时间,如果到了,该任务flag置1,然后主循环判断flag是否为1,为1执行。

#include "stm32f10x.h"                  // Device header

/*  使用时间片轮转的方法进行任务调度  */

//任务初始化结构
typedef struct
{
    uint8_t run_flag;
    uint8_t timer;		//计时器 
    uint16_t itv_time;		//interval 间隔时间 
    void (*task_handle)(void);
} Task_InitTypedef;

//任务清单
enum task_list
{
	TASK_xxx,    //自己随便起名,好辨别就行
	TASK_xxx,
	TASK_TOTAL
};

//时间片任务结构体
static Task_InitTypedef tasks[]=
{
	{0,80,200,要运行的函数名},
    {0,100,100,要运行的函数名},
};

/*****************************************************************************
* 功  能:任务执行节奏
* 参  数:
* 返回值:无
* 备  注:脉搏,时间片轮转
*****************************************************************************/
void Task_Rhythm(void)
{
    uint8_t i;
    for(i=0; i

1)以上是核心代码

2)任务清单中,使用的枚举,添加任务直接在TASK_TOTAL上面添加就行,枚举会自动递增,直接统计任务数

3)Task_Schedule函数直接扔进while循环就行

4)Task_Rhythm函数扔进定时器中


END~~

你可能感兴趣的:(嵌入式,单片机,stm32,嵌入式硬件,mcu,51单片机)