别人20年前就写过了的东西。highgear 太落伍了。看谁抄谁的。抄得别跑调就行啦:
#include "AT89X52.h"
#include "task_switch.h"
#include "MAIN.H"
#include "OS_core.h
void OS_Task_Switch(void)
{
static unsigned char i;
static unsigned char temp;
EA=0;
__asm PUSH ACC
__asm PUSH B
__asm PUSH PSW
__asm PUSH DPL
__asm PUSH DPH
__asm PUSH 0
__asm PUSH 1
__asm PUSH 2
__asm PUSH 3
__asm PUSH 4
__asm PUSH 5
__asm PUSH 6
__asm PUSH 7
OS_pcb[OS_Current_ID].Task_SP=SP;
OS_Current_ID=0;
temp=0x01;
for(i=0;i<MAX_TASK;i++)
{
if(OS_Task_List&temp)
{
if(OS_pcb[i].Suspend==0)
{
if(OS_pcb[i].Priority<OS_pcb[OS_Current_ID].Priority)
{
OS_Current_ID=i;
}
}
}
temp<<=1;
}
SP=OS_pcb[OS_Current_ID].Task_SP;
__asm POP 7
__asm POP 6
__asm POP 5
__asm POP 4
__asm POP 3
__asm POP 2
__asm POP 1
__asm POP 0
__asm POP DPH
__asm POP DPL
__asm POP PSW
__asm POP B
__asm POP ACC
EA=1;
}
|