📄 ucos_ii.asm
字号:
PSHD *
RET
.endfunc 517,000000000H,1
.sym _OS_EventTO,_OS_EventTO,32,2,0
.globl _OS_EventTO
.func 535
;>>>> void OS_EventTO (OS_EVENT *pevent)
******************************************************
* FUNCTION DEF : _OS_EventTO
******************************************************
_OS_EventTO:
LF9 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+,AR3
.sym _pevent,-3+LF9,24,9,16,.fake0
.line 2
.line 3
;>>>> if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {
LDPK _OSTCBCur
LAR AR3,_OSTCBCur
ADRK 9
ZALS *-,AR1
CMPL
SACL * ,AR2
LARK AR2,-3+LF9
MAR *0+
LAC * ,AR3
ADDK 4
ADD * ,AR0
SACL *
LAR AR4,* ,AR1
ZALS * ,AR4
AND *
SACL *
BNZ L18
.line 4
;>>>> pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
MAR * ,AR3
ADRK 2
LAC * ,AR2
CMPL
LAR AR4,* ,AR4
MAR *+
AND *
SACL *
L18:
.line 6
;>>>> OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready */
LAR AR3,_OSTCBCur
LACK 0
MAR * ,AR3
ADRK 5
SACL *
.line 7
;>>>> OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
SBRK 2
SACL * ,AR1
EPI0_9:
.line 8
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 542,000000000H,1
.sym _OS_EventWaitListInit,_OS_EventWaitListInit,32,2,0
.globl _OS_EventWaitListInit
.func 559
;>>>> void OS_EventWaitListInit (OS_EVENT *pevent)
******************************************************
* FUNCTION DEF : _OS_EventWaitListInit
******************************************************
_OS_EventWaitListInit:
LF10 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,2
LAR AR0,*0+,AR2
.sym _pevent,-3+LF10,24,9,16,.fake0
.sym _ptbl,1,30,1,16
.line 2
;>>>> INT8U *ptbl;
.line 6
;>>>> pevent->OSEventGrp = 0x00; /* No task waiting on event */
LARK AR2,-3+LF10
MAR *0+
LAR AR3,* ,AR3
LACK 0
MAR *+
SACL * ,AR2
.line 7
;>>>> ptbl = &pevent->OSEventTbl[0];
;>>>> #if OS_EVENT_TBL_SIZE > 0
LAC *
ADDK 4
ADRK 4-LF10
SACL *
.line 10
;>>>> *ptbl++ = 0x00;
;>>>> #endif
;>>>> #if OS_EVENT_TBL_SIZE > 1
LAR AR4,* ,AR4
LACK 0
SACL *+,AR2
SAR AR4,*
.line 14
;>>>> *ptbl++ = 0x00;
;>>>> #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
LAR AR4,* ,AR4
SACL *+,AR2
SAR AR4,* ,AR1
EPI0_10:
.line 40
SBRK 3
LAR AR0,*-
PSHD *
RET
.endfunc 598,000000000H,2
.sym _OS_InitEventList,_OS_InitEventList,32,3,0
.func 614
;>>>> static void OS_InitEventList (void)
;>>>> #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
;>>>> #if (OS_MAX_EVENTS > 1)
;>>>> INT16U i;
;>>>> OS_EVENT *pevent1;
;>>>> OS_EVENT *pevent2;
******************************************************
* FUNCTION DEF : _OS_InitEventList
******************************************************
_OS_InitEventList:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,4
LAR AR0,*0+,AR2
.sym _i,1,14,1,16
.sym _pevent1,2,24,1,16,.fake0
.sym _pevent2,3,24,1,16,.fake0
.line 10
;>>>> pevent1 = &OSEventTbl[0];
LALK _OSEventTbl+0
LARK AR2,2
MAR *0+
SACL *+
.line 11
;>>>> pevent2 = &OSEventTbl[1];
LALK _OSEventTbl+6
SACL *
.line 12
;>>>> for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
LACK 0
SBRK 2
SACL *
LAC *
BNZ L20
MAR *+
L19:
.line 13
;>>>> pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
LAR AR3,*+,AR3
LACK 0
SACL * ,AR2
.line 14
;>>>> pevent1->OSEventPtr = pevent2;
LAC * ,AR3
ADRK 3
SACL * ,AR2
.line 15
;>>>> pevent1++;
MAR *-
LAR AR4,* ,AR4
ADRK 6
MAR * ,AR2
SAR AR4,*+
.line 16
;>>>> pevent2++;
LAR AR3,* ,AR3
ADRK 6
MAR * ,AR2
SAR AR3,*
.line 12
SBRK 2
LAC *
ADDK 1
SACL *
LAC *+
BZ L19
L20:
.line 18
;>>>> pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
LARK AR2,2
MAR *0+
LAR AR3,* ,AR3
LACK 0
SACL *
.line 19
;>>>> pevent1->OSEventPtr = (OS_EVENT *)0;
ADRK 3
SACL * ,AR1
.line 20
;>>>> OSEventFreeList = &OSEventTbl[0];
;>>>> #else
;>>>> OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
;>>>> OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
;>>>> OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
;>>>> #endif
;>>>> #endif
LALK _OSEventTbl+0
LDPK _OSEventFreeList
SACL _OSEventFreeList
EPI0_11:
.line 27
SBRK 5
LAR AR0,*-
PSHD *
RET
.endfunc 640,000000000H,4
.sym _OS_InitMisc,_OS_InitMisc,32,3,0
.func 655
;>>>> static void OS_InitMisc (void)
;>>>> #if OS_TIME_GET_SET_EN > 0
******************************************************
* FUNCTION DEF : _OS_InitMisc
******************************************************
_OS_InitMisc:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
.line 4
;>>>> OSTime = 0L; /* Clear the 32-bit system clock */
;>>>> #endif
LACK 0
LDPK _OSTime
SACL _OSTime
SACH _OSTime+1
.line 7
;>>>> OSIntNesting = 0; /* Clear the interrupt nesting counter */
SACL _OSIntNesting
.line 8
;>>>> OSLockNesting = 0; /* Clear the scheduling lock counter */
SACL _OSLockNesting
.line 10
;>>>> OSTaskCtr = 0; /* Clear the number of tasks */
SACL _OSTaskCtr
.line 12
;>>>> OSRunning = FALSE; /* Indicate that multitasking not started */
SACL _OSRunning
.line 14
;>>>> OSCtxSwCtr = 0; /* Clear the context switch counter */
SACL _OSCtxSwCtr
SACH _OSCtxSwCtr+1
.line 15
;>>>> OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
;>>>> #if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
;>>>> OSIdleCtrRun = 0L;
;>>>> OSIdleCtrMax = 0L;
;>>>> OSStatRdy = FALSE; /* Statistic task is not ready */
;>>>> #endif
SACL _OSIdleCtr
SACH _OSIdleCtr+1
EPI0_12:
.line 22
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 676,000000000H,1
.sym _OS_InitRdyList,_OS_InitRdyList,32,3,0
.func 691
;>>>> static void OS_InitRdyList (void)
;>>>> INT16U i;
;>>>> INT8U *prdytbl;
******************************************************
* FUNCTION DEF : _OS_InitRdyList
******************************************************
_OS_InitRdyList:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,3
LAR AR0,*0+,AR2
.sym _i,1,14,1,16
.sym _prdytbl,2,30,1,16
.line 7
;>>>> OSRdyGrp = 0x00; /* Clear the ready list */
LACK 0
LDPK _OSRdyGrp
SACL _OSRdyGrp
.line 8
;>>>> prdytbl = &OSRdyTbl[0];
LALK _OSRdyTbl+0
LARK AR2,2
MAR *0+
SACL *-
.line 9
;>>>> for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
LACK 0
SACL *
ZALS *
SUBK 2
BGEZ L22
MAR *+
L21:
.line 10
;>>>> *prdytbl++ = 0x00;
LAR AR3,* ,AR3
LACK 0
SACL *+,AR2
SAR AR3,*-
.line 9
LAC *
ADDK 1
SACL *
ZALS *+
SUBK 2
BLZ L21
L22:
.line 13
;>>>> OSPrioCur = 0;
LACK 0
LDPK _OSPrioCur
SACL _OSPrioCur
.line 14
;>>>> OSPrioHighRdy = 0;
SACL _OSPrioHighRdy
.line 16
;>>>> OSTCBHighRdy = (OS_TCB *)0;
SACL _OSTCBHighRdy
.line 17
;>>>> OSTCBCur = (OS_TCB *)0;
SACL _OSTCBCur
EPI0_13:
.line 18
MAR * ,AR1
SBRK 4
LAR AR0,*-
PSHD *
RET
.endfunc 708,000000000H,3
.sym _OS_InitTaskIdle,_OS_InitTaskIdle,32,3,0
.func 724
;>>>> static void OS_InitTaskIdle (void)
;>>>> #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,
;>>>> &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
;>>>> OS_IDLE_PRIO);
;>>>> #else
******************************************************
* FUNCTION DEF : _OS_InitTaskIdle
******************************************************
_OS_InitTaskIdle:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
.line 32
;>>>> (void)OSTaskCreate(OS_TaskIdle,
;>>>> (void *)0,
;>>>> &OSTaskIdleStk[0],
;>>>> OS_IDLE_PRIO);
;>>>> #endif
;>>>> #endif
LACK 12
SACL *+
LALK _OSTaskIdleStk+0
SACL *+
LACK 0
SACL *+
LALK _OS_TaskIdle+0
SACL *+
CALL _OSTaskCreate
SBRK 4
EPI0_14:
.line 38
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 761,000000000H,1
.sym _OS_InitTCBList,_OS_InitTCBList,32,3,0
.func 830
;>>>> static void OS_InitTCBList (void)
;>>>> INT8U i;
;>>>> OS_TCB *ptcb1;
;>>>> OS_TCB *ptcb2;
******************************************************
* FUNCTION DEF : _OS_InitTCBList
******************************************************
_OS_InitTCBList:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,4
LAR AR0,*0+,AR2
.sym _i,1,14,1,16
.sym _ptcb1,2,24,1,16,_os_tcb
.sym _ptcb2,3,24,1,16,_os_tcb
.line 8
;>>>> OSTCBList = (OS_TCB *)0; /* TCB Initialization */
LACK 0
LDPK _OSTCBList
SACL _OSTCBList
.line 9
;>>>> for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
LARK AR2,1
MAR *0+
SACL *
ZALS *
SUBK 13
BGEZ L24
L23:
.line 10
;>>>> OSTCBPrioTbl[i] = (OS_TCB *)0;
LAC * ,AR0
ADLK _OSTCBPrioTbl+0,0
SACL *
LAR AR3,* ,AR3
LACK 0
SACL * ,AR2
.line 9
LAC *
ADDK 1
SACL *
ZALS *
SUBK 13
BLZ L23
L24:
.line 12
;>>>> ptcb1 = &OSTCBTbl[0];
LALK _OSTCBTbl+0
MAR *+
SACL *+
.line 13
;>>>> ptcb2 = &OSTCBTbl[1];
LALK _OSTCBTbl+11
SACL *
.line 14
;>>>> for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
LACK 0
SBRK 2
SACL *
ZALS *
SUBK 10
BGEZ L26
MAR *+
L25:
.line 15
;>>>> ptcb1->OSTCBNext = ptcb2;
LAR AR3,*+
LAC *-,AR3
MAR *+
SACL * ,AR2
.line 16
;>>>> ptcb1++;
LAR AR4,* ,AR4
ADRK 11
MAR * ,AR2
SAR AR4,*+
.line 17
;>>>> ptcb2++;
LAR AR3,* ,AR3
ADRK 11
MAR * ,AR2
SAR AR3,*
.line 14
SBRK 2
LAC *
ADDK 1
SACL *
ZALS *+
SUBK 10
BLZ L25
L26:
.line 19
;>>>> ptcb1->OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
LARK AR2,2
MAR *0+
LAR AR3,* ,AR3
LACK 0
MAR *+
SACL * ,AR1
.line 20
;>>>> OSTCBFreeList = &OSTCBTbl[0];
LALK _OSTCBTbl+0
LDPK _OSTCBFreeList
SACL _OSTCBFreeList
EPI0_15:
.line 21
SBRK 5
LAR AR0,*-
PSHD *
RET
.endfunc 850,000000000H,4
.sym _OS_Sched,_OS_Sched,32,2,0
.globl _OS_Sched
.func 869
;>>>> void OS_Sched (void)
;>>>> #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;>>>> OS_CPU_SR cpu_sr;
;>>>> #endif
;>>>> INT8U y;
******************************************************
* FUNCTION DEF : _OS_Sched
******************************************************
_OS_Sched:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,2
LAR AR0,*0+
.line 9
;>>>> OS_ENTER_CRITICAL();
SETC INTM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -