简单的任务调度
#ifndef USER_H
#define USER_H
#include "config.h"
typedef struct {
u8 run;
u16 cnt;
u16 rest_time;
void (*fn)(void);
} task;
void task_time_update();
void task_handle();
void FLOW_Led();
void KEY_P32_init();
void KEY_P32();
bit scan_p32_key();
void systick_init();
extern u32 T0_cnt;
#endif
#include "user.h"
// 全局变量定义
u32 T0_cnt = 0; // Timer0 系统滴答计数器,每1ms递增一次
void task0(){
static u8 i=0;
P00 = ~P00;
printf("task0 cnt:%d run.. \r\n",(int)i++);
}
void task1(){
static u8 i=0;
P01 = ~P01;
printf("task1 cnt:%d run.. \r\n",(int)i++);
}
void task2(){
static u8 i=0;
P02 = ~P02;
printf("task2 cnt:%d run.. \r\n",(int)i++);
}
void task3(){
static u8 i=0;
P03 = ~P03;
printf("task3 cnt:%d run.. \r\n",(int)i++);
}
void task4(){
static u8 i=0;
P04 = ~P04;
printf("task4 cnt:%d run.. \r\n",(int)i++);
}
void task5(){
static u8 i=0;
P05 = ~P05;
printf("task5 cnt:%d run.. \r\n",(int)i++);
}
void task6(){
static u8 i=0;
P06 = ~P06;
printf("task6 cnt:%d run.. \r\n",(int)i++);
}
void task7(){
static u8 i=0;
P07 = ~P07;
printf("task7 cnt:%d run.. \r\n",(int)i++);
}
task task_list []={
{0 , 0 , 1 ,task0},
{0 , 0 , 5 ,task1},
{0 , 0 , 10 ,task2},
//{0 , 0 , 30 ,task3},
//{0 , 0 , 40 ,task4},
//{0 , 0 , 50 ,task5},
//{0 , 0 , 60 ,task6},
//{0 , 0 , 70 ,task7},
};
u8 TASK_MAX=sizeof(task_list)/sizeof(task_list[0]);
void task_time_update(){
u8 i;
for(i=0;i<TASK_MAX;i++){
if(task_list[i].cnt>task_list[i].rest_time&&task_list[i].run==0)
{task_list[i].run=1;
task_list[i].cnt=0;
}
else
{task_list[i].cnt+=1;}
}
}
void task_handle(){
u8 i;
void (*fn)(void);
for(i=0;i<TASK_MAX;i++){
if(task_list[i].run&&task_list[i].rest_time)
{
fn= task_list[i].fn;
if(fn!=NULL)fn();
task_list[i].run=0;
}
}
}
while(1){
task_handle();
delay_ms(500);
}}