别人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;
- }
|