📄 os.c
字号:
#include <inavr.h>
#include "oSdef.h"
__root unsigned char OSRdyGrp, OSRdyTbl[8],prio;
extern void (*TaskList[])(void);
extern void (*TaskArh[])(void);
extern void (*TaskRan)(void);
const unsigned char OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
__flash unsigned char OSUnMapTbl[] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};
void ISR(void)
{
unsigned char x,y;
__disable_interrupt();
y=OSUnMapTbl[OSRdyGrp];
x=OSUnMapTbl[OSRdyTbl[y]];
prio = (y << 3)+x;
TaskRan = TaskList[prio];
__enable_interrupt();
}
void TaskOff(unsigned char pr)
{
__disable_interrupt();
if ((OSRdyTbl[pr>>3] &= ~OSMapTbl[pr & 0x07])== 0)
OSRdyGrp &= ~OSMapTbl[pr>>3];
__enable_interrupt();
}
void TaskOn(unsigned char pr)
{
__disable_interrupt();
OSRdyGrp |= OSMapTbl[pr>>3];
OSRdyTbl[pr>>3] |= OSMapTbl[pr & 0x07];
__enable_interrupt();
}
void Reset_diseble_task(void)
{
TaskOff(prio);
}
void Enable_Task(unsigned char Ntask)
{
__disable_interrupt();
TaskList[Ntask]=TaskArh[Ntask];
__enable_interrupt();
}
void Disable_Task(unsigned char Ntask)
{
__disable_interrupt();
TaskList[Ntask]=Reset_diseble_task;
__enable_interrupt();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -