📄 ucos_ii.asm
字号:
MAR *+
SACL * ,AR2
.line 32
;>>>> ptcb->OSTCBStat &= ~msk; /* Clear bit associated with event type */
LAC * ,AR4
CMPL
ADRK 2
AND *
SACL *
.line 33
;>>>> if (ptcb->OSTCBStat == OS_STAT_RDY) { /* See if task is ready (could be susp'd) */
LAC *
BNZ L2
.line 34
;>>>> OSRdyGrp |= bity; /* Put task in the ready to run list */
LDPK _OSRdyGrp
LAC _OSRdyGrp
MAR * ,AR2
ADRK 10-LF1
OR *
SACL _OSRdyGrp
.line 35
;>>>> nn=OSRdyGrp;
BLDD _OSRdyGrp,#_nn
.line 36
;>>>> OSRdyTbl[y] |= bitx;
SBRK 2
LAC *+,AR0
ADLK _OSRdyTbl+0,0
SACL *
LAR AR5,* ,AR5
LAC * ,AR2
OR *-,AR5
SACL * ,AR2
.line 37
;>>>> nn=OSRdyTbl[y];
LAC * ,AR0
ADLK _OSRdyTbl+0,0
SACL *
LAR AR5,* ,AR5
BLDD * ,#_nn
L2:
EPI0_1:
.line 39
MAR * ,AR1
SBRK 8
LAR AR0,*-
PSHD *
RET
.endfunc 138,000000000H,7
.sym _OSEventTaskWait,_OSEventTaskWait,32,2,0
.globl _OSEventTaskWait
.func 156
;>>>> 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 7
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 9
ADD * ,AR0
SACL *
LAR AR5,* ,AR5
LAC * ,AR3
ADRK 10
OR *-,AR5
SACL * ,AR2
.line 8
;>>>> nn=pevent->OSEventTbl[OSTCBCur->OSTCBY];
LAC * ,AR3
ADDK 1
ADD * ,AR0
SACL *
LAR AR5,* ,AR5
BLDD * ,#_nn,AR2
.line 9
;>>>> pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
LAR AR5,* ,AR5
ADRK 5
LAC * ,AR3
ADRK 2
OR * ,AR5
SACL *
.line 10
;>>>> nn=pevent->OSEventGrp;
BLDD * ,#_nn,AR1
EPI0_2:
.line 11
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 166,000000000H,1
.sym _OSEventTO,_OSEventTO,32,2,0
.globl _OSEventTO
.func 184
;>>>> 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 10
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 5
AND *
SACL *
L4:
.line 6
;>>>> OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready */
LAR AR3,_OSTCBCur
LACK 0
MAR * ,AR3
ADRK 6
SACL *
.line 7
;>>>> OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
SBRK 3
SACL * ,AR1
EPI0_3:
.line 8
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 191,000000000H,1
.sym _OSEventWaitListInit,_OSEventWaitListInit,32,2,0
.globl _OSEventWaitListInit
.func 208
;>>>> 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 5
SACL * ,AR2
.line 7
;>>>> for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
ADRK 4-LF4
SACL *
ZALS *
SUBK 2
BGEZ 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 *
ZALS *
SUBK 2
SBRK 4-LF4
BLZ L5
L6:
EPI0_4:
.line 10
MAR * ,AR1
SBRK 3
LAR AR0,*-
PSHD *
RET
.endfunc 217,000000000H,2
.sym _OSInit,_OSInit,32,2,0
.globl _OSInit
.func 233
;>>>> 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 5
;>>>> OSTime = 0L; /* Clear the 32-bit system clock */
LACK 0
LDPK _OSTime
SACL _OSTime
SACH _OSTime+1
.line 6
;>>>> OSIntNesting = 0; /* Clear the interrupt nesting counter */
SACL _OSIntNesting
.line 7
;>>>> OSLockNesting = 0; /* Clear the scheduling lock counter */
;>>>> #if OS_TASK_CREATE_EN || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN
SACL _OSLockNesting
.line 9
;>>>> OSTaskCtr = 0; /* Clear the number of tasks */
;>>>> #endif
SACL _OSTaskCtr
.line 11
;>>>> OSRunning = FALSE; /* Indicate that multitasking not started */
SACL _OSRunning
.line 12
;>>>> 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 18
;>>>> OSCtxSwCtr = 0; /* Clear the context switch counter */
SACL _OSCtxSwCtr
SACH _OSCtxSwCtr+1
.line 19
;>>>> OSRdyGrp = 0; /* Clear the ready list */
SACL _OSRdyGrp
.line 20
;>>>> for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
LARK AR2,1
MAR *0+
SACL *
ZALS *
SUBK 2
BGEZ L8
L7:
.line 21
;>>>> OSRdyTbl[i] = 0;
LAC * ,AR0
ADLK _OSRdyTbl+0,0
SACL *
LAR AR3,* ,AR3
LACK 0
SACL * ,AR2
.line 20
LAC *
ADDK 1
SACL *
ZALS *
SUBK 2
BLZ L7
L8:
.line 24
;>>>> OSPrioCur = 0;
LACK 0
LDPK _OSPrioCur
SACL _OSPrioCur
.line 25
;>>>> OSPrioHighRdy = 0;
SACL _OSPrioHighRdy
.line 26
;>>>> OSTCBHighRdy = (OS_TCB *)0; /* TCB Initialization */
SACL _OSTCBHighRdy
.line 27
;>>>> OSTCBCur = (OS_TCB *)0;
SACL _OSTCBCur
.line 28
;>>>> OSTCBList = (OS_TCB *)0;
SACL _OSTCBList
.line 29
;>>>> for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
SACL *
ZALS *
SUBK 11
BGEZ L10
L9:
.line 30
;>>>> OSTCBPrioTbl[i] = (OS_TCB *)0;
LAC * ,AR0
ADLK _OSTCBPrioTbl+0,0
SACL *
LAR AR3,* ,AR3
LACK 0
SACL * ,AR2
.line 29
LAC *
ADDK 1
SACL *
ZALS *
SUBK 11
BLZ L9
L10:
.line 33
;>>>> for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
LACK 0
SACL *
ZALS *
SUBK 6
BGEZ L12
L11:
.line 34
;>>>> OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1];
LAC * ,AR0
ADDK 1
SACL *
LT * ,AR1
MPYK 12
PAC
ADLK _OSTCBTbl+0,0
SACL * ,AR2
LT * ,AR0
MPYK 12
PAC
ADLK _OSTCBTbl+0,0
SACL *
LAR AR3,* ,AR1
LAC * ,AR3
MAR *+
SACL * ,AR2
.line 33
LAC *
ADDK 1
SACL *
ZALS *
SUBK 6
BLZ L11
L12:
.line 36
;>>>> OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS - 1].OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
LRLK AR3,_OSTCBTbl+73
LACK 0
MAR * ,AR3
SACL * ,AR2
.line 37
;>>>> OSTCBFreeList = &OSTCBTbl[0];
;>>>> #if OS_MAX_EVENTS >= 2
LALK _OSTCBTbl+0
LDPK _OSTCBFreeList
SACL _OSTCBFreeList
.line 40
;>>>> for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
LACK 0
SACL *
ZALS *
SUBK 5
BGEZ L14
L13:
.line 41
;>>>> OSEventTbl[i].OSEventPtr = (OS_EVENT *)&OSEventTbl[i + 1];
LAC * ,AR0
ADDK 1
SACL *
LT * ,AR1
MPYK 6
PAC
ADLK _OSEventTbl+0,0
SACL * ,AR2
LT * ,AR0
MPYK 6
PAC
ADLK _OSEventTbl+0,0
SACL *
LAR AR3,* ,AR1
LAC * ,AR3
SACL * ,AR2
.line 40
LAC *
ADDK 1
SACL *
ZALS *
SUBK 5
BLZ L13
L14:
.line 43
;>>>> OSEventTbl[OS_MAX_EVENTS - 1].OSEventPtr = (OS_EVENT *)0;
LRLK AR3,_OSEventTbl+30
LACK 0
MAR * ,AR3
SACL *
.line 44
;>>>> 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 30
LDPK _OSEventFreeList
SAR AR3,_OSEventFreeList
.line 81
;>>>> 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 10
SACL *+
LALK _OSTaskIdleStk+0
SACL *+
LACK 0
SACL *+
LALK _OSTaskIdle+0
SACL *+
CALL _OSTaskCreate
SBRK 4
.line 115
;>>>> 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 9
SACL *+
LALK _OSTaskStatStk+0
SACL *+
LACK 0
SACL *+
LALK _OSTaskStat+0
SACL *+
CALL _OSTaskCreate
SBRK 4
EPI0_5:
.line 122
SBRK 3
LAR AR0,*-
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -