📄 cn_os.c
字号:
return result; //if there is a high priority task is ready,so it will return the
//high priority's ID,else Cn.oS won't do anything
}
//==============================================
// :Cn.oS[Operating System from China]
//function :task switch for irq,it will be called by irq
// :
//author :kaka (sn.kaka@yahoo.com )
//data :20080730
// :
//==============================================
//==============================================
// :Cn.oS[Operating System from China]
//function :主要工作在Cn_oS_Delay_Manager_For_Timeout(void)
// :都完成了,这里留着对休眠消息的扩展
//author :kaka (sn.kaka@yahoo.com )
//data :20080730
// :
//==============================================
void Switch_Task_For_Time_out(void)
{ int i;
char id;
char id_id;
char finded=0;
char t;
int temp[TASK_NUMBER+10],temp2[TASK_NUMBER+10];
finded=finded;
id_id=Current_Task_ID;
i=1;
id=Current_Task_ID;
t=Cn_oS_Delay_Manager_For_Timeout();
/*
Current_Task_ID=kaka%TASK_NUMBER;
Current_Task_ID++;
Current_Task_P=T_INFO[Current_Task_ID].Task_P;
Current_PCB_P_NEXT=T_INFO[Current_Task_ID].PCB;
Current_PCB_P=Current_PCB_P_NEXT;
CLEAR_IRQ_PENDING;
*/
///*
/*
if(1==0) //she isn't be used now!!!
//not for ever!!!
{
while(i<TASK_NUMBER)
{
if( (Cn_oS_Core_list[i]&0x1)==0&finded==0)
{
finded=1;
if(id==0)
{
id_id=i;
}
else
{
if(i<id)
{
id_id=i;
}
}
}
i++;
if(finded==1) break;
}
if(finded!=1)
{
Current_Task_ID=id_id;
Current_Task_P=T_INFO[Current_Task_ID].Task_P;
Current_PCB_P_NEXT=T_INFO[Current_Task_ID].PCB;
Current_PCB_P=Current_PCB_P_NEXT;
}
Time_out_must_do=0;
}
else
{
Time_out_temp=Time_out_temp;
Time_out_must_do=0;
}
*/
/*
for(i=0;i<TASK_NUMBER;i++)
{
if( (T_INFO[i].Delay_tick>10)&(T_INFO[i].Delay_tick<50))
{
temp[i]=T_INFO[i].Delay_tick;
}
else
{
temp[i]=T_INFO[i].Delay_tick;
}
}
for(i=50;i<TASK_NUMBER;i++)
{
if( (T_INFO[i].Delay_tick>10)&(T_INFO[i].Delay_tick<50))
{
temp[i]=T_INFO[i].Delay_tick;
}
else
{
temp[i]=T_INFO[i].Delay_tick;
}
}
for(i=30;i<TASK_NUMBER;i++)
{
if( (T_INFO[i].Delay_tick>10)&(T_INFO[i].Delay_tick<50))
{
temp[i]=T_INFO[i].Delay_tick;
}
else
{
temp[i]=T_INFO[i].Delay_tick;
}
}
for(i=10;i<TASK_NUMBER;i++)
{
if( (T_INFO[i].Delay_tick>10)&(T_INFO[i].Delay_tick<50))
{
temp[i]=T_INFO[i].Delay_tick;
}
else
{
temp[i]=T_INFO[i].Delay_tick;
}
}
*/
Current_Task_ID=t;
Current_Task_P=T_INFO[Current_Task_ID].Task_P;
Current_PCB_P_NEXT=T_INFO[Current_Task_ID].PCB;
Current_PCB_P=Current_PCB_P_NEXT;
CLEAR_IRQ_PENDING; //CLEAR the timer 5 pending
}
//==============================================
// :Cn.oS[Operating System from China]
//function :task switch for task,we can call it sofeswitch
// :
//author :kaka (sn.kaka@yahoo.com )
//data :20080730
// :
//==============================================
//==============================================
// :Cn.oS[Operating System from China]
//function :任务级别的任务切换,恩? 怎么这么噢口
// :可以叫他软件切换
//author :kaka (sn.kaka@yahoo.com )
//data :20080730
// :
//==============================================
void Switch_Task(void)
{ int i=1;
char finded=0;
/*
Current_Task_ID=kaka%TASK_NUMBER;
Current_Task_ID++;
Current_Task_P=T_INFO[Current_Task_ID].Task_P;
Current_PCB_P_NEXT=T_INFO[Current_Task_ID].PCB;
Current_PCB_P=Current_PCB_P_NEXT;
CLEAR_IRQ_PENDING;
*/
//Cn_oS_Delay_Manager();
while(i<TASK_NUMBER)
{
if( (Cn_oS_Core_list[i]&0x1)==0)
{
finded=1;
Current_Task_ID=i;
Current_Task_P=T_INFO[Current_Task_ID].Task_P;
Current_PCB_P_NEXT=T_INFO[Current_Task_ID].PCB;
Current_PCB_P=Current_PCB_P_NEXT;
}
i++;
if(finded==1) break;
}
if(finded==0)
{
Current_Task_ID=0;
Current_Task_P=T_INFO[0].Task_P;
Current_PCB_P_NEXT=T_INFO[0].PCB;
Current_PCB_P=Current_PCB_P_NEXT;
}
//CLEAR_IRQ_PENDING;
}
//==============================================
// :Cn.oS[Operating System from China]
//function :a function for TDM
// :
//data :20080714
//data :20080716
//
// By kaka
//data :
//==============================================
//==============================================
// :Cn.oS[Operating System from China]
//function :时分没有优先级的任务切换,
// :这样一来
// :分时操作系统和实时操作系统容为一身
// :经过试验的验证,只要要求不是很高
// :分时系统性能要高一些,当然你永远
// :不会知道你的任务下一时刻会运行什么
// :哎,看来上帝是公平的阿~~~
// :程序如此,尚且人乎?
//data :20080714
//data :20080716
//
// By kaka
//data :
//==============================================
void Switch_Task_For_TDM(void)
{
Current_Task_ID=kaka%TASK_NUMBER;
Current_Task_ID++;
Current_Task_P=T_INFO[Current_Task_ID].Task_P;
Current_PCB_P_NEXT=T_INFO[Current_Task_ID].PCB;
Current_PCB_P=Current_PCB_P_NEXT;
CLEAR_IRQ_PENDING;
}
//==============================================
// :Cn.oS[Operating System from China]
//function :Set the Current_Task_ID to Zero,get the PCB's point
// :Set the timer5,but don't let the timer run in this function
//data :20080714
//data :20080716
// remove some sentence
// don't let the timer run in this function
// By kaka
//data :
//==============================================
//==============================================
// :Cn.oS[Operating System from China]
//function :操作体统的运行必须从任务0开始
// :任务0是一个引导程序,当然在
// :系统跑起来之后任务0又担当着空闲任务
// :用以统计系统的繁忙情况
// :
// :
//data :20080714
//data :20080716
// remove some sentence
// don't let the timer run in this function
// By kaka
//data :
//==============================================
void Cn_oS_Start(void)
{
//Switch_Task();
Current_Task_ID=0; //the task0 is the first task
Current_Task_P=T_INFO[Current_Task_ID].Task_P;
Current_PCB_P=T_INFO[Current_Task_ID].PCB;
Current_PCB_P_NEXT=T_INFO[Current_Task_ID].PCB;
Init_Core_list();
Init_Timer5 ();
ATTEMPER_first();
}
//==============================================
// :Cn.oS[Operating System from China]
//function :it isn't used
// :
//author :kaka (sn.kaka@yahoo.com )
//data :20080730
// :
//==============================================
//==============================================
// :Cn.oS[Operating System from China]
//function :同样是在错误的时期诞生的错误的程序
// :
//author :kaka (sn.kaka@yahoo.com )
//data :20080730
// :
//==============================================
void Save_Info(void)
{
T_INFO[Current_Task_ID].Task_P=Current_Task_P;
T_INFO[Current_Task_ID].Stack_P=Current_PCB_P;
}
//==============================================
// :Cn.oS[Operating System from China]
//function :it isn't used
// :
//author :kaka (sn.kaka@yahoo.com )
//data :20080730
// :
//==============================================
//==============================================
// :Cn.oS[Operating System from China]
//function :同样是在错误的时期诞生的错误的程序
// :
//author :kaka (sn.kaka@yahoo.com )
//data :20080730
// :
//==============================================
void Recover_Info(void)
{
Current_Task_P=T_INFO[Current_Task_ID].Task_P;
Current_PCB_P=T_INFO[Current_Task_ID].Stack_P;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -