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

📄 test.lst

📁 ucos在mage128上的应用
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0555) 
(0556)             default:                                       /* Invalid case, correct situation              */
(0557)                  step            = TRUE;
(0558)                  OSTickStepState = OS_TICK_STEP_DIS;
(0559)                  break;
(0560)         }
(0561) #else
(0562)         step = TRUE;
    01D0 E041      LDI	R20,1
(0563) #endif
(0564)         if (step == TRUE) {
    01D1 3041      CPI	R20,1
    01D2 F009      BEQ	0x01D4
    01D3 C039      RJMP	0x020D
(0565)             ptcb = OSTCBList;                              /* Point at first TCB in TCB list               */
    01D4 91600200  LDS	R22,_OSTCBList
    01D6 91700201  LDS	R23,_OSTCBList+1
    01D8 C02F      RJMP	0x0208
(0566)             while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {      /* Go through all TCBs in TCB list              */
(0567)                 OS_ENTER_CRITICAL();
    01D9 D0A5      RCALL	0x027F
    01DA 2F40      MOV	R20,R16
(0568)                 if (ptcb->OSTCBDly != 0) {                 /* Delayed or waiting for event with TO         */
    01DB 01FB      MOVW	R30,R22
    01DC 8420      LDD	R2,Z+8
    01DD 8431      LDD	R3,Z+9
    01DE 2022      TST	R2
    01DF F419      BNE	0x01E3
    01E0 2033      TST	R3
    01E1 F409      BNE	0x01E3
    01E2 C020      RJMP	0x0203
(0569)                     if (--ptcb->OSTCBDly == 0) {           /* Decrement nbr of ticks to end of delay       */
    01E3 01CB      MOVW	R24,R22
    01E4 9608      ADIW	R24,0x8
    01E5 01FC      MOVW	R30,R24
    01E6 8180      LDD	R24,Z+0
    01E7 8191      LDD	R25,Z+1
    01E8 9701      SBIW	R24,1
    01E9 012C      MOVW	R4,R24
    01EA 8251      STD	Z+1,R5
    01EB 8240      STD	Z+0,R4
    01EC 3080      CPI	R24,0
    01ED 0789      CPC	R24,R25
    01EE F009      BEQ	0x01F0
    01EF C013      RJMP	0x0203
(0570)                         if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended?    */
    01F0 01FB      MOVW	R30,R22
    01F1 8422      LDD	R2,Z+10
    01F2 FC23      SBRC	R2,3
    01F3 C00A      RJMP	0x01FE
(0571)                             OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task R-to-R (timed out)*/
    01F4 01FB      MOVW	R30,R22
    01F5 940E0AFC  CALL	0xAFC
(0572)                             OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
    01F7 01FB      MOVW	R30,R22
    01F8 940E0B4E  CALL	0xB4E
    01FA 01FB      MOVW	R30,R22
    01FB 940E0B3D  CALL	0xB3D
(0573)                         } else {                           /* Yes, Leave 1 tick to prevent loosing the ... */
    01FD C005      RJMP	0x0203
(0574)                             ptcb->OSTCBDly = 1;            /* ... task when the suspension is removed.     */
    01FE E081      LDI	R24,1
    01FF E090      LDI	R25,0
    0200 01FB      MOVW	R30,R22
    0201 8791      STD	Z+9,R25
    0202 8780      STD	Z+8,R24
(0575)                         }
(0576)                     }
(0577)                 }
(0578)                 ptcb = ptcb->OSTCBNext;                    /* Point at next TCB in TCB list                */
    0203 01FB      MOVW	R30,R22
    0204 8162      LDD	R22,Z+2
    0205 8173      LDD	R23,Z+3
(0579)                 OS_EXIT_CRITICAL();
    0206 2F04      MOV	R16,R20
    0207 D07A      RCALL	0x0282
    0208 01FB      MOVW	R30,R22
    0209 8583      LDD	R24,Z+11
    020A 3088      CPI	R24,0x8
    020B F009      BEQ	0x020D
    020C CFCC      RJMP	0x01D9
(0580)             }
(0581)         }
(0582)     }
(0583) }
    020D 940E09D0  CALL	pop_gset2
    020F 9508      RET
(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:
    0210 E00E      LDI	R16,0xE
    0211 E011      LDI	R17,1
    0212 9508      RET
_OS_EventTaskRdy:
  bity                 --> R12
  bitx                 --> R22
  prio                 --> R20
  x                    --> R20
  ptcb                 --> R14
  y                    --> R10
  msk                  --> Y+10
  msg                  --> R18
  pevent               --> R16
    0213 940E09F8  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         */
    0215 E98C      LDI	R24,0x9C
    0216 E090      LDI	R25,0
    0217 01F8      MOVW	R30,R16
    0218 81E1      LDD	R30,Z+1
    0219 27FF      CLR	R31
    021A 0FE8      ADD	R30,R24
    021B 1FF9      ADC	R31,R25
    021C 90A4      LPM	R10,0(Z)
(0657)     bity                   = OSMapTbl[y];
    021D E984      LDI	R24,0x94
    021E E090      LDI	R25,0
    021F 2DEA      MOV	R30,R10
    0220 27FF      CLR	R31
    0221 0FE8      ADD	R30,R24
    0222 1FF9      ADC	R31,R25
    0223 90C4      LPM	R12,0(Z)
(0658)     x                      = OSUnMapTbl[pevent->OSEventTbl[y]];
    0224 01C8      MOVW	R24,R16
    0225 9606      ADIW	R24,6
    0226 2DEA      MOV	R30,R10
    0227 940E0A88  CALL	0xA88
    0229 9144      LPM	R20,0(Z)
(0659)     bitx                   = OSMapTbl[x];
    022A E984      LDI	R24,0x94
    022B E090      LDI	R25,0
    022C 2FE4      MOV	R30,R20
    022D 27FF      CLR	R31
    022E 0FE8      ADD	R30,R24
    022F 1FF9      ADC	R31,R25
    0230 9164      LPM	R22,0(Z)
(0660)     prio                   = (INT8U)((y << 3) + x);   /* Find priority of task getting the msg         */
    0231 2E24      MOV	R2,R20
    0232 2433      CLR	R3
    0233 2D4A      MOV	R20,R10
    0234 2755      CLR	R21
    0235 0F44      LSL	R20
    0236 1F55      ROL	R21
    0237 0F44      LSL	R20
    0238 1F55      ROL	R21
    0239 0F44      LSL	R20
    023A 1F55      ROL	R21
    023B 0D42      ADD	R20,R2
    023C 1D53      ADC	R21,R3
(0661)     pevent->OSEventTbl[y] &= ~bitx;                   /* Remove this task from the waiting list        */
    023D 01C8      MOVW	R24,R16
    023E 9606      ADIW	R24,6
    023F 2C2A      MOV	R2,R10
    0240 2433      CLR	R3
    0241 0E28      ADD	R2,R24
    0242 1E39      ADC	R3,R25
    0243 2E46      MOV	R4,R22
    0244 940E0AEC  CALL	0xAEC
(0662)     if (pevent->OSEventTbl[y] == 0x00) {              
    0246 01C8      MOVW	R24,R16
    0247 9606      ADIW	R24,6
    0248 2DEA      MOV	R30,R10
    0249 940E0AE1  CALL	0xAE1
    024B 2022      TST	R2
    024C F429      BNE	0x0252
(0663)         pevent->OSEventGrp &= ~bity;                  /* Clr group bit if this was only task pending   */
    024D 01C8      MOVW	R24,R16
    024E 9601      ADIW	R24,1
    024F 2C4C      MOV	R4,R12
    0250 940E0B05  CALL	0xB05
(0664)     }
(0665)     ptcb                 =  OSTCBPrioTbl[prio];       /* Point to this task's OS_TCB                   */
    0252 E082      LDI	R24,2
    0253 9F84      MUL	R24,R20
    0254 940E0A5C  CALL	0xA5C
    0256 80E0      LDD	R14,Z+0
    0257 80F1      LDD	R15,Z+1
(0666)     ptcb->OSTCBDly       =  0;                        /* Prevent OSTimeTick() from readying task       */
    0258 2422      CLR	R2
    0259 2433      CLR	R3
    025A 01F7      MOVW	R30,R14
    025B 8631      STD	Z+9,R3
    025C 8620      STD	Z+8,R2
(0667)     ptcb->OSTCBEventPtr  = (OS_EVENT *)0;             /* Unlink ECB from this task                     */
    025D 01F7      MOVW	R30,R14
    025E 8237      STD	Z+7,R3
    025F 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          */
    0260 01C7      MOVW	R24,R14
    0261 960A      ADIW	R24,0xA
    0262 844A      LDD	R4,Y+10
    0263 940E0B05  CALL	0xB05
(0674)     if (ptcb->OSTCBStat == OS_STAT_RDY) {             /* See if task is ready (could be susp'd)        */
    0265 01F7      MOVW	R30,R14
    0266 8422      LDD	R2,Z+10
    0267 2022      TST	R2
    0268 F429      BNE	0x026E
    0269 940E0B0B  CALL	0xB0B
(0675)         OSRdyGrp        |=  bity;                     /* Put task in the ready to run list             */
(0676)         OSRdyTbl[y]     |=  bitx;
    026B 2C2A      MOV	R2,R10
    026C 940E0AD3  CALL	0xAD3
(0677)     }
(0678)     return (prio);
    026E 2F04      MOV	R16,R20
    026F 940E09D6  CALL	pop_gset5
    0271 9508      RET
_OS_EventTaskWait:
  y                    --> R20
  pevent               --> R16
    0272 940E09D8  CALL	push_gset1
    0274 940E0A6F  CALL	0xA6F
(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        */
    0276 8317      STD	Z+7,R17
    0277 8306      STD	Z+6,R16
(0703)     y                       = OSTCBCur->OSTCBY;  /* Task no longer ready                               */
    0278 8545      LDD	R20,Z+13
(0704)     OSRdyTbl[y]            &= ~OSTCBCur->OSTCBBitX;
    0279 E08E      LDI	R24,0xE
    027A E093      LDI	R25,3
    027B 2E24      MOV	R2,R20
    027C 2433      CLR	R3
    027D 0E28      ADD	R2,R24
    027E 1E39      ADC	R3,R25
    027F B70F      IN	R16,0x3F
    0280 94F8      BCLR	7
    0281 9508      RET
    0282 BF0F      OUT	0x3F,R16

⌨️ 快捷键说明

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