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

📄 test.lst

📁 移植ucos2.76到mega128中软件仿真成功。 需要在iccavr7.13中编译
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0582)     }
     260 940C 0FD1 JMP	pop_xgsetF03C
(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:
     262 E00E      LDI	R16,0xE
     263 E011      LDI	R17,1
     264 9508      RET
_OS_EventTaskRdy:
  bity                 --> R20
  bitx                 --> R14
  prio                 --> R10
  x                    --> R10
  ptcb                 --> R22
  y                    --> Y,+0
  msk                  --> Y,+13
  msg                  --> Y,+11
  pevent               --> R16
     265 933A      ST	R19,-Y
     266 932A      ST	R18,-Y
     267 940E 0F8D CALL	push_xgsetF0FC
     269 9721      SBIW	R28,1
(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         */
     26A E98C      LDI	R24,0x9C
     26B E090      LDI	R25,0
     26C 01F8      MOVW	R30,R16
     26D 81E1      LDD	R30,Z+1
     26E 27FF      CLR	R31
     26F 0FE8      ADD	R30,R24
     270 1FF9      ADC	R31,R25
     271 9026      ELPM	R2,1(Z)
     272 8228      STD	Y+0,R2
(0657)     bity                   = OSMapTbl[y];
     273 E984      LDI	R24,0x94
     274 E090      LDI	R25,0
     275 2DE2      MOV	R30,R2
     276 27FF      CLR	R31
     277 0FE8      ADD	R30,R24
     278 1FF9      ADC	R31,R25
     279 9146      ELPM	R20,0(Z)
(0658)     x                      = OSUnMapTbl[pevent->OSEventTbl[y]];
     27A 01C8      MOVW	R24,R16
     27B 9606      ADIW	R24,6
     27C 2DE2      MOV	R30,R2
     27D 27FF      CLR	R31
     27E 0FE8      ADD	R30,R24
     27F 1FF9      ADC	R31,R25
     280 81E0      LDD	R30,Z+0
     281 27FF      CLR	R31
     282 E98C      LDI	R24,0x9C
     283 E090      LDI	R25,0
     284 0FE8      ADD	R30,R24
     285 1FF9      ADC	R31,R25
     286 90A6      ELPM	R10,0(Z)
(0659)     bitx                   = OSMapTbl[x];
     287 E984      LDI	R24,0x94
     288 E090      LDI	R25,0
     289 2DEA      MOV	R30,R10
     28A 27FF      CLR	R31
     28B 0FE8      ADD	R30,R24
     28C 1FF9      ADC	R31,R25
     28D 90E6      ELPM	R14,0(Z)
(0660)     prio                   = (INT8U)((y << 3) + x);   /* Find priority of task getting the msg         */
     28E 2C2A      MOV	R2,R10
     28F 2433      CLR	R3
     290 80A8      LDD	R10,Y+0
     291 24BB      CLR	R11
     292 0CAA      LSL	R10
     293 1CBB      ROL	R11
     294 0CAA      LSL	R10
     295 1CBB      ROL	R11
     296 0CAA      LSL	R10
     297 1CBB      ROL	R11
     298 0CA2      ADD	R10,R2
     299 1CB3      ADC	R11,R3
(0661)     pevent->OSEventTbl[y] &= ~bitx;                   /* Remove this task from the waiting list        */
     29A 01C8      MOVW	R24,R16
     29B 9606      ADIW	R24,6
     29C 8028      LDD	R2,Y+0
     29D 2433      CLR	R3
     29E 0E28      ADD	R2,R24
     29F 1E39      ADC	R3,R25
     2A0 0121      MOVW	R4,R2
     2A1 2C2E      MOV	R2,R14
     2A2 9420      COM	R2
     2A3 01F2      MOVW	R30,R4
     2A4 8030      LDD	R3,Z+0
     2A5 2032      AND	R3,R2
     2A6 8230      STD	Z+0,R3
(0662)     if (pevent->OSEventTbl[y] == 0x00) {              
     2A7 01C8      MOVW	R24,R16
     2A8 9606      ADIW	R24,6
     2A9 81E8      LDD	R30,Y+0
     2AA 27FF      CLR	R31
     2AB 0FE8      ADD	R30,R24
     2AC 1FF9      ADC	R31,R25
     2AD 8020      LDD	R2,Z+0
     2AE 2022      TST	R2
     2AF F441      BNE	0x02B8
(0663)         pevent->OSEventGrp &= ~bity;                  /* Clr group bit if this was only task pending   */
     2B0 01C8      MOVW	R24,R16
     2B1 9601      ADIW	R24,1
     2B2 2E24      MOV	R2,R20
     2B3 9420      COM	R2
     2B4 01FC      MOVW	R30,R24
     2B5 8030      LDD	R3,Z+0
     2B6 2032      AND	R3,R2
     2B7 8230      STD	Z+0,R3
(0664)     }
(0665)     ptcb                 =  OSTCBPrioTbl[prio];       /* Point to this task's OS_TCB                   */
     2B8 EB80      LDI	R24,0xB0
     2B9 E099      LDI	R25,0x9
     2BA 2DEA      MOV	R30,R10
     2BB 27FF      CLR	R31
     2BC 0FEE      LSL	R30
     2BD 1FFF      ROL	R31
     2BE 0FE8      ADD	R30,R24
     2BF 1FF9      ADC	R31,R25
     2C0 8160      LDD	R22,Z+0
     2C1 8171      LDD	R23,Z+1
(0666)     ptcb->OSTCBDly       =  0;                        /* Prevent OSTimeTick() from readying task       */
     2C2 2422      CLR	R2
     2C3 2433      CLR	R3
     2C4 01FB      MOVW	R30,R22
     2C5 8631      STD	Z+9,R3
     2C6 8620      STD	Z+8,R2
(0667)     ptcb->OSTCBEventPtr  = (OS_EVENT *)0;             /* Unlink ECB from this task                     */
     2C7 8237      STD	Z+7,R3
     2C8 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          */
     2C9 01CF      MOVW	R24,R30
     2CA 960A      ADIW	R24,0xA
     2CB 016C      MOVW	R12,R24
     2CC 842D      LDD	R2,Y+13
     2CD 9420      COM	R2
     2CE 01FC      MOVW	R30,R24
     2CF 8030      LDD	R3,Z+0
     2D0 2032      AND	R3,R2
     2D1 8230      STD	Z+0,R3
(0674)     if (ptcb->OSTCBStat == OS_STAT_RDY) {             /* See if task is ready (could be susp'd)        */
     2D2 01FB      MOVW	R30,R22
     2D3 8422      LDD	R2,Z+10
     2D4 2022      TST	R2
     2D5 F479      BNE	0x02E5
(0675)         OSRdyGrp        |=  bity;                     /* Put task in the ready to run list             */
     2D6 9020 0B46 LDS	R2,OSRdyGrp
     2D8 2A24      OR	R2,R20
     2D9 9220 0B46 STS	OSRdyGrp,R2
(0676)         OSRdyTbl[y]     |=  bitx;
     2DB E38E      LDI	R24,0x3E
     2DC E09B      LDI	R25,0xB
     2DD 80C8      LDD	R12,Y+0
     2DE 24DD      CLR	R13
     2DF 0EC8      ADD	R12,R24
     2E0 1ED9      ADC	R13,R25
     2E1 01F6      MOVW	R30,R12
     2E2 8020      LDD	R2,Z+0
     2E3 282E      OR	R2,R14
     2E4 8220      STD	Z+0,R2
(0677)     }
(0678)     return (prio);
     2E5 2D0A      MOV	R16,R10
     2E6 9621      ADIW	R28,1
     2E7 940E 0F82 CALL	pop_xgsetF0FC
     2E9 9622      ADIW	R28,2
     2EA 9508      RET
_OS_EventTaskWait:
  y                    --> R10
  pevent               --> R16
     2EB 940E 0F98 CALL	push_xgset300C
(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        */
     2ED 91E0 0A36 LDS	R30,OSTCBCur
     2EF 91F0 0A37 LDS	R31,OSTCBCur+1
     2F1 8317      STD	Z+7,R17
     2F2 8306      STD	Z+6,R16
(0703)     y                       = OSTCBCur->OSTCBY;  /* Task no longer ready                               */
     2F3 84A5      LDD	R10,Z+13
(0704)     OSRdyTbl[y]            &= ~OSTCBCur->OSTCBBitX;
     2F4 E38E      LDI	R24,0x3E
     2F5 E09B      LDI	R25,0xB
     2F6 2C2A      MOV	R2,R10
     2F7 2433      CLR	R3
     2F8 0E28      ADD	R2,R24
     2F9 1E39      ADC	R3,R25
     2FA 0121      MOVW	R4,R2
     2FB 8426      LDD	R2,Z+14
     2FC 9420      COM	R2
     2FD 01F2      MOVW	R30,R4
     2FE 8030      LDD	R3,Z+0
     2FF 2032      AND	R3,R2
     300 8230      STD	Z+0,R3
(0705)     if (OSRdyTbl[y] == 0x00) {                   
     301 2DEA      MOV	R30,R10
     302 27FF      CLR	R31
     303 0FE8      ADD	R30,R24
     304 1FF9      ADC	R31,R25
     305 8020      LDD	R2,Z+0
     306 2022      TST	R2
     307 F459      BNE	0x0313
(0706)         OSRdyGrp &= ~OSTCBCur->OSTCBBitY;        /* Clear event grp bit if this was only task pending  */
     308 91E0 0A36 LDS	R30,OSTCBCur
     30A 91F0 0A37 LDS	R31,OSTCBCur+1
     30C 8427      LDD	R2,Z+15
     30D 9420      COM	R2
     30E 9030 0B46 LDS	R3,OSRdyGrp
     310 2032      AND	R3,R2
     311 9230 0B46 STS	OSRdyGrp,R3
(0707)     }
(0708)     pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;          /* Put task in waiting list  */
     313 9020 0A36 LDS	R2,OSTCBCur
     315 9030 0A37 LDS	R3,OSTCBCur+1
     317 01C8      MOVW	R24,R16
     318 9606      ADIW	R24,6
     319 01F1      MOVW	R30,R2

⌨️ 快捷键说明

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