test.lst

来自「uCOS-II工程文件,使用ICC编译。」· LST 代码 · 共 1,555 行 · 第 1/5 页

LST
1,555
字号
    0556 2433      CLR	R3
    0557 0E28      ADD	R2,R24
    0558 1E39      ADC	R3,R25
    0559 91E00196  LDS	R30,OSTCBCur
    055B 91F00197  LDS	R31,OSTCBCur+1
    055D 8446      LDD	R4,Z+14
    055E 9440      COM	R4
    055F 01F1      MOVW	R30,R2
    0560 8050      LDD	R5,Z+0
    0561 2054      AND	R5,R4
    0562 8250      STD	Z+0,R5
(0705)     if (OSRdyTbl[y] == 0x00) {                   
    0563 2FE4      MOV	R30,R20
    0564 27FF      CLR	R31
    0565 0FE8      ADD	R30,R24
    0566 1FF9      ADC	R31,R25
    0567 8020      LDD	R2,Z+0
    0568 2022      TST	R2
    0569 F459      BNE	0x0575
(0706)         OSRdyGrp &= ~OSTCBCur->OSTCBBitY;        /* Clear event grp bit if this was only task pending  */
    056A 91E00196  LDS	R30,OSTCBCur
    056C 91F00197  LDS	R31,OSTCBCur+1
    056E 8427      LDD	R2,Z+15
    056F 9420      COM	R2
    0570 90300203  LDS	R3,OSRdyGrp
    0572 2032      AND	R3,R2
    0573 92300203  STS	OSRdyGrp,R3
(0707)     }
(0708)     pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;          /* Put task in waiting list  */
    0575 01C8      MOVW	R24,R16
    0576 9606      ADIW	R24,6
    0577 91E00196  LDS	R30,OSTCBCur
    0579 91F00197  LDS	R31,OSTCBCur+1
    057B 8425      LDD	R2,Z+13
    057C 2433      CLR	R3
    057D 0E28      ADD	R2,R24
    057E 1E39      ADC	R3,R25
    057F 91E00196  LDS	R30,OSTCBCur
    0581 91F00197  LDS	R31,OSTCBCur+1
    0583 8446      LDD	R4,Z+14
    0584 01F1      MOVW	R30,R2
    0585 8050      LDD	R5,Z+0
    0586 2854      OR	R5,R4
    0587 8250      STD	Z+0,R5
(0709)     pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY;
    0588 01C8      MOVW	R24,R16
    0589 9601      ADIW	R24,1
    058A 91E00196  LDS	R30,OSTCBCur
    058C 91F00197  LDS	R31,OSTCBCur+1
    058E 8447      LDD	R4,Z+15
    058F 01FC      MOVW	R30,R24
    0590 8050      LDD	R5,Z+0
    0591 2854      OR	R5,R4
    0592 8250      STD	Z+0,R5
    0593 940E12ED  CALL	pop_gset1
    0595 9508      RET
_OS_EventTO:
  y                    --> R20
  pevent               --> R16
    0596 940E12EA  CALL	push_gset1
(0710) }
(0711) #endif
(0712) /*$PAGE*/
(0713) /*
(0714) *********************************************************************************************************
(0715) *                              MAKE TASK READY TO RUN BASED ON EVENT TIMEOUT
(0716) *
(0717) * Description: This function is called by other uC/OS-II services to make a task ready to run because a
(0718) *              timeout occurred.
(0719) *
(0720) * Arguments  : pevent   is a pointer to the event control block which is readying a task.
(0721) *
(0722) * Returns    : none
(0723) *
(0724) * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
(0725) *********************************************************************************************************
(0726) */
(0727) #if OS_EVENT_EN > 0
(0728) void  OS_EventTO (OS_EVENT *pevent)
(0729) {
(0730)     INT8U  y;
(0731) 
(0732) 
(0733)     y                      = OSTCBCur->OSTCBY;
    0598 91E00196  LDS	R30,OSTCBCur
    059A 91F00197  LDS	R31,OSTCBCur+1
    059C 8545      LDD	R20,Z+13
(0734)     pevent->OSEventTbl[y] &= ~OSTCBCur->OSTCBBitX;
    059D 01C8      MOVW	R24,R16
    059E 9606      ADIW	R24,6
    059F 2E24      MOV	R2,R20
    05A0 2433      CLR	R3
    05A1 0E28      ADD	R2,R24
    05A2 1E39      ADC	R3,R25
    05A3 91E00196  LDS	R30,OSTCBCur
    05A5 91F00197  LDS	R31,OSTCBCur+1
    05A7 8446      LDD	R4,Z+14
    05A8 9440      COM	R4
    05A9 01F1      MOVW	R30,R2
    05AA 8050      LDD	R5,Z+0
    05AB 2054      AND	R5,R4
    05AC 8250      STD	Z+0,R5
(0735)     if (pevent->OSEventTbl[y] == 0x00) {
    05AD 01C8      MOVW	R24,R16
    05AE 9606      ADIW	R24,6
    05AF 2FE4      MOV	R30,R20
    05B0 27FF      CLR	R31
    05B1 0FE8      ADD	R30,R24
    05B2 1FF9      ADC	R31,R25
    05B3 8020      LDD	R2,Z+0
    05B4 2022      TST	R2
    05B5 F461      BNE	0x05C2
(0736)         pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
    05B6 01C8      MOVW	R24,R16
    05B7 9601      ADIW	R24,1
    05B8 91E00196  LDS	R30,OSTCBCur
    05BA 91F00197  LDS	R31,OSTCBCur+1
    05BC 8447      LDD	R4,Z+15
    05BD 9440      COM	R4
    05BE 01FC      MOVW	R30,R24
    05BF 8050      LDD	R5,Z+0
    05C0 2054      AND	R5,R4
    05C1 8250      STD	Z+0,R5
(0737)     }
(0738)     OSTCBCur->OSTCBStat     = OS_STAT_RDY;       /* Set status to ready                                */
    05C2 2422      CLR	R2
    05C3 91E00196  LDS	R30,OSTCBCur
    05C5 91F00197  LDS	R31,OSTCBCur+1
    05C7 8622      STD	Z+10,R2
(0739)     OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;     /* No longer waiting for event                        */
    05C8 2433      CLR	R3
    05C9 91E00196  LDS	R30,OSTCBCur
    05CB 91F00197  LDS	R31,OSTCBCur+1
    05CD 8237      STD	Z+7,R3
    05CE 8226      STD	Z+6,R2
    05CF 940E12ED  CALL	pop_gset1
    05D1 9508      RET
_OS_EventWaitListInit:
  ptbl                 --> R20
  pevent               --> R16
    05D2 940E12EA  CALL	push_gset1
(0740) }
(0741) #endif
(0742) /*$PAGE*/
(0743) /*
(0744) *********************************************************************************************************
(0745) *                                 INITIALIZE EVENT CONTROL BLOCK'S WAIT LIST
(0746) *
(0747) * Description: This function is called by other uC/OS-II services to initialize the event wait list.
(0748) *
(0749) * Arguments  : pevent    is a pointer to the event control block allocated to the event.
(0750) *
(0751) * Returns    : none
(0752) *
(0753) * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
(0754) *********************************************************************************************************
(0755) */
(0756) #if OS_EVENT_EN > 0
(0757) void  OS_EventWaitListInit (OS_EVENT *pevent)
(0758) {
(0759)     INT8U  *ptbl;
(0760) 
(0761) 
(0762)     pevent->OSEventGrp = 0x00;                   /* No task waiting on event                           */
    05D4 2422      CLR	R2
    05D5 01F8      MOVW	R30,R16
    05D6 8221      STD	Z+1,R2
(0763)     ptbl               = &pevent->OSEventTbl[0];
    05D7 01A8      MOVW	R20,R16
    05D8 5F4A      SUBI	R20,0xFA
    05D9 4F5F      SBCI	R21,0xFF
(0764) 
(0765) #if OS_EVENT_TBL_SIZE > 0
(0766)     *ptbl++            = 0x00;
    05DA 01FA      MOVW	R30,R20
    05DB 9221      ST	R2,Z+
    05DC 01AF      MOVW	R20,R30
    05DD 940E12ED  CALL	pop_gset1
    05DF 9508      RET
(0767) #endif
(0768) 
(0769) #if OS_EVENT_TBL_SIZE > 1
(0770)     *ptbl++            = 0x00;
(0771) #endif
(0772) 
(0773) #if OS_EVENT_TBL_SIZE > 2
(0774)     *ptbl++            = 0x00;
(0775) #endif
(0776) 
(0777) #if OS_EVENT_TBL_SIZE > 3
(0778)     *ptbl++            = 0x00;
(0779) #endif
(0780) 
(0781) #if OS_EVENT_TBL_SIZE > 4
(0782)     *ptbl++            = 0x00;
(0783) #endif
(0784) 
(0785) #if OS_EVENT_TBL_SIZE > 5
(0786)     *ptbl++            = 0x00;
(0787) #endif
(0788) 
(0789) #if OS_EVENT_TBL_SIZE > 6
(0790)     *ptbl++            = 0x00;
(0791) #endif
(0792) 
(0793) #if OS_EVENT_TBL_SIZE > 7
(0794)     *ptbl              = 0x00;
(0795) #endif
(0796) }
(0797) #endif
(0798) /*$PAGE*/
(0799) /*
(0800) *********************************************************************************************************
(0801) *                                             INITIALIZATION
(0802) *                           INITIALIZE THE FREE LIST OF EVENT CONTROL BLOCKS
(0803) *
(0804) * Description: This function is called by OSInit() to initialize the free list of event control blocks.
(0805) *
(0806) * Arguments  : none
(0807) *
(0808) * Returns    : none
(0809) *********************************************************************************************************
(0810) */
(0811) 
(0812) static  void  OS_InitEventList (void)
(0813) {
(0814) #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
(0815) #if (OS_MAX_EVENTS > 1)
(0816)     INT16U     i;
(0817)     OS_EVENT  *pevent1;
(0818)     OS_EVENT  *pevent2;
(0819) 
(0820) 
(0821)     OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl));      /* Clear the event table                    */
(0822)     pevent1 = &OSEventTbl[0];
(0823)     pevent2 = &OSEventTbl[1];
(0824)     for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {                  /* Init. list of free EVENT control blocks  */
(0825)         pevent1->OSEventType    = OS_EVENT_TYPE_UNUSED;
(0826)         pevent1->OSEventPtr     = pevent2;
(0827) #if OS_EVENT_NAME_SIZE > 1
(0828)         pevent1->OSEventName[0] = '?';                           /* Unknown name                             */
(0829)         pevent1->OSEventName[1] = OS_ASCII_NUL;
(0830) #endif
(0831)         pevent1++;
(0832)         pevent2++;
(0833)     }
(0834)     pevent1->OSEventType            = OS_EVENT_TYPE_UNUSED;
(0835)     pevent1->OSEventPtr             = (OS_EVENT *)0;
(0836) #if OS_EVENT_NAME_SIZE > 1
(0837)     pevent1->OSEventName[0]         = '?';                       
(0838)     pevent1->OSEventName[1]         = OS_ASCII_NUL;
(0839) #endif
(0840)     OSEventFreeList                 = &OSEventTbl[0];
(0841) #else
(0842)     OSEventFreeList                 = &OSEventTbl[0];            /* Only have ONE event control block        */
_OS_InitEventList:
    05E0 E787      LDI	R24,0x77
    05E1 E092      LDI	R25,2
    05E2 9390027F  STS	OSEventFreeList+1,R25
    05E4 9380027E  STS	OSEventFreeList,R24
(0843)     OSEventFreeList->OSEventType    = OS_EVENT_TYPE_UNUSED;
    05E6 2422      CLR	R2
    05E7 01FC      MOVW	R30,R24
    05E8 8220      STD	Z+0,R2
(0844)     OSEventFreeList->OSEventPtr     = (OS_EVENT *)0;
    05E9 2433      CLR	R3
    05EA 91E0027E  LDS	R30,OSEventFreeList
    05EC 91F0027F  LDS	R31,OSEventFreeList+1
    05EE 8235      STD	Z+5,R3
    05EF 8224      STD	Z+4,R2
    05F0 9508      RET
_OS_InitMisc:
    05F1 940E12E8  CALL	push_gset2
(0845) #if OS_EVENT_NAME_SIZE > 1
(0846)     OSEventFreeList->OSEventName[0] = '?';                       /* Unknown name                             */
(0847)     OSEventFreeList->OSEventName[1] = OS_ASCII_NUL;
(0848) #endif
(0849) #endif
(0850) #endif
(0851) }
(0852) /*$PAGE*/
(0853) /*
(0854) *********************************************************************************************************
(0855) *                                             INITIALIZATION
(0856) *                                    INITIALIZE MISCELLANEOUS VARIABLES
(0857) *
(0858) * Description: This function is called by OSInit() to initialize miscellaneous variables.
(0859) *
(0860) * Arguments  : none
(0861) *
(0862) * Returns    : none
(0863) *********************************************************************************************************
(0864) */
(0865) 
(0866) static  void  OS_InitMisc (void)
(0867) {
(0868) #if OS_TIME_GET_SET_EN > 0   
(0869)     OSTime        = 0L;                                          /* Clear the 32-bit system clock            */
(0870) #endif
(0871) 
(0872)     OSIntNesting  = 0;                                           /* Clear the interrupt nesting counter      */
    05F3 2422      CLR	R2
    05F4 92200208  STS	OSIntNesting,R2
(0873)     OSLockNesting = 0;                                           /* Clear the scheduling lock counter        */
    05F6 92200206  STS	OSLockNesting,R2
(0874) 
(0875)     OSTaskCtr     = 0;                                           /* Clear the number of tasks                */
    05F8 92200200  STS	OSTaskCtr,R2
(0876) 
(0877)     OSRunning     = FALSE;                                       /* Indicate that multitasking not started   */
    05FA 92200

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?