📄 ucos_ii.asm
字号:
.endfunc 132,000000000H,7
.sym _OSEventTaskWait,_OSEventTaskWait,32,2,0
.globl _OSEventTaskWait
.func 150
;>>>> void OSEventTaskWait (OS_EVENT *pevent)
******************************************************
* FUNCTION DEF : _OSEventTaskWait
******************************************************
_OSEventTaskWait:
LF2 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+,AR2
.sym _pevent,-3+LF2,24,9,16,.fake0
.line 2
.line 3
;>>>> OSTCBCur->OSTCBEventPtr = pevent; /* Store pointer to event control block in TCB */
LDPK _OSTCBCur
LAR AR3,_OSTCBCur
LARK AR2,-3+LF2
MAR *0+
LAC * ,AR3
ADRK 3
SACL *
.line 4
;>>>> if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { /* Task no longer ready */
ADRK 6
ZALS *-,AR1
CMPL
SACL * ,AR3
LAC * ,AR0
ADLK _OSRdyTbl+0,0
SACL *
LAR AR4,* ,AR1
ZALS * ,AR4
AND *
SACL *
BNZ L3
.line 5
;>>>> OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
MAR * ,AR3
ADRK 2
LAC *
CMPL
AND _OSRdyGrp
SACL _OSRdyGrp
L3:
.line 7
;>>>> pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; /* Put task in waiting list */
LAR AR3,_OSTCBCur
LAR AR4,_OSTCBCur
MAR * ,AR2
LAC * ,AR4
ADDK 1
ADRK 8
ADD * ,AR0
SACL *
LAR AR5,* ,AR5
LAC * ,AR3
ADRK 9
OR * ,AR5
SACL * ,AR2
.line 8
;>>>> pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
LAR AR5,* ,AR5
ADRK 4
LAC * ,AR3
MAR *+
OR * ,AR5
SACL * ,AR1
EPI0_2:
.line 9
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 158,000000000H,1
.sym _OSEventTO,_OSEventTO,32,2,0
.globl _OSEventTO
.func 176
;>>>> void OSEventTO (OS_EVENT *pevent)
******************************************************
* FUNCTION DEF : _OSEventTO
******************************************************
_OSEventTO:
LF3 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+,AR3
.sym _pevent,-3+LF3,24,9,16,.fake0
.line 2
.line 3
;>>>> if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
LDPK _OSTCBCur
LAR AR3,_OSTCBCur
ADRK 9
ZALS *-,AR1
CMPL
SACL * ,AR2
LARK AR2,-3+LF3
MAR *0+
LAC * ,AR3
ADDK 1
ADD * ,AR0
SACL *
LAR AR4,* ,AR1
ZALS * ,AR4
AND *
SACL *
BNZ L4
.line 4
;>>>> pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
MAR * ,AR3
ADRK 2
LAC * ,AR2
CMPL
LAR AR4,* ,AR4
ADRK 4
AND *
SACL *
L4:
.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_3:
.line 8
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 183,000000000H,1
.sym _OSEventWaitListInit,_OSEventWaitListInit,32,2,0
.globl _OSEventWaitListInit
.func 200
;>>>> void OSEventWaitListInit (OS_EVENT *pevent)
******************************************************
* FUNCTION DEF : _OSEventWaitListInit
******************************************************
_OSEventWaitListInit:
LF4 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,2
LAR AR0,*0+,AR2
.sym _pevent,-3+LF4,24,9,16,.fake0
.sym _i,1,12,1,16
.line 2
;>>>> INT8U i;
.line 6
;>>>> pevent->OSEventGrp = 0x00; /* No task waiting on event */
LARK AR2,-3+LF4
MAR *0+
LAR AR3,* ,AR3
LACK 0
ADRK 4
SACL * ,AR2
.line 7
;>>>> for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
ADRK 4-LF4
SACL *
LAC *
BNZ L6
SBRK 4-LF4
L5:
.line 8
;>>>> pevent->OSEventTbl[i] = 0x00;
LAC *
ADDK 1
ADRK 4-LF4
ADD * ,AR0
SACL *
LAR AR3,* ,AR3
LACK 0
SACL * ,AR2
.line 7
LAC *
ADDK 1
SACL *
LAC *
SBRK 4-LF4
BZ L5
L6:
EPI0_4:
.line 10
MAR * ,AR1
SBRK 3
LAR AR0,*-
PSHD *
RET
.endfunc 209,000000000H,2
.sym _OSInit,_OSInit,32,2,0
.globl _OSInit
.func 225
;>>>> void OSInit (void)
;>>>> INT16U i;
******************************************************
* FUNCTION DEF : _OSInit
******************************************************
_OSInit:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,2
LAR AR0,*0+,AR2
.sym _i,1,14,1,16
.line 7
;>>>> OSTime = 0L; /* Clear the 32-bit system clock */
LACK 0
LDPK _OSTime
SACL _OSTime
SACH _OSTime+1
.line 8
;>>>> OSIntNesting = 0; /* Clear the interrupt nesting counter */
SACL _OSIntNesting
.line 9
;>>>> OSLockNesting = 0; /* Clear the scheduling lock counter */
;>>>> #if OS_TASK_CREATE_EN || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN
SACL _OSLockNesting
.line 11
;>>>> OSTaskCtr = 0; /* Clear the number of tasks */
;>>>> #endif
SACL _OSTaskCtr
.line 13
;>>>> OSRunning = FALSE; /* Indicate that multitasking not started */
SACL _OSRunning
.line 14
;>>>> OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
;>>>> #if OS_TASK_STAT_EN && OS_TASK_CREATE_EXT_EN
;>>>> OSIdleCtrRun = 0L;
;>>>> OSIdleCtrMax = 0L;
;>>>> OSStatRdy = FALSE; /* Statistic task is not ready */
;>>>> #endif
SACL _OSIdleCtr
SACH _OSIdleCtr+1
.line 20
;>>>> OSCtxSwCtr = 0; /* Clear the context switch counter */
SACL _OSCtxSwCtr
SACH _OSCtxSwCtr+1
.line 21
;>>>> OSRdyGrp = 0; /* Clear the ready list */
SACL _OSRdyGrp
.line 22
;>>>> for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
LARK AR2,1
MAR *0+
SACL *
LAC *
BNZ L8
L7:
.line 23
;>>>> OSRdyTbl[i] = 0;
LAC * ,AR0
ADLK _OSRdyTbl+0,0
SACL *
LAR AR3,* ,AR3
LACK 0
SACL * ,AR2
.line 22
LAC *
ADDK 1
SACL *
LAC *
BZ L7
L8:
.line 26
;>>>> OSPrioCur = 0;
LACK 0
LDPK _OSPrioCur
SACL _OSPrioCur
.line 27
;>>>> OSPrioHighRdy = 0;
SACL _OSPrioHighRdy
.line 28
;>>>> OSTCBHighRdy = (OS_TCB *)0; /* TCB Initialization */
SACL _OSTCBHighRdy
.line 29
;>>>> OSTCBCur = (OS_TCB *)0;
SACL _OSTCBCur
.line 30
;>>>> OSTCBList = (OS_TCB *)0;
SACL _OSTCBList
.line 31
;>>>> for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
SACL *
ZALS *
SUBK 4
BGEZ L10
L9:
.line 32
;>>>> OSTCBPrioTbl[i] = (OS_TCB *)0;
LAC * ,AR0
ADLK _OSTCBPrioTbl+0,0
SACL *
LAR AR3,* ,AR3
LACK 0
SACL * ,AR2
.line 31
LAC *
ADDK 1
SACL *
ZALS *
SUBK 4
BLZ L9
L10:
.line 35
;>>>> for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
LACK 0
SACL *
ZALS *
SUBK 3
BGEZ L12
L11:
.line 36
;>>>> OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1];
LAC * ,AR0
ADDK 1
SACL *
LT * ,AR1
MPYK 11
PAC
ADLK _OSTCBTbl+0,0
SACL * ,AR2
LT * ,AR0
MPYK 11
PAC
ADLK _OSTCBTbl+0,0
SACL *
LAR AR3,* ,AR1
LAC * ,AR3
MAR *+
SACL * ,AR2
.line 35
LAC *
ADDK 1
SACL *
ZALS *
SUBK 3
BLZ L11
L12:
.line 38
;>>>> OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS - 1].OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
LRLK AR3,_OSTCBTbl+34
LACK 0
MAR * ,AR3
SACL * ,AR2
.line 39
;>>>> OSTCBFreeList = &OSTCBTbl[0];
;>>>> #if OS_MAX_EVENTS >= 2
LALK _OSTCBTbl+0
LDPK _OSTCBFreeList
SACL _OSTCBFreeList
.line 42
;>>>> for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
LACK 0
SACL *
LAC *
BNZ L14
L13:
.line 43
;>>>> OSEventTbl[i].OSEventPtr = (OS_EVENT *)&OSEventTbl[i + 1];
LAC * ,AR0
ADDK 1
SACL *
LT * ,AR1
MPYK 5
PAC
ADLK _OSEventTbl+0,0
SACL * ,AR2
LT * ,AR0
MPYK 5
PAC
ADLK _OSEventTbl+0,0
SACL *
LAR AR3,* ,AR1
LAC * ,AR3
SACL * ,AR2
.line 42
LAC *
ADDK 1
SACL *
LAC *
BZ L13
L14:
.line 45
;>>>> OSEventTbl[OS_MAX_EVENTS - 1].OSEventPtr = (OS_EVENT *)0;
LRLK AR3,_OSEventTbl+5
LACK 0
MAR * ,AR3
SACL *
.line 46
;>>>> OSEventFreeList = &OSEventTbl[0];
;>>>> #endif
;>>>> #if OS_Q_EN && (OS_MAX_QS >= 2)
;>>>> OSQInit(); /* Initialize the message queue structures */
;>>>> #endif
;>>>> #if OS_MEM_EN && OS_MAX_MEM_PART >= 2
;>>>> OSMemInit(); /* Initialize the memory manager */
;>>>> #endif
;>>>> #if OS_STK_GROWTH == 1
;>>>> #if OS_TASK_CREATE_EXT_EN
;>>>> OSTaskCreateExt(OSTaskIdle,
;>>>> (void *)0, /* No arguments passed to OSTaskIdle() */
;>>>> &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
;>>>> OSTaskCreate(OSTaskIdle, (void *)0, &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], OS_IDLE_PRIO);
;>>>> #endif
;>>>> #else
;>>>> #if OS_TASK_CREATE_EXT_EN
;>>>> OSTaskCreateExt(OSTaskIdle,
;>>>> (void *)0, /* No arguments passed to OSTaskIdle() */
;>>>> &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 */
;>>>> #else
SBRK 5
LDPK _OSEventFreeList
SAR AR3,_OSEventFreeList
.line 83
;>>>> OSTaskCreate(OSTaskIdle, (void *)0, &OSTaskIdleStk[0], OS_IDLE_PRIO);
;>>>> #endif
;>>>> #endif
;>>>> #if OS_TASK_STAT_EN
;>>>> #if OS_TASK_CREATE_EXT_EN
;>>>> #if OS_STK_GROWTH == 1
;>>>> OSTaskCreateExt(OSTaskStat,
;>>>> (void *)0, /* No args passed to OSTaskStat() */
;>>>> &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
;>>>> OSTaskCreateExt(OSTaskStat,
;>>>> (void *)0, /* No args passed to OSTaskStat() */
;>>>> &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
;>>>> OSTaskCreate(OSTaskStat,
;>>>> (void *)0, /* No args passed to OSTaskStat() */
;>>>> &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack */
;>>>> OS_STAT_PRIO); /* One higher than the idle task */
;>>>> #else
MAR * ,AR1
LACK 3
SACL *+
LALK _OSTaskIdleStk+0
SACL *+
LACK 0
SACL *+
LALK _OSTaskIdle+0
SACL *+
CALL _OSTaskCreate
SBRK 4
.line 117
;>>>> OSTaskCreate(OSTaskStat,
;>>>> (void *)0, /* No args passed to OSTaskStat() */
;>>>> &OSTaskStatStk[0], /* Set Top-Of-Stack */
;>>>> OS_STAT_PRIO); /* One higher than the idle task */
;>>>> #endif
;>>>> #endif
;>>>> #endif
LACK 2
SACL *+
LALK _OSTaskStatStk+0
SACL *+
LACK 0
SACL *+
LALK _OSTaskStat+0
SACL *+
CALL _OSTaskCreate
SBRK 4
EPI0_5:
.line 124
SBRK 3
LAR AR0,*-
PSHD *
RET
.endfunc 348,000000000H,2
.sym _OSIntEnter,_OSIntEnter,32,2,0
.globl _OSIntEnter
.func 373
;>>>> void OSIntEnter (void)
******************************************************
* FUNCTION DEF : _OSIntEnter
******************************************************
_OSIntEnter:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
.line 3
;>>>> OS_ENTER_CRITICAL();
setc intm
.line 4
;>>>> OSIntNesting++; /* Increment ISR nesting level */
LDPK _OSIntNesting
LAC _OSIntNesting
ADDK 1
SACL _OSIntNesting
.line 5
;>>>> OS_EXIT_CRITICAL();
clrc intm
EPI0_6:
.line 6
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 378,000000000H,1
.sym _OSIntExit,_OSIntExit,32,2,0
.globl _OSIntExit
.func 399
;>>>> void OSIntExit (void)
******************************************************
* FUNCTION DEF : _OSIntExit
******************************************************
_OSIntExit:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
.line 3
;>>>> OS_ENTER_CRITICAL();
setc intm
.line 4
;>>>> if ((--OSIntNesting | OSLockNesting) == 0) { /* Reschedule only if all ISRs completed & not locked */
LDPK _OSIntNesting
ZALS _OSIntNesting
SUBK 1
SACL _OSIntNesting
OR _OSLockNesting
ANDK 0FFFFh
BNZ L15
.line 5
;>>>> OSIntExitY = OSUnMapTbl[OSRdyGrp];
LAC _OSRdyGrp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -