test.lst

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

LST
1,555
字号
    04A8 E082      LDI	R24,2
    04A9 E092      LDI	R25,2
    04AA 01FB      MOVW	R30,R22
    04AB 8425      LDD	R2,Z+13
    04AC 2433      CLR	R3
    04AD 0E28      ADD	R2,R24
    04AE 1E39      ADC	R3,R25
    04AF 01FB      MOVW	R30,R22
    04B0 8446      LDD	R4,Z+14
    04B1 01F1      MOVW	R30,R2
    04B2 8050      LDD	R5,Z+0
    04B3 2854      OR	R5,R4
    04B4 8250      STD	Z+0,R5
(0573)                         } else {                           /* Yes, Leave 1 tick to prevent loosing the ... */
    04B5 C005      RJMP	0x04BB
(0574)                             ptcb->OSTCBDly = 1;            /* ... task when the suspension is removed.     */
    04B6 E081      LDI	R24,1
    04B7 E090      LDI	R25,0
    04B8 01FB      MOVW	R30,R22
    04B9 8791      STD	Z+9,R25
    04BA 8780      STD	Z+8,R24
(0575)                         }
(0576)                     }
(0577)                 }
(0578)                 ptcb = ptcb->OSTCBNext;                    /* Point at next TCB in TCB list                */
    04BB 01FB      MOVW	R30,R22
    04BC 8162      LDD	R22,Z+2
    04BD 8173      LDD	R23,Z+3
(0579)                 OS_EXIT_CRITICAL();
    04BE 2F04      MOV	R16,R20
    04BF 940E0D10  CALL	_OS_CPU_SR_Restore
    04C1 01FB      MOVW	R30,R22
    04C2 8583      LDD	R24,Z+11
    04C3 3086      CPI	R24,6
    04C4 F009      BEQ	0x04C6
    04C5 CFBF      RJMP	0x0485
(0580)             }
(0581)         }
(0582)     }
    04C6 940E12D6  CALL	pop_gset2
    04C8 9508      RET
(0583) }
(0584) /*$PAGE*/
(0585) /*
(0586) *********************************************************************************************************
(0587) *                                             GET VERSION
(0588) *
(0589) * Description: This function is used to return the version number of uC/OS-II.  The returned value
(0590) *              corresponds to uC/OS-II's version number multiplied by 100.  In other words, version 2.00
(0591) *              would be returned as 200.
(0592) *
(0593) * Arguments  : none
(0594) *
(0595) * Returns    : the version number of uC/OS-II multiplied by 100.
(0596) *********************************************************************************************************
(0597) */
(0598) 
(0599) INT16U  OSVersion (void)
(0600) {
(0601)     return (OS_VERSION);
_OSVersion:
    04C9 E00E      LDI	R16,0xE
    04CA E011      LDI	R17,1
    04CB 9508      RET
_OS_EventTaskRdy:
  bity                 --> R12
  bitx                 --> R22
  prio                 --> R20
  x                    --> R20
  ptcb                 --> R14
  y                    --> R10
  msk                  --> Y+10
  msg                  --> R18
  pevent               --> R16
    04CC 940E12E2  CALL	push_gset5
(0602) }
(0603) 
(0604) /*$PAGE*/
(0605) /*
(0606) *********************************************************************************************************
(0607) *                                            DUMMY FUNCTION
(0608) *
(0609) * Description: This function doesn't do anything.  It is called by OSTaskDel().
(0610) *
(0611) * Arguments  : none
(0612) *
(0613) * Returns    : none
(0614) *********************************************************************************************************
(0615) */
(0616) 
(0617) #if OS_TASK_DEL_EN > 0
(0618) void  OS_Dummy (void)
(0619) {
(0620) }
(0621) #endif
(0622) 
(0623) /*$PAGE*/
(0624) /*
(0625) *********************************************************************************************************
(0626) *                             MAKE TASK READY TO RUN BASED ON EVENT OCCURING
(0627) *
(0628) * Description: This function is called by other uC/OS-II services and is used to ready a task that was
(0629) *              waiting for an event to occur.
(0630) *
(0631) * Arguments  : pevent    is a pointer to the event control block corresponding to the event.
(0632) *
(0633) *              msg       is a pointer to a message.  This pointer is used by message oriented services
(0634) *                        such as MAILBOXEs and QUEUEs.  The pointer is not used when called by other
(0635) *                        service functions.
(0636) *
(0637) *              msk       is a mask that is used to clear the status byte of the TCB.  For example,
(0638) *                        OSSemPost() will pass OS_STAT_SEM, OSMboxPost() will pass OS_STAT_MBOX etc.
(0639) *
(0640) * Returns    : none
(0641) *
(0642) * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
(0643) *********************************************************************************************************
(0644) */
(0645) #if OS_EVENT_EN > 0
(0646) INT8U  OS_EventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)
(0647) {
(0648)     OS_TCB *ptcb;
(0649)     INT8U   x;
(0650)     INT8U   y;
(0651)     INT8U   bitx;
(0652)     INT8U   bity;
(0653)     INT8U   prio;
(0654) 
(0655) 
(0656)     y                      = OSUnMapTbl[pevent->OSEventGrp];   /* Find HPT waiting for message         */
    04CE E688      LDI	R24,0x68
    04CF E090      LDI	R25,0
    04D0 01F8      MOVW	R30,R16
    04D1 81E1      LDD	R30,Z+1
    04D2 27FF      CLR	R31
    04D3 0FE8      ADD	R30,R24
    04D4 1FF9      ADC	R31,R25
    04D5 90A4      LPM	R10,0(Z)
(0657)     bity                   = OSMapTbl[y];
    04D6 E680      LDI	R24,0x60
    04D7 E090      LDI	R25,0
    04D8 2DEA      MOV	R30,R10
    04D9 27FF      CLR	R31
    04DA 0FE8      ADD	R30,R24
    04DB 1FF9      ADC	R31,R25
    04DC 90C4      LPM	R12,0(Z)
(0658)     x                      = OSUnMapTbl[pevent->OSEventTbl[y]];
    04DD 01C8      MOVW	R24,R16
    04DE 9606      ADIW	R24,6
    04DF 2DEA      MOV	R30,R10
    04E0 27FF      CLR	R31
    04E1 0FE8      ADD	R30,R24
    04E2 1FF9      ADC	R31,R25
    04E3 81E0      LDD	R30,Z+0
    04E4 27FF      CLR	R31
    04E5 E688      LDI	R24,0x68
    04E6 E090      LDI	R25,0
    04E7 0FE8      ADD	R30,R24
    04E8 1FF9      ADC	R31,R25
    04E9 9144      LPM	R20,0(Z)
(0659)     bitx                   = OSMapTbl[x];
    04EA E680      LDI	R24,0x60
    04EB E090      LDI	R25,0
    04EC 2FE4      MOV	R30,R20
    04ED 27FF      CLR	R31
    04EE 0FE8      ADD	R30,R24
    04EF 1FF9      ADC	R31,R25
    04F0 9164      LPM	R22,0(Z)
(0660)     prio                   = (INT8U)((y << 3) + x);   /* Find priority of task getting the msg         */
    04F1 2E24      MOV	R2,R20
    04F2 2433      CLR	R3
    04F3 2D4A      MOV	R20,R10
    04F4 2755      CLR	R21
    04F5 0F44      LSL	R20
    04F6 1F55      ROL	R21
    04F7 0F44      LSL	R20
    04F8 1F55      ROL	R21
    04F9 0F44      LSL	R20
    04FA 1F55      ROL	R21
    04FB 0D42      ADD	R20,R2
    04FC 1D53      ADC	R21,R3
(0661)     pevent->OSEventTbl[y] &= ~bitx;                   /* Remove this task from the waiting list        */
    04FD 01C8      MOVW	R24,R16
    04FE 9606      ADIW	R24,6
    04FF 2C2A      MOV	R2,R10
    0500 2433      CLR	R3
    0501 0E28      ADD	R2,R24
    0502 1E39      ADC	R3,R25
    0503 2E46      MOV	R4,R22
    0504 9440      COM	R4
    0505 01F1      MOVW	R30,R2
    0506 8050      LDD	R5,Z+0
    0507 2054      AND	R5,R4
    0508 8250      STD	Z+0,R5
(0662)     if (pevent->OSEventTbl[y] == 0x00) {              
    0509 01C8      MOVW	R24,R16
    050A 9606      ADIW	R24,6
    050B 2DEA      MOV	R30,R10
    050C 27FF      CLR	R31
    050D 0FE8      ADD	R30,R24
    050E 1FF9      ADC	R31,R25
    050F 8020      LDD	R2,Z+0
    0510 2022      TST	R2
    0511 F441      BNE	0x051A
(0663)         pevent->OSEventGrp &= ~bity;                  /* Clr group bit if this was only task pending   */
    0512 01C8      MOVW	R24,R16
    0513 9601      ADIW	R24,1
    0514 2C4C      MOV	R4,R12
    0515 9440      COM	R4
    0516 01FC      MOVW	R30,R24
    0517 8050      LDD	R5,Z+0
    0518 2054      AND	R5,R4
    0519 8250      STD	Z+0,R5
(0664)     }
(0665)     ptcb                 =  OSTCBPrioTbl[prio];       /* Point to this task's OS_TCB                   */
    051A E082      LDI	R24,2
    051B 9F84      MUL	R24,R20
    051C 01F0      MOVW	R30,R0
    051D E882      LDI	R24,0x82
    051E E091      LDI	R25,1
    051F 0FE8      ADD	R30,R24
    0520 1FF9      ADC	R31,R25
    0521 80E0      LDD	R14,Z+0
    0522 80F1      LDD	R15,Z+1
(0666)     ptcb->OSTCBDly       =  0;                        /* Prevent OSTimeTick() from readying task       */
    0523 2422      CLR	R2
    0524 2433      CLR	R3
    0525 01F7      MOVW	R30,R14
    0526 8631      STD	Z+9,R3
    0527 8620      STD	Z+8,R2
(0667)     ptcb->OSTCBEventPtr  = (OS_EVENT *)0;             /* Unlink ECB from this task                     */
    0528 01F7      MOVW	R30,R14
    0529 8237      STD	Z+7,R3
    052A 8226      STD	Z+6,R2
(0668) #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
(0669)     ptcb->OSTCBMsg       = msg;                       /* Send message directly to waiting task         */
(0670) #else
(0671)     msg                  = msg;                       /* Prevent compiler warning if not used          */
(0672) #endif
(0673)     ptcb->OSTCBStat     &= ~msk;                      /* Clear bit associated with event type          */
    052B 01C7      MOVW	R24,R14
    052C 960A      ADIW	R24,0xA
    052D 844A      LDD	R4,Y+10
    052E 9440      COM	R4
    052F 01FC      MOVW	R30,R24
    0530 8050      LDD	R5,Z+0
    0531 2054      AND	R5,R4
    0532 8250      STD	Z+0,R5
(0674)     if (ptcb->OSTCBStat == OS_STAT_RDY) {             /* See if task is ready (could be susp'd)        */
    0533 01F7      MOVW	R30,R14
    0534 8422      LDD	R2,Z+10
    0535 2022      TST	R2
    0536 F479      BNE	0x0546
(0675)         OSRdyGrp        |=  bity;                     /* Put task in the ready to run list             */
    0537 90200203  LDS	R2,OSRdyGrp
    0539 282C      OR	R2,R12
    053A 92200203  STS	OSRdyGrp,R2
(0676)         OSRdyTbl[y]     |=  bitx;
    053C E082      LDI	R24,2
    053D E092      LDI	R25,2
    053E 2C2A      MOV	R2,R10
    053F 2433      CLR	R3
    0540 0E28      ADD	R2,R24
    0541 1E39      ADC	R3,R25
    0542 01F1      MOVW	R30,R2
    0543 8040      LDD	R4,Z+0
    0544 2A46      OR	R4,R22
    0545 8240      STD	Z+0,R4
(0677)     }
(0678)     return (prio);
    0546 2F04      MOV	R16,R20
    0547 940E12DF  CALL	pop_gset5
    0549 9508      RET
_OS_EventTaskWait:
  y                    --> R20
  pevent               --> R16
    054A 940E12EA  CALL	push_gset1
(0679) }
(0680) #endif
(0681) /*$PAGE*/
(0682) /*
(0683) *********************************************************************************************************
(0684) *                                   MAKE TASK WAIT FOR EVENT TO OCCUR
(0685) *
(0686) * Description: This function is called by other uC/OS-II services to suspend a task because an event has
(0687) *              not occurred.
(0688) *
(0689) * Arguments  : pevent   is a pointer to the event control block for which the task will be waiting for.
(0690) *
(0691) * Returns    : none
(0692) *
(0693) * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
(0694) *********************************************************************************************************
(0695) */
(0696) #if OS_EVENT_EN > 0
(0697) void  OS_EventTaskWait (OS_EVENT *pevent)
(0698) {
(0699)     INT8U  y;
(0700) 
(0701) 
(0702)     OSTCBCur->OSTCBEventPtr = pevent;            /* Store pointer to event control block in TCB        */
    054C 91E00196  LDS	R30,OSTCBCur
    054E 91F00197  LDS	R31,OSTCBCur+1
    0550 8317      STD	Z+7,R17
    0551 8306      STD	Z+6,R16
(0703)     y                       = OSTCBCur->OSTCBY;  /* Task no longer ready                               */
    0552 8545      LDD	R20,Z+13
(0704)     OSRdyTbl[y]            &= ~OSTCBCur->OSTCBBitX;
    0553 E082      LDI	R24,2
    0554 E092      LDI	R25,2
    0555 2E24      MOV	R2,R20

⌨️ 快捷键说明

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