📄 ucos_ii.s
字号:
.dbline 774
; #endif
;
; #if OS_EVENT_TBL_SIZE > 2
; *ptbl++ = 0x00;
st Z+,R2
.dbline 778
; #endif
;
; #if OS_EVENT_TBL_SIZE > 3
; *ptbl++ = 0x00;
st Z+,R2
.dbline 782
; #endif
;
; #if OS_EVENT_TBL_SIZE > 4
; *ptbl++ = 0x00;
st Z+,R2
.dbline 786
; #endif
;
; #if OS_EVENT_TBL_SIZE > 5
; *ptbl++ = 0x00;
st Z+,R2
.dbline 790
; #endif
;
; #if OS_EVENT_TBL_SIZE > 6
; *ptbl++ = 0x00;
st Z+,R2
movw R20,R30
.dbline 794
; #endif
;
; #if OS_EVENT_TBL_SIZE > 7
; *ptbl = 0x00;
std z+0,R2
.dbline -2
L61:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r ptbl 20 pc
.dbsym r pevent 16 pS[os_event]
.dbend
.dbfunc s OS_InitEventList _OS_InitEventList fV
; pevent2 -> R22,R23
; i -> R10,R11
; pevent1 -> R20,R21
.even
_OS_InitEventList:
xcall push_xgsetF00C
.dbline -1
.dbline 813
; #endif
; }
; #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)
; {
.dbline 821
; #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
; #if (OS_MAX_EVENTS > 1)
; INT16U i;
; OS_EVENT *pevent1;
; OS_EVENT *pevent2;
;
;
; OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl)); /* Clear the event table */
ldi R18,70
ldi R19,0
ldi R16,<_OSEventTbl
ldi R17,>_OSEventTbl
xcall _OS_MemClr
.dbline 822
; pevent1 = &OSEventTbl[0];
ldi R20,<_OSEventTbl
ldi R21,>_OSEventTbl
.dbline 823
; pevent2 = &OSEventTbl[1];
ldi R22,<_OSEventTbl+14
ldi R23,>_OSEventTbl+14
.dbline 824
; for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
clr R10
clr R11
xjmp L67
L64:
.dbline 824
.dbline 825
; pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
clr R2
movw R30,R20
std z+0,R2
.dbline 826
; pevent1->OSEventPtr = pevent2;
std z+5,R23
std z+4,R22
.dbline 831
; #if OS_EVENT_NAME_SIZE > 1
; pevent1->OSEventName[0] = '?'; /* Unknown name */
; pevent1->OSEventName[1] = OS_ASCII_NUL;
; #endif
; pevent1++;
subi R20,242 ; offset = 14
sbci R21,255
.dbline 832
; pevent2++;
subi R22,242 ; offset = 14
sbci R23,255
.dbline 833
; }
L65:
.dbline 824
movw R24,R10
adiw R24,1
movw R10,R24
L67:
.dbline 824
movw R24,R10
cpi R24,4
ldi R30,0
cpc R25,R30
brlo L64
X33:
.dbline 834
; pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
clr R2
movw R30,R20
std z+0,R2
.dbline 835
; pevent1->OSEventPtr = (OS_EVENT *)0;
clr R3
std z+5,R3
std z+4,R2
.dbline 840
; #if OS_EVENT_NAME_SIZE > 1
; pevent1->OSEventName[0] = '?';
; pevent1->OSEventName[1] = OS_ASCII_NUL;
; #endif
; OSEventFreeList = &OSEventTbl[0];
ldi R24,<_OSEventTbl
ldi R25,>_OSEventTbl
sts _OSEventFreeList+1,R25
sts _OSEventFreeList,R24
.dbline -2
L62:
.dbline 0 ; func end
xjmp pop_xgsetF00C
.dbsym r pevent2 22 pS[os_event]
.dbsym r i 10 i
.dbsym r pevent1 20 pS[os_event]
.dbend
.dbfunc s OS_InitMisc _OS_InitMisc fV
.even
_OS_InitMisc:
.dbline -1
.dbline 867
; #else
; OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
; OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
; OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
; #if OS_EVENT_NAME_SIZE > 1
; OSEventFreeList->OSEventName[0] = '?'; /* Unknown name */
; OSEventFreeList->OSEventName[1] = OS_ASCII_NUL;
; #endif
; #endif
; #endif
; }
; /*$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)
; {
.dbline 872
; #if OS_TIME_GET_SET_EN > 0
; OSTime = 0L; /* Clear the 32-bit system clock */
; #endif
;
; OSIntNesting = 0; /* Clear the interrupt nesting counter */
clr R2
sts _OSIntNesting,R2
.dbline 873
; OSLockNesting = 0; /* Clear the scheduling lock counter */
sts _OSLockNesting,R2
.dbline 875
;
; OSTaskCtr = 0; /* Clear the number of tasks */
sts _OSTaskCtr,R2
.dbline 877
;
; OSRunning = FALSE; /* Indicate that multitasking not started */
sts _OSRunning,R2
.dbline 879
;
; OSCtxSwCtr = 0; /* Clear the context switch counter */
ldi R24,0
ldi R25,0
ldi R26,0
ldi R27,0
sts _OSCtxSwCtr+1,R25
sts _OSCtxSwCtr,R24
sts _OSCtxSwCtr+2+1,R27
sts _OSCtxSwCtr+2,R26
.dbline 880
; OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
ldi R24,0
ldi R25,0
ldi R26,0
ldi R27,0
sts _OSIdleCtr+1,R25
sts _OSIdleCtr,R24
sts _OSIdleCtr+2+1,R27
sts _OSIdleCtr+2,R26
.dbline -2
L68:
.dbline 0 ; func end
ret
.dbend
.dbfunc s OS_InitRdyList _OS_InitRdyList fV
; prdytbl -> R18,R19
; i -> R16,R17
.even
_OS_InitRdyList:
.dbline -1
.dbline 903
;
; #if OS_TASK_STAT_EN > 0
; OSIdleCtrRun = 0L;
; OSIdleCtrMax = 0L;
; OSStatRdy = FALSE; /* Statistic task is not ready */
; #endif
; }
; /*$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)
; {
.dbline 908
; INT16U i;
; INT8U *prdytbl;
;
;
; OSRdyGrp = 0x00; /* Clear the ready list */
clr R2
sts _OSRdyGrp,R2
.dbline 909
; prdytbl = &OSRdyTbl[0];
ldi R18,<_OSRdyTbl
ldi R19,>_OSRdyTbl
.dbline 910
; for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
clr R16
clr R17
xjmp L73
L70:
.dbline 910
.dbline 911
; *prdytbl++ = 0x00;
clr R2
movw R30,R18
st Z+,R2
movw R18,R30
.dbline 912
; }
L71:
.dbline 910
subi R16,255 ; offset = 1
sbci R17,255
L73:
.dbline 910
cpi R16,8
ldi R30,0
cpc R17,R30
brlo L70
X34:
.dbline 914
;
; OSPrioCur = 0;
clr R2
sts _OSPrioCur,R2
.dbline 915
; OSPrioHighRdy = 0;
sts _OSPrioHighRdy,R2
.dbline 917
;
; OSTCBHighRdy = (OS_TCB *)0;
clr R3
sts _OSTCBHighRdy+1,R3
sts _OSTCBHighRdy,R2
.dbline 918
; OSTCBCur = (OS_TCB *)0;
sts _OSTCBCur+1,R3
sts _OSTCBCur,R2
.dbline -2
L69:
.dbline 0 ; func end
ret
.dbsym r prdytbl 18 pc
.dbsym r i 16 i
.dbend
.dbfunc s OS_InitTaskIdle _OS_InitTaskIdle fV
.even
_OS_InitTaskIdle:
sbiw R28,3
.dbline -1
.dbline 936
; }
;
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * INITIALIZATION
; * CREATING THE IDLE TASK
; *
; * Description: This function creates the Idle Task.
; *
; * Arguments : none
; *
; * Returns : none
; *********************************************************************************************************
; */
;
; static void OS_InitTaskIdle (void)
; {
.dbline 961
; #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,
ldi R24,63
std y+2,R24
ldi R24,<_OSTaskIdleStk+255
ldi R25,>_OSTaskIdleStk+255
std y+1,R25
std y+0,R24
clr R18
clr R19
ldi R16,<PL_OS_TaskIdle
ldi R17,>PL_OS_TaskIdle
xcall _OSTaskCreate
.dbline -2
L74:
.dbline 0 ; func end
adiw R28,3
ret
.dbend
.dbfunc s OS_InitTCBList _OS_InitTCBList fV
; ptcb2 -> R22,R23
; i -> R10
; ptcb1 -> R20,R21
.even
_OS_InitTCBList:
xcall push_xgsetF00C
.dbline -1
.dbline 1042
; (void *)0,
; &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)
; {
; #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_S
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -