⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucosii.lst

📁 ucos-ii-at90S-icc-avr
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -