📄 os_core.s
字号:
;
; for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
cpi R22,2
brlo L71
.dbline -2
L70:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r ptbl 20 pc
.dbsym r i 22 c
.dbsym r pevent 16 pS[os_event]
.dbend
.dbfunc s OS_InitEventList _OS_InitEventList fV
; pevent2 -> R20,R21
; i -> R22,R23
; pevent1 -> R10,R11
.even
_OS_InitEventList:
xcall push_gset3
.dbline -1
.dbline 815
; *ptbl++ = 0;
; }
; }
; #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 823
; #if OS_EVENT_EN && (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,40
ldi R19,0
ldi R16,<_OSEventTbl
ldi R17,>_OSEventTbl
xcall _OS_MemClr
.dbline 824
; pevent1 = &OSEventTbl[0];
ldi R24,<_OSEventTbl
ldi R25,>_OSEventTbl
movw R10,R24
.dbline 825
; pevent2 = &OSEventTbl[1];
ldi R20,<_OSEventTbl+8
ldi R21,>_OSEventTbl+8
.dbline 826
clr R22
clr R23
xjmp L80
L77:
.dbline 826
.dbline 827
clr R2
movw R30,R10
std z+0,R2
.dbline 828
std z+2,R21
std z+1,R20
.dbline 833
movw R24,R10
adiw R24,8
movw R10,R24
.dbline 834
subi R20,248 ; offset = 8
sbci R21,255
.dbline 835
L78:
.dbline 826
subi R22,255 ; offset = 1
sbci R23,255
L80:
.dbline 826
; for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
cpi R22,4
ldi R30,0
cpc R23,R30
brlo L77
.dbline 836
; pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
; pevent1->OSEventPtr = pevent2;
; #if OS_EVENT_NAME_SIZE > 1
; pevent1->OSEventName[0] = '?'; /* Unknown name */
; pevent1->OSEventName[1] = OS_ASCII_NUL;
; #endif
; pevent1++;
; pevent2++;
; }
; pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
clr R2
movw R30,R10
std z+0,R2
.dbline 837
; pevent1->OSEventPtr = (OS_EVENT *)0;
clr R3
std z+2,R3
std z+1,R2
.dbline 842
; #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
L75:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r pevent2 20 pS[os_event]
.dbsym r i 22 i
.dbsym r pevent1 10 pS[os_event]
.dbend
.dbfunc s OS_InitMisc _OS_InitMisc fV
.even
_OS_InitMisc:
xcall push_gset2
.dbline -1
.dbline 869
; #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 874
; #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 875
; OSLockNesting = 0; /* Clear the scheduling lock counter */
sts _OSLockNesting,R2
.dbline 877
;
; OSTaskCtr = 0; /* Clear the number of tasks */
sts _OSTaskCtr,R2
.dbline 879
;
; OSRunning = FALSE; /* Indicate that multitasking not started */
sts _OSRunning,R2
.dbline 881
;
; OSCtxSwCtr = 0; /* Clear the context switch counter */
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _OSCtxSwCtr+1,R21
sts _OSCtxSwCtr,R20
sts _OSCtxSwCtr+2+1,R23
sts _OSCtxSwCtr+2,R22
.dbline 882
; OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _OSIdleCtr+1,R21
sts _OSIdleCtr,R20
sts _OSIdleCtr+2+1,R23
sts _OSIdleCtr+2,R22
.dbline -2
L81:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbend
.dbfunc s OS_InitRdyList _OS_InitRdyList fV
; prdytbl -> R16,R17
; i -> R18
.even
_OS_InitRdyList:
.dbline -1
.dbline 905
;
; #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 914
; INT8U i;
; #if OS_LOWEST_PRIO <= 63
; INT8U *prdytbl;
; #else
; INT16U *prdytbl;
; #endif
;
;
; OSRdyGrp = 0; /* Clear the ready list */
clr R2
sts _OSRdyGrp,R2
.dbline 915
; prdytbl = &OSRdyTbl[0];
ldi R16,<_OSRdyTbl
ldi R17,>_OSRdyTbl
.dbline 916
clr R18
xjmp L86
L83:
.dbline 916
.dbline 917
clr R2
movw R30,R16
st Z+,R2
movw R16,R30
.dbline 918
L84:
.dbline 916
inc R18
L86:
.dbline 916
; for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
cpi R18,2
brlo L83
.dbline 920
; *prdytbl++ = 0;
; }
;
; OSPrioCur = 0;
clr R2
sts _OSPrioCur,R2
.dbline 921
; OSPrioHighRdy = 0;
sts _OSPrioHighRdy,R2
.dbline 923
;
; OSTCBHighRdy = (OS_TCB *)0;
clr R3
sts _OSTCBHighRdy+1,R3
sts _OSTCBHighRdy,R2
.dbline 924
; OSTCBCur = (OS_TCB *)0;
sts _OSTCBCur+1,R3
sts _OSTCBCur,R2
.dbline -2
L82:
.dbline 0 ; func end
ret
.dbsym r prdytbl 16 pc
.dbsym r i 18 c
.dbend
.dbfunc s OS_InitTaskIdle _OS_InitTaskIdle fV
.even
_OS_InitTaskIdle:
sbiw R28,3
.dbline -1
.dbline 942
; }
;
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * INITIALIZATION
; * CREATING THE IDLE TASK
; *
; * Description: This function creates the Idle Task.
; *
; * Arguments : none
; *
; * Returns : none
; *********************************************************************************************************
; */
;
; static void OS_InitTaskIdle (void)
; {
.dbline 972
; #if OS_TASK_NAME_SIZE > 14
; INT8U err;
; #endif
;
;
; #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,8
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
L87:
adiw R28,3
.dbline 0 ; func end
ret
.dbend
.dbfunc s OS_InitTCBList _OS_InitTCBList fV
; ptcb2 -> R20,R21
; i -> R22
; ptcb1 -> R10,R11
.even
_OS_InitTCBList:
xcall push_gset3
.dbline -1
.dbline 1066
; (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
;
; #if OS_TASK_NAME_SIZE > 14
; OSTaskNameSet(OS_IDLE_PRIO, (INT8U *)"uC/OS-II Idle", &err);
; #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_NAME_SIZE > 14
; INT8U err;
; #endif
;
;
; #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()*/
; &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],
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -