📄 task_config.h
字号:
#define idle_id 0
uint8 OSRdyTbl ; // asm("r2"); //任务运行就绪表
uint8 OSTaskRunningPrio ;//asm("r3"); //正在运行的任务
unsigned char Stack0_idle[180];
unsigned char Stack1[400];
//unsigned char Stack2[100];
//unsigned char Stack3[100];
#define OS_TASKS 2 //id+1 设定运行任务的数量
struct TaskCtrBlock
{
unsigned int OSTaskStackTop; //保存任务的堆栈顶
unsigned int OSWaitTick; //任务延时时钟
} TCB[OS_TASKS];
void OSTaskCreate(void (*Task)(void),unsigned char *Stack,unsigned char TaskID)
{
unsigned char i;
*Stack--=(unsigned int)Task; //将任务的地址低位压入堆栈,
*Stack--=(unsigned int)Task>>8; //将任务的地址高位压入堆栈
*Stack--=0x00; //R1 __zero_reg__
*Stack--=0x00; //R0 __tmp_reg__
*Stack--=0x80; //psw
//SREG 在任务中,开启全局中断
for(i=0;i<30;i++) //在 avr-libc 中的 FAQ中的 What registers are used by the C compiler?
*Stack--=0; //描述了寄存器的作用
TCB[TaskID].OSTaskStackTop=(unsigned int)Stack; //将人工堆栈的栈顶,保存到堆栈的数组中 但是这并不是的栈顶
OSRdyTbl|=1<<TaskID; //任务就绪表已经准备好
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -