📄 os_core.src
字号:
MOV R0,?C_IBP
MOV @R0,AR3
INC R0
MOV @R0,A
INC R0
MOV @R0,AR1
;
; #if OS_EVENT_TBL_SIZE > 0
; *ptbl++ = 0x00;
; SOURCE LINE # 569
MOV R0,?C_IBP
MOV AR3,@R0
INC R0
INC R0
INC @R0
MOV A,@R0
DEC R0
MOV AR2,@R0
JNZ ?C0066
INC @R0
?C0066:
DEC A
MOV R1,A
CLR A
LCALL ?C?CSTPTR
; #endif
;
; #if OS_EVENT_TBL_SIZE > 1
; *ptbl++ = 0x00;
; SOURCE LINE # 573
MOV R0,?C_IBP
MOV AR3,@R0
INC R0
INC R0
INC @R0
MOV A,@R0
DEC R0
MOV AR2,@R0
JNZ ?C0067
INC @R0
?C0067:
DEC A
MOV R1,A
CLR A
LCALL ?C?CSTPTR
; #endif
;
; #if OS_EVENT_TBL_SIZE > 2
; *ptbl++ = 0x00;
; #endif
;
; #if OS_EVENT_TBL_SIZE > 3
; *ptbl++ = 0x00;
; #endif
;
; #if OS_EVENT_TBL_SIZE > 4
; *ptbl++ = 0x00;
; #endif
;
; #if OS_EVENT_TBL_SIZE > 5
; *ptbl++ = 0x00;
; #endif
;
; #if OS_EVENT_TBL_SIZE > 6
; *ptbl++ = 0x00;
; #endif
;
; #if OS_EVENT_TBL_SIZE > 7
; *ptbl = 0x00;
; #endif
; }
; SOURCE LINE # 599
MOV A,?C_IBP
ADD A,#06H
MOV ?C_IBP,A
RET
; END OF _?OS_EventWaitListInit
; #endif
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * INITIALIZATION
; * INITIALIZE THE FREE LIST OF EVENT CONTROL BLOCKS
; *
; * Description: This function is called by OSInit() to initialize the free list of event control blocks.
; *
; * Arguments : none
; *
; * Returns : none
; *********************************************************************************************************
; */
;
; static void OS_InitEventList (void)
RSEG ?PR?OS_InitEventList?OS_CORE
OS_InitEventList:
USING 0
; SOURCE LINE # 615
; {
; SOURCE LINE # 616
; #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
; #if (OS_MAX_EVENTS > 1)
; INT16U i;
; OS_EVENT *pevent1;
; OS_EVENT *pevent2;
;
;
; pevent1 = &OSEventTbl[0];
; SOURCE LINE # 624
MOV pevent1?1141,#00H
MOV pevent1?1141+01H,#HIGH (OSEventTbl)
MOV pevent1?1141+02H,#LOW (OSEventTbl)
; pevent2 = &OSEventTbl[1];
; SOURCE LINE # 625
MOV pevent2?1142,#00H
MOV pevent2?1142+01H,#HIGH (OSEventTbl+08H)
MOV pevent2?1142+02H,#LOW (OSEventTbl+08H)
; for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
; SOURCE LINE # 626
;---- Variable 'i?1140' assigned to Register 'R6/R7' ----
CLR A
MOV R7,A
MOV R6,A
?C0030:
; pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
; SOURCE LINE # 627
MOV R3,pevent1?1141
MOV R2,pevent1?1141+01H
MOV R1,pevent1?1141+02H
CLR A
LCALL ?C?CSTPTR
; pevent1->OSEventPtr = pevent2;
; SOURCE LINE # 628
MOV R3,pevent1?1141
MOV R2,pevent1?1141+01H
MOV R1,pevent1?1141+02H
MOV DPTR,#04H
MOV A,pevent2?1142+01H
MOV B,pevent2?1142+02H
LCALL ?C?ISTOPTR
; pevent1++;
; SOURCE LINE # 629
MOV A,#08H
ADD A,pevent1?1141+02H
MOV pevent1?1141+02H,A
CLR A
ADDC A,pevent1?1141+01H
MOV pevent1?1141+01H,A
; pevent2++;
; SOURCE LINE # 630
MOV A,#08H
ADD A,pevent2?1142+02H
MOV pevent2?1142+02H,A
CLR A
ADDC A,pevent2?1142+01H
MOV pevent2?1142+01H,A
; }
; SOURCE LINE # 631
INC R7
CJNE R7,#00H,?C0068
INC R6
?C0068:
MOV A,R7
XRL A,#01H
ORL A,R6
JNZ ?C0030
?C0031:
; pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
; SOURCE LINE # 632
MOV R3,pevent1?1141
MOV R2,pevent1?1141+01H
MOV R1,pevent1?1141+02H
CLR A
LCALL ?C?CSTPTR
; pevent1->OSEventPtr = (OS_EVENT *)0;
; SOURCE LINE # 633
MOV R3,pevent1?1141
MOV R2,pevent1?1141+01H
MOV R1,pevent1?1141+02H
MOV DPTR,#04H
MOV B,A
LCALL ?C?ISTOPTR
; OSEventFreeList = &OSEventTbl[0];
; SOURCE LINE # 634
MOV OSEventFreeList,#00H
MOV OSEventFreeList+01H,#HIGH (OSEventTbl)
MOV OSEventFreeList+02H,#LOW (OSEventTbl)
; #else
; OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
; OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
; OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
; #endif
; #endif
; }
; SOURCE LINE # 641
RET
; END OF OS_InitEventList
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * INITIALIZATION
; * INITIALIZE MISCELLANEOUS VARIABLES
; *
; * Description: This function is called by OSInit() to initialize miscellaneous variables.
; *
; * Arguments : none
; *
; * Returns : none
; *********************************************************************************************************
; */
;
; static void OS_InitMisc (void)
RSEG ?PR?OS_InitMisc?OS_CORE
OS_InitMisc:
; SOURCE LINE # 656
; {
; SOURCE LINE # 657
; #if OS_TIME_GET_SET_EN > 0
; OSTime = 0L; /* Clear the 32-bit system clock */
; #endif
;
; OSIntNesting = 0; /* Clear the interrupt nesting counter */
; SOURCE LINE # 662
CLR A
MOV OSIntNesting,A
; OSLockNesting = 0; /* Clear the scheduling lock counter */
; SOURCE LINE # 663
MOV OSLockNesting,A
;
; OSTaskCtr = 0; /* Clear the number of tasks */
; SOURCE LINE # 665
MOV OSTaskCtr,A
;
; OSRunning = FALSE; /* Indicate that multitasking not started */
; SOURCE LINE # 667
MOV OSRunning,A
;
; OSCtxSwCtr = 0; /* Clear the context switch counter */
; SOURCE LINE # 669
MOV OSCtxSwCtr+03H,A
MOV OSCtxSwCtr+02H,A
MOV OSCtxSwCtr+01H,A
MOV OSCtxSwCtr,A
; OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
; SOURCE LINE # 670
MOV OSIdleCtr+03H,A
MOV OSIdleCtr+02H,A
MOV OSIdleCtr+01H,A
MOV OSIdleCtr,A
;
; #if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
; OSIdleCtrRun = 0L;
; OSIdleCtrMax = 0L;
; OSStatRdy = FALSE; /* Statistic task is not ready */
; #endif
; }
; SOURCE LINE # 677
RET
; END OF OS_InitMisc
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * INITIALIZATION
; * INITIALIZE THE READY LIST
; *
; * Description: This function is called by OSInit() to initialize the Ready List.
; *
; * Arguments : none
; *
; * Returns : none
; *********************************************************************************************************
; */
;
; static void OS_InitRdyList (void)
RSEG ?PR?OS_InitRdyList?OS_CORE
OS_InitRdyList:
USING 0
; SOURCE LINE # 692
; {
; SOURCE LINE # 693
; INT16U i;
; INT8U *prdytbl;
;
;
; OSRdyGrp = 0x00; /* Clear the ready list */
; SOURCE LINE # 698
CLR A
MOV OSRdyGrp,A
; prdytbl = &OSRdyTbl[0];
; SOURCE LINE # 699
MOV prdytbl?1344,A
MOV prdytbl?1344+01H,#HIGH (OSRdyTbl)
MOV prdytbl?1344+02H,#LOW (OSRdyTbl)
; for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
; SOURCE LINE # 700
;---- Variable 'i?1343' assigned to Register 'R6/R7' ----
MOV R7,A
MOV R6,A
?C0035:
; *prdytbl++ = 0x00;
; SOURCE LINE # 701
MOV R3,prdytbl?1344
INC prdytbl?1344+02H
MOV A,prdytbl?1344+02H
MOV R2,prdytbl?1344+01H
JNZ ?C0069
INC prdytbl?1344+01H
?C0069:
DEC A
MOV R1,A
CLR A
LCALL ?C?CSTPTR
; }
; SOURCE LINE # 702
INC R7
CJNE R7,#00H,?C0070
INC R6
?C0070:
MOV A,R7
XRL A,#02H
ORL A,R6
JNZ ?C0035
?C0036:
;
; OSPrioCur = 0;
; SOURCE LINE # 704
CLR A
MOV OSPrioCur,A
; OSPrioHighRdy = 0;
; SOURCE LINE # 705
MOV OSPrioHighRdy,A
;
; OSTCBHighRdy = (OS_TCB *)0;
; SOURCE LINE # 707
MOV OSTCBHighRdy,A
; OSTCBCur = (OS_TCB *)0;
; SOURCE LINE # 708
MOV OSTCBCur,A
; }
; SOURCE LINE # 709
RET
; END OF OS_InitRdyList
;
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * INITIALIZATION
; * CREATING THE IDLE TASK
; *
; * Description: This function creates the Idle Task.
; *
; * Arguments : none
; *
; * Returns : none
; *********************************************************************************************************
; */
;
; static void OS_InitTaskIdle (void)
RSEG ?PR?OS_InitTaskIdle?OS_CORE
OS_InitTaskIdle:
USING 0
; SOURCE LINE # 725
; {
; SOURCE LINE # 726
; #if OS_TASK_CREATE_EXT_EN > 0
; #if OS_STK_GROWTH == 1
; (void)OSTaskCreateExt(OS_TaskIdle,
; (void *)0, /* No arguments passed to OS_TaskIdle() */
; &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack */
; OS_IDLE_PRIO, /* Lowest priority level */
; OS_TASK_IDLE_ID,
; &OSTaskIdleStk[0], /* Set Bottom-Of-Stack */
; OS_TASK_IDLE_STK_SIZE,
; (void *)0, /* No TCB extension */
; OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
; #else
; (void)OSTaskCreateExt(OS_TaskIdle,
; (void *)0, /* No arguments passed to OS_TaskIdle() */
; &OSTaskIdleStk[0], /* Set Top-Of-Stack */
; OS_IDLE_PRIO, /* Lowest priority level */
; OS_TASK_IDLE_ID,
; &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack */
; OS_TASK_IDLE_STK_SIZE,
; (void *)0, /* No TCB extension */
; OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
; #endif
; #else
; #if OS_STK_GROWTH == 1
; (void)OSTaskCreate(OS_TaskIdle,
; (void *)0,
; SOURCE LINE # 752
DEC ?C_IBP
MOV R0,?C_IBP
MOV @R0,#0CH
MOV R2,#HIGH (OSTaskIdleStk+03FH)
MOV R3,#LOW (OSTaskIdleStk+03FH)
MOV R4,#00H
MOV R5,#00H
MOV R6,#HIGH (_?OS_TaskIdle)
MOV R7,#LOW (_?OS_TaskIdle)
LJMP _?OSTaskCreate
; END OF OS_InitTaskIdle
; &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
; OS_IDLE_PRIO);
; #else
; (void)OSTaskCreate(OS_TaskIdle,
; (void *)0,
; &OSTaskIdleStk[0],
; OS_IDLE_PRIO);
; #endif
; #endif
; }
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * INITIALIZATION
; * CREATING THE STATISTIC TASK
; *
; * Description: This function creates the Statistic Task.
; *
; * Arguments : none
; *
; * Returns : none
; *********************************************************************************************************
; */
;
; #if OS_TASK_STAT_EN > 0
; static void OS_InitTaskStat (void)
RSEG ?PR?OS_InitTaskStat?OS_CORE
OS_InitTaskStat:
USING 0
; SOURCE LINE # 778
; {
; SOURCE LINE # 779
; #if OS_TASK_CREATE_EXT_EN > 0
; #if OS_STK_GROWTH == 1
; (void)OSTaskCreateExt(OS_TaskStat,
; (void *)0, /* No args passed to OS_TaskStat()*/
; &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack */
; OS_STAT_PRIO, /* One higher than the idle task */
; OS_TASK_STAT_ID,
; &OSTaskStatStk[0], /* Set Bottom-Of-Stack */
; OS_TASK_STAT_STK_SIZE,
; (void *)0, /* No TCB extension */
; OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear */
; #else
; (void)OSTaskCreateExt(OS_TaskStat,
; (void *)0, /* No args passed to OS_TaskStat()*/
; &OSTaskStatStk[0], /* Set Top-Of-Stack */
; OS_STAT_PRIO, /* One higher than the idle task */
; OS_TASK_STAT_ID,
; &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Bottom-Of-Stack */
; OS_TASK_STAT_STK_SIZE,
; (void *)0, /* No TCB extension */
; OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear */
; #endif
; #else
; #if OS_STK_GROWTH == 1
; (void)OSTaskCreate(OS_TaskStat,
; (void *)0, /* No args passed to OS_TaskStat()*/
; SOURCE LINE # 805
DEC ?C_IBP
MOV R0,?C_IBP
MOV @R0,#0BH
MOV R2,#HIGH (OSTaskStatStk+03FH)
MOV R3,#LOW (OSTaskStatStk+03FH)
MOV R4,#00H
MOV R5,#00H
MOV R6,#HIGH (_?OS_TaskStat)
MOV R7,#LOW (_?OS_TaskStat)
LJMP _?OSTaskCreate
; END OF OS_InitTaskStat
; &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack */
; OS_STAT_PRIO); /* One higher than the idle task */
; #else
; (void)OSTaskCreate(OS_TaskStat,
; (void *)0, /* No args passed to OS_TaskStat()*/
; &OSTaskStatStk[0], /* Set Top-Of-Stack
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -