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

📄 test.lst

📁 基于mega128的ucos参考源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0582)     }
    0292 940E0E04  CALL	pop_gset2
    0294 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:
    0295 E00E      LDI	R16,0xE
    0296 E011      LDI	R17,1
    0297 9508      RET
_OS_EventTaskRdy:
  bity                 --> R12
  bitx                 --> R22
  prio                 --> R20
  x                    --> R20
  ptcb                 --> R14
  y                    --> R10
  msk                  --> Y+10
  msg                  --> R18
  pevent               --> R16
    0298 940E0E10  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         */
    029A E98C      LDI	R24,0x9C
    029B E090      LDI	R25,0
    029C 01F8      MOVW	R30,R16
    029D 81E1      LDD	R30,Z+1
    029E 27FF      CLR	R31
    029F 0FE8      ADD	R30,R24
    02A0 1FF9      ADC	R31,R25
    02A1 90A4      LPM	R10,0(Z)
(0657)     bity                   = OSMapTbl[y];
    02A2 E984      LDI	R24,0x94
    02A3 E090      LDI	R25,0
    02A4 2DEA      MOV	R30,R10
    02A5 27FF      CLR	R31
    02A6 0FE8      ADD	R30,R24
    02A7 1FF9      ADC	R31,R25
    02A8 90C4      LPM	R12,0(Z)
(0658)     x                      = OSUnMapTbl[pevent->OSEventTbl[y]];
    02A9 01C8      MOVW	R24,R16
    02AA 9606      ADIW	R24,6
    02AB 2DEA      MOV	R30,R10
    02AC 27FF      CLR	R31
    02AD 0FE8      ADD	R30,R24
    02AE 1FF9      ADC	R31,R25
    02AF 81E0      LDD	R30,Z+0
    02B0 27FF      CLR	R31
    02B1 E98C      LDI	R24,0x9C
    02B2 E090      LDI	R25,0
    02B3 0FE8      ADD	R30,R24
    02B4 1FF9      ADC	R31,R25
    02B5 9144      LPM	R20,0(Z)
(0659)     bitx                   = OSMapTbl[x];
    02B6 E984      LDI	R24,0x94
    02B7 E090      LDI	R25,0
    02B8 2FE4      MOV	R30,R20
    02B9 27FF      CLR	R31
    02BA 0FE8      ADD	R30,R24
    02BB 1FF9      ADC	R31,R25
    02BC 9164      LPM	R22,0(Z)
(0660)     prio                   = (INT8U)((y << 3) + x);   /* Find priority of task getting the msg         */
    02BD 2E24      MOV	R2,R20
    02BE 2433      CLR	R3
    02BF 2D4A      MOV	R20,R10
    02C0 2755      CLR	R21
    02C1 0F44      LSL	R20
    02C2 1F55      ROL	R21
    02C3 0F44      LSL	R20
    02C4 1F55      ROL	R21
    02C5 0F44      LSL	R20
    02C6 1F55      ROL	R21
    02C7 0D42      ADD	R20,R2
    02C8 1D53      ADC	R21,R3
(0661)     pevent->OSEventTbl[y] &= ~bitx;                   /* Remove this task from the waiting list        */
    02C9 01C8      MOVW	R24,R16
    02CA 9606      ADIW	R24,6
    02CB 2C2A      MOV	R2,R10
    02CC 2433      CLR	R3
    02CD 0E28      ADD	R2,R24
    02CE 1E39      ADC	R3,R25
    02CF 2E46      MOV	R4,R22
    02D0 9440      COM	R4
    02D1 01F1      MOVW	R30,R2
    02D2 8050      LDD	R5,Z+0
    02D3 2054      AND	R5,R4
    02D4 8250      STD	Z+0,R5
(0662)     if (pevent->OSEventTbl[y] == 0x00) {              
    02D5 01C8      MOVW	R24,R16
    02D6 9606      ADIW	R24,6
    02D7 2DEA      MOV	R30,R10
    02D8 27FF      CLR	R31
    02D9 0FE8      ADD	R30,R24
    02DA 1FF9      ADC	R31,R25
    02DB 8020      LDD	R2,Z+0
    02DC 2022      TST	R2
    02DD F441      BNE	0x02E6
(0663)         pevent->OSEventGrp &= ~bity;                  /* Clr group bit if this was only task pending   */
    02DE 01C8      MOVW	R24,R16
    02DF 9601      ADIW	R24,1
    02E0 2C4C      MOV	R4,R12
    02E1 9440      COM	R4
    02E2 01FC      MOVW	R30,R24
    02E3 8050      LDD	R5,Z+0
    02E4 2054      AND	R5,R4
    02E5 8250      STD	Z+0,R5
(0664)     }
(0665)     ptcb                 =  OSTCBPrioTbl[prio];       /* Point to this task's OS_TCB                   */
    02E6 E082      LDI	R24,2
    02E7 9F84      MUL	R24,R20
    02E8 01F0      MOVW	R30,R0
    02E9 EE8E      LDI	R24,0xEE
    02EA E091      LDI	R25,1
    02EB 0FE8      ADD	R30,R24
    02EC 1FF9      ADC	R31,R25
    02ED 80E0      LDD	R14,Z+0
    02EE 80F1      LDD	R15,Z+1
(0666)     ptcb->OSTCBDly       =  0;                        /* Prevent OSTimeTick() from readying task       */
    02EF 2422      CLR	R2
    02F0 2433      CLR	R3
    02F1 01F7      MOVW	R30,R14
    02F2 8631      STD	Z+9,R3
    02F3 8620      STD	Z+8,R2
(0667)     ptcb->OSTCBEventPtr  = (OS_EVENT *)0;             /* Unlink ECB from this task                     */
    02F4 01F7      MOVW	R30,R14
    02F5 8237      STD	Z+7,R3
    02F6 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          */
    02F7 01C7      MOVW	R24,R14
    02F8 960A      ADIW	R24,0xA
    02F9 844A      LDD	R4,Y+10
    02FA 9440      COM	R4
    02FB 01FC      MOVW	R30,R24
    02FC 8050      LDD	R5,Z+0
    02FD 2054      AND	R5,R4
    02FE 8250      STD	Z+0,R5
(0674)     if (ptcb->OSTCBStat == OS_STAT_RDY) {             /* See if task is ready (could be susp'd)        */
    02FF 01F7      MOVW	R30,R14
    0300 8422      LDD	R2,Z+10
    0301 2022      TST	R2
    0302 F479      BNE	0x0312
(0675)         OSRdyGrp        |=  bity;                     /* Put task in the ready to run list             */
    0303 90200310  LDS	R2,OSRdyGrp
    0305 282C      OR	R2,R12
    0306 92200310  STS	OSRdyGrp,R2
(0676)         OSRdyTbl[y]     |=  bitx;
    0308 E08E      LDI	R24,0xE
    0309 E093      LDI	R25,3
    030A 2C2A      MOV	R2,R10
    030B 2433      CLR	R3
    030C 0E28      ADD	R2,R24
    030D 1E39      ADC	R3,R25
    030E 01F1      MOVW	R30,R2
    030F 8040      LDD	R4,Z+0
    0310 2A46      OR	R4,R22
    0311 8240      STD	Z+0,R4
(0677)     }
(0678)     return (prio);
    0312 2F04      MOV	R16,R20
    0313 940E0E0D  CALL	pop_gset5
    0315 9508      RET
_OS_EventTaskWait:
  y                    --> R20
  pevent               --> R16
    0316 940E0E18  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        */
    0318 91E00206  LDS	R30,OSTCBCur
    031A 91F00207  LDS	R31,OSTCBCur+1
    031C 8317      STD	Z+7,R17
    031D 8306      STD	Z+6,R16
(0703)     y                       = OSTCBCur->OSTCBY;  /* Task no longer ready                               */
    031E 8545      LDD	R20,Z+13
(0704)     OSRdyTbl[y]            &= ~OSTCBCur->OSTCBBitX;
    031F E08E      LDI	R24,0xE
    0320 E093      LDI	R25,3
    0321 2E24      MOV	R2,R20
    0322 2433      CLR	R3
    0323 0E28      ADD	R2,R24
    0324 1E39      ADC	R3,R25
    0325 91E00206  LDS	R30,OSTCBCur
    0327 91F00207  LDS	R31,OSTCBCur+1
    0329 8446      LDD	R4,Z+14
    032A 9440      COM	R4
    032B 01F1      MOVW	R30,R2
    032C 8050      LDD	R5,Z+0
    032D 2054      AND	R5,R4
    032E 8250      STD	Z+0,R5
(0705)     if (OSRdyTbl[y] == 0x00) {                   
    032F 2FE4      MOV	R30,R20
    0330 27FF      CLR	R31
    0331 0FE8      ADD	R30,R24
    0332 1FF9      ADC	R31,R25
    0333 8020      LDD	R2,Z+0
    0334 2022      TST	R2
    0335 F459      BNE	0x0341
(0706)         OSRdyGrp &= ~OSTCBCur->OSTCBBitY;        /* Clear event grp bit if this was only task pending  */
    0336 91E00206  LDS	R30,OSTCBCur
    0338 91F00207  LDS	R31,OSTCBCur+1
    033A 8427      LDD	R2,Z+15
    033B 9420      COM	R2
    033C 90300310  LDS	R3,OSRdyGrp
    033E 2032      AND	R3,R2
    033F 92300310  STS	OSRdyGrp,R3
(0707)     }
(0708)     pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;          /* Put task in waiting list  */
    0341 01C8      MOVW	R24,R16
    0342 9606      ADIW	R24,6
    0343 91E00206  LDS	R30,OSTCBCur
    0345 91F00207  LDS	R31,OSTCBCur+1
    0347 8425      LDD	R2,Z+13
    0348 2433      CLR	R3
    0349 0E28      ADD	R2,R24
    034A 1E39      ADC	R3,R25
    034B 91E00206  LDS	R30,OSTCBCur
    034D 91F00207  LDS	R31,OSTCBCur+1

⌨️ 快捷键说明

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