📄 ucosii.lst
字号:
(0173) *********************************************************************************************************
(0174) */
(0175) #if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_EN
(0176) void OSEventTO (OS_EVENT *pevent)
(0177) {
(0178) if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
_OSEventTO:
pevent --> R16
02CC 2F80 MOV R24,R16
02CD 2F91 MOV R25,R17
02CE 9602 ADIW R24,2
02CF 91E00145 LDS R30,_OSTCBCur
02D1 91F00146 LDS R31,_OSTCBCur+1
02D3 8425 LDD R2,13+Z
02D4 2433 CLR R3
02D5 0E28 ADD R2,R24
02D6 1E39 ADC R3,R25
02D7 8446 LDD R4,14+Z
02D8 9440 COM R4
02D9 2DE2 MOV R30,R2
02DA 2DF3 MOV R31,R3
02DB 8050 LDD R5,0+Z
02DC 2054 AND R5,R4
02DD 2C45 MOV R4,R5
02DE 8240 STD R4,0+Z
02DF 2055 TST R5
02E0 F471 BNE 0x02EF
(0179) pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
02E1 2F80 MOV R24,R16
02E2 2F91 MOV R25,R17
02E3 9608 ADIW R24,0x8
02E4 91E00145 LDS R30,_OSTCBCur
02E6 91F00146 LDS R31,_OSTCBCur+1
02E8 8447 LDD R4,15+Z
02E9 9440 COM R4
02EA 2FE8 MOV R30,R24
02EB 2FF9 MOV R31,R25
02EC 8050 LDD R5,0+Z
02ED 2054 AND R5,R4
02EE 8250 STD R5,0+Z
(0180) }
(0181) OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready */
02EF 2422 CLR R2
02F0 91E00145 LDS R30,_OSTCBCur
02F2 91F00146 LDS R31,_OSTCBCur+1
02F4 8622 STD R2,10+Z
(0182) OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
02F5 2433 CLR R3
02F6 8226 STD R2,6+Z
02F7 8237 STD R3,7+Z
(0183) }
02F8 9508 RET
_OSEventWaitListInit:
i --> R20
pevent --> R16
02F9 DA03 RCALL push_gset1
(0184) #endif
(0185) /*$PAGE*/
(0186) /*
(0187) *********************************************************************************************************
(0188) * INITIALIZE EVENT CONTROL BLOCK'S WAIT LIST
(0189) *
(0190) * Description: This function is called by other uC/OS-II services to initialize the event wait list.
(0191) *
(0192) * Arguments : pevent is a pointer to the event control block allocated to the event.
(0193) *
(0194) * Returns : none
(0195) *
(0196) * Note : This function is INTERNAL to uC/OS-II and your application should not call it.
(0197) *********************************************************************************************************
(0198) */
(0199) #if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_EN
(0200) void OSEventWaitListInit (OS_EVENT *pevent)
(0201) {
(0202) INT8U i;
(0203)
(0204)
(0205) pevent->OSEventGrp = 0x00; /* No task waiting on event */
02FA 2422 CLR R2
02FB 2FE0 MOV R30,R16
02FC 2FF1 MOV R31,R17
02FD 8620 STD R2,8+Z
(0206) for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
02FE 2744 CLR R20
02FF C00A RJMP 0x030A
(0207) pevent->OSEventTbl[i] = 0x00;
0300 2F80 MOV R24,R16
0301 2F91 MOV R25,R17
0302 9602 ADIW R24,2
0303 2FE4 MOV R30,R20
0304 27FF CLR R31
0305 0FE8 ADD R30,R24
0306 1FF9 ADC R31,R25
0307 2422 CLR R2
0308 8220 STD R2,0+Z
0309 9543 INC R20
030A 3043 CPI R20,3
030B F3A0 BCS 0x0300
(0208) }
(0209) }
030C D9F3 RCALL pop_gset1
030D 9508 RET
_OSInit:
i --> R20
030E D9EE RCALL push_gset1
030F 9723 SBIW R28,3
(0210) #endif
(0211) /*$PAGE*/
(0212) /*
(0213) *********************************************************************************************************
(0214) * INITIALIZATION
(0215) *
(0216) * Description: This function is used to initialize the internals of uC/OS-II and MUST be called prior to
(0217) * creating any uC/OS-II object and, prior to calling OSStart().
(0218) *
(0219) * Arguments : none
(0220) *
(0221) * Returns : none
(0222) *********************************************************************************************************
(0223) */
(0224)
(0225) void OSInit (void)
(0226) {
(0227) INT16U i;
(0228)
(0229)
(0230) OSTime = 0L; /* Clear the 32-bit system clock */
0310 E080 LDI R24,0
0311 E090 LDI R25,0
0312 E0A0 LDI R26,0
0313 E0B0 LDI R27,0
0314 93900112 STS R25,_OSTime+1
0316 93800111 STS R24,_OSTime
0318 93B00114 STS R27,_OSTime+3
031A 93A00113 STS R26,_OSTime+2
(0231) OSIntNesting = 0; /* Clear the interrupt nesting counter */
031C 2422 CLR R2
031D 92200150 STS R2,_OSIntNesting
(0232) OSLockNesting = 0; /* Clear the scheduling lock counter */
031F 9220014F STS R2,_OSLockNesting
(0233) #if OS_TASK_CREATE_EN || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN
(0234) OSTaskCtr = 0; /* Clear the number of tasks */
0321 92200147 STS R2,_OSTaskCtr
(0235) #endif
(0236) OSRunning = FALSE; /* Indicate that multitasking not started */
0323 92200148 STS R2,_OSRunning
(0237) OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
0325 E080 LDI R24,0
0326 E090 LDI R25,0
0327 E0A0 LDI R26,0
0328 E0B0 LDI R27,0
0329 93900152 STS R25,_OSIdleCtr+1
032B 93800151 STS R24,_OSIdleCtr
032D 93B00154 STS R27,_OSIdleCtr+3
032F 93A00153 STS R26,_OSIdleCtr+2
(0238) #if OS_TASK_STAT_EN && OS_TASK_CREATE_EXT_EN
(0239) OSIdleCtrRun = 0L;
(0240) OSIdleCtrMax = 0L;
(0241) OSStatRdy = FALSE; /* Statistic task is not ready */
(0242) #endif
(0243) OSCtxSwCtr = 0; /* Clear the context switch counter */
0331 E080 LDI R24,0
0332 E090 LDI R25,0
0333 E0A0 LDI R26,0
0334 E0B0 LDI R27,0
0335 9390016A STS R25,_OSCtxSwCtr+1
0337 93800169 STS R24,_OSCtxSwCtr
0339 93B0016C STS R27,_OSCtxSwCtr+3
033B 93A0016B STS R26,_OSCtxSwCtr+2
(0244) OSRdyGrp = 0; /* Clear the ready list */
033D 9220014C STS R2,_OSRdyGrp
(0245) for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
033F 2744 CLR R20
0340 2755 CLR R21
0341 C00A RJMP 0x034C
(0246) OSRdyTbl[i] = 0;
0342 E489 LDI R24,0x49
0343 E091 LDI R25,1
0344 2FE4 MOV R30,R20
0345 2FF5 MOV R31,R21
0346 0FE8 ADD R30,R24
0347 1FF9 ADC R31,R25
0348 2422 CLR R2
0349 8220 STD R2,0+Z
034A 5F4F SUBI R20,0xFF
034B 4F5F SBCI R21,0xFF
034C 3043 CPI R20,3
034D E0E0 LDI R30,0
034E 075E CPC R21,R30
034F F390 BCS 0x0342
(0247) }
(0248)
(0249) OSPrioCur = 0;
0350 2422 CLR R2
0351 9220014E STS R2,_OSPrioCur
(0250) OSPrioHighRdy = 0;
0353 9220014D STS R2,_OSPrioHighRdy
(0251) OSTCBHighRdy = (OS_TCB *)0; /* TCB Initialization */
0355 2433 CLR R3
0356 92300142 STS R3,_OSTCBHighRdy+1
0358 92200141 STS R2,_OSTCBHighRdy
(0252) OSTCBCur = (OS_TCB *)0;
035A 92300146 STS R3,_OSTCBCur+1
035C 92200145 STS R2,_OSTCBCur
(0253) OSTCBList = (OS_TCB *)0;
035E 92300140 STS R3,_OSTCBList+1
0360 9220013F STS R2,_OSTCBList
(0254) for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
0362 2744 CLR R20
0363 2755 CLR R21
0364 C00E RJMP 0x0373
(0255) OSTCBPrioTbl[i] = (OS_TCB *)0;
0365 E185 LDI R24,0x15
0366 E091 LDI R25,1
0367 2FE4 MOV R30,R20
0368 2FF5 MOV R31,R21
0369 0FEE LSL R30
036A 1FFF ROL R31
036B 0FE8 ADD R30,R24
036C 1FF9 ADC R31,R25
036D 2422 CLR R2
036E 2433 CLR R3
036F 8220 STD R2,0+Z
0370 8231 STD R3,1+Z
0371 5F4F SUBI R20,0xFF
0372 4F5F SBCI R21,0xFF
0373 3145 CPI R20,0x15
0374 E0E0 LDI R30,0
0375 075E CPC R21,R30
0376 F370 BCS 0x0365
(0256) }
(0257) for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
0377 2744 CLR R20
0378 2755 CLR R21
0379 C021 RJMP 0x039B
(0258) OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1];
037A E680 LDI R24,0x60
037B E090 LDI R25,0
037C 2FE4 MOV R30,R20
037D 2FF5 MOV R31,R21
037E 9631 ADIW R30,1
037F 0FEE LSL R30
0380 1FFF ROL R31
0381 0FEE LSL R30
0382 1FFF ROL R31
0383 0FEE LSL R30
0384 1FFF ROL R31
0385 0FEE LSL R30
0386 1FFF ROL R31
0387 0FE8 ADD R30,R24
0388 1FF9 ADC R31,R25
0389 E682 LDI R24,0x62
038A E090 LDI R25,0
038B 2FA4 MOV R26,R20
038C 2FB5 MOV R27,R21
038D 0FAA LSL R26
038E 1FBB ROL R27
038F 0FAA LSL R26
0390 1FBB ROL R27
0391 0FAA LSL R26
0392 1FBB ROL R27
0393 0FAA LSL R26
0394 1FBB ROL R27
0395 0FA8 ADD R26,R24
0396 1FB9 ADC R27,R25
0397 93ED ST R30,X+
0398 93FC ST R31,0(X)
0399 5F4F SUBI R20,0xFF
039A 4F5F SBCI R21,0xFF
039B 3044 CPI R20,4
039C E0E0 LDI R30,0
039D 075E CPC R21,R30
039E F2D8 BCS 0x037A
(0259) }
(0260) OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS - 1].OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
039F 2422 CLR R2
03A0 2433 CLR R3
03A1 923000A3 STS R3,0xA3
03A3 922000A2 STS R2,0xA2
(0261) OSTCBFreeList = &OSTCBTbl[0];
03A5 E680 LDI R24,0x60
03A6 E090 LDI R25,0
03A7 93900144 STS R25,_OSTCBFreeList+1
03A9 93800143 STS R24,_OSTCBFreeList
(0262)
(0263) #if OS_MAX_EVENTS >= 2
(0264) for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
03AB 2744 CLR R20
03AC 2755 CLR R21
03AD C01C RJMP 0x03CA
(0265) OSEventTbl[i].OSEventPtr = (OS_EVENT *)&OSEventTbl[i + 1];
03AE 2F24 MOV R18,R20
03AF 2F35 MOV R19,R21
03B0 5F2F SUBI R18,0xFF
03B1 4F3F SBCI R19,0xFF
03B2 E009 LDI R16,0x9
03B3 E010 LDI R17,0
03B4 D92F RCALL mpy16s
03B5 2E20 MOV R2,R16
03B6 2E31 MOV R3,R17
03B7 E585 LDI R24,0x55
03B8 E091 LDI R25,1
03B9 0E28 ADD R2,R24
03BA 1E39 ADC R3,R25
03BB E009 LDI R16,0x9
03BC E010 LDI R17,0
03BD 2F24 MOV R18,R20
03BE 2F35 MOV R19,R21
03BF D924 RCALL mpy16s
03C0 2FE0 MOV R30,R16
03C1 2FF1 MOV R31,R17
03C2 E585 LDI R24,0x55
03C3 E091 LDI R25,1
03C4 0FE8 ADD R30,R24
03C5 1FF9 ADC R31,R25
03C6 8220 STD R2,0+Z
03C7 8231 STD R3,1+Z
03C8 5F4F SUBI R20,0xFF
03C9 4F5F SBCI R21,0xFF
03CA 3041 CPI R20,1
03CB E0E0 LDI R30,0
03CC 075E CPC R21,R30
03CD F300 BCS 0x03AE
(0266) }
(0267) OSEventTbl[OS_MAX_EVENTS - 1].OSEventPtr = (OS_EVENT *)0;
03CE 2422 CLR R2
03CF 2433 CLR R3
03D0 9230015F STS R3,0x15F
03D2 9220015E STS R2,0x15E
(0268) OSEventFreeList = &OSEventTbl[0];
03D4 E585 LDI R24,0x55
03D5 E091 LDI R25,1
03D6 93900168 STS R25,_OSEventFreeList+1
03D8 93800167 STS R24,_OSEventFreeList
(0269) #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -