📄 inittask.c
字号:
/********************************************
嵌入式系统 小型操作系统
作者:汪普宏
制作日期:2006.9
*********************************************/
#include"OS.H"
#include"Init_Task.h"
#include"OS_Mail.h"
#include "OS_Memory.h"
/*操作系统全局变量*/
uchar data Prio;
uchar data *spend;
uchar data ISR_num ;
uchar data OSRdyGrp;
uchar data OSRdyTab[TASK_8N];
task_link xdata OSPCB[N+1];
/****************************************
模块功能:初始化,开始任务切换
模块接口:堆栈指针,任务优先级,任务函数地址,任务堆栈长度
调用者: 主函数
返回值: 无
*****************************************/
static uchar data *p;
void Task_Init(uchar i,void(*addr)(void),uchar xdata *Task_sta)
{
Task_sta[0]=(uint)(*addr)&0xff;
Task_sta[1]=(uint)(*addr)>>8;
OSPCB[i].sp_start=&Task_sta[0];
OSPCB[i].sp_size=INIT_SP;
}
void OSStart(void) //系统初始化,开始任务调度
{
uchar i;
p=SP-1;
for(i=0;i<N+1;i++) //任务就绪表初始化
{
OSPCB[i].flg=WAIT_MSG;
OSPCB[i].msg=0;
}
for(i=0;i<TASK_8N;i++)
{
OSRdyTab[i]=0; //任务均处于等待状态
}
OSRdyGrp=0;
// OSInit_Malloc(); //动态内存初始化
// OSIint_Queue(); //消息列队初始化
Task1_Init_Hook(); //任务中用户数据的初始化函数
Task2_Init_Hook();
Task3_Init_Hook();
Task4_Init_Hook();
Task5_Init_Hook();
Task_Free_Init_Hook();
OS_RdyTask(FREE_TASK); //必须将空闲任务置于就绪表中
Prio=FREE_TASK; //先将当前任务指针指向空闲任务
*p++=(uint)(free_task)&0xff;
*p=(uint)(free_task)>>8;
spend=SP-1;
EA=ET1=TR1=1; //任务切换的系统时钟开始工作
OSTask_TimeDal(0); //开始任务调度
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -