📄 os.c
字号:
/// 1、任务控制
#define MAX_TASK 3 //一共几个任务
#define __task
#define OSWaitSignal(N) TCB[N].CurDelay = 65535
#define OSSendSignal(N) TCB[N].CurDelay = 1
typedef const void (*Task)(void); //任务变量
uchar CurTaskId; //当前执行的任务
struct _TCB{
ushort Delay; //需要延时的长度
ushort CurDelay; //倒计时,到0了就执行任务
Task* pTask; //任务过程
} TCB[MAX_TASK];
/// 2、操作系统时钟中断服务程序
void TimeTickISR() __irq {
uchar i;
for (i=0; i<MAX_TASK; i++){
_TCB* pTCB = TCB[i];
CurTaskId = i;
/// if(pTCB->CurDelay == 65535) continue; //如需等待信号,就用这个
pTCB->CurDelay--;
if(pTCB->CurDelay == 0){
pTCB->CurDelay = pTCB->Delay;
pTask();
}
}
}
//定义任务
//参数:任务号,延时时间间隔,任务服务程序
void OSDefineTask(char TaskNum, ushort Delay, Task* pTask){
_TCB* pTCB = TCB[TaskNum];
pTCB->Delay = pTCB->CurDelay = Delay;
pTCB->pTask = pTask;
}
/// 3、初始化任务
void Task1() __task{
PIO ^= 1;
}
void Task2() __task{
PIO ^= 2;
}
void Task3() __task{
PIO ^= 4;
}
void main(){
OSDefineTask(0, 100, Task1); //任务1每100Tick触发一次
OSDefineTask(0, 200, Task2); //任务2每200Tick触发一次
OSDefineTask(0, 300, Task3); //任务3每300Tick触发一次
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -