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

📄 ucos-port2.lst

📁 把UCOSII移植到AVR MEGA8上的程序 应用程序为驱动1602显示器,虽说有些简单,但可测试UCOS的运行
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0304 8240      STD	Z+0,R4
    0305 2055      TST	R5
    0306 F441      BNE	0x030F
(0592)         pevent->OSEventGrp &= ~bity;                  /* Clr group bit if this was only task pending   */
    0307 01C8      MOVW	R24,R16
    0308 9601      ADIW	R24,1
    0309 2C4C      MOV	R4,R12
    030A 9440      COM	R4
    030B 01FC      MOVW	R30,R24
    030C 8050      LDD	R5,Z+0
    030D 2054      AND	R5,R4
    030E 8250      STD	Z+0,R5
(0593)     }
(0594)     ptcb                 =  OSTCBPrioTbl[prio];       /* Point to this task's OS_TCB                   */
    030F E082      LDI	R24,2
    0310 9F84      MUL	R24,R20
    0311 01F0      MOVW	R30,R0
    0312 EF82      LDI	R24,0xF2
    0313 E090      LDI	R25,0
    0314 0FE8      ADD	R30,R24
    0315 1FF9      ADC	R31,R25
    0316 80E0      LDD	R14,Z+0
    0317 80F1      LDD	R15,Z+1
(0595)     ptcb->OSTCBDly       =  0;                        /* Prevent OSTimeTick() from readying task       */
    0318 2422      CLR	R2
    0319 2433      CLR	R3
    031A 01F7      MOVW	R30,R14
    031B 8631      STD	Z+9,R3
    031C 8620      STD	Z+8,R2
(0596)     ptcb->OSTCBEventPtr  = (OS_EVENT *)0;             /* Unlink ECB from this task                     */
    031D 01F7      MOVW	R30,R14
    031E 8237      STD	Z+7,R3
    031F 8226      STD	Z+6,R2
(0597) #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
(0598)     ptcb->OSTCBMsg       = msg;                       /* Send message directly to waiting task         */
(0599) #else
(0600)     msg                  = msg;                       /* Prevent compiler warning if not used          */
(0601) #endif
(0602)     ptcb->OSTCBStat     &= ~msk;                      /* Clear bit associated with event type          */
    0320 01C7      MOVW	R24,R14
    0321 960A      ADIW	R24,0xA
    0322 844A      LDD	R4,Y+10
    0323 9440      COM	R4
    0324 01FC      MOVW	R30,R24
    0325 8050      LDD	R5,Z+0
    0326 2054      AND	R5,R4
    0327 8250      STD	Z+0,R5
(0603)     if (ptcb->OSTCBStat == OS_STAT_RDY) {             /* See if task is ready (could be susp'd)        */
    0328 01F7      MOVW	R30,R14
    0329 8422      LDD	R2,Z+10
    032A 2022      TST	R2
    032B F479      BNE	0x033B
(0604)         OSRdyGrp        |=  bity;                     /* Put task in the ready to run list             */
    032C 902001AD  LDS	R2,OSRdyGrp
    032E 282C      OR	R2,R12
    032F 922001AD  STS	OSRdyGrp,R2
(0605)         OSRdyTbl[y]     |=  bitx;
    0331 EA8A      LDI	R24,0xAA
    0332 E091      LDI	R25,1
    0333 2C2A      MOV	R2,R10
    0334 2433      CLR	R3
    0335 0E28      ADD	R2,R24
    0336 1E39      ADC	R3,R25
    0337 01F1      MOVW	R30,R2
    0338 8040      LDD	R4,Z+0
    0339 2A46      OR	R4,R22
    033A 8240      STD	Z+0,R4
(0606)     }
(0607)     return (prio);
    033B 2F04      MOV	R16,R20
    033C DA51      RCALL	pop_gset5
    033D 9508      RET
(0608) }
(0609) #endif
(0610) /*$PAGE*/
(0611) /*
(0612) *********************************************************************************************************
(0613) *                                   MAKE TASK WAIT FOR EVENT TO OCCUR
(0614) *
(0615) * Description: This function is called by other uC/OS-II services to suspend a task because an event has
(0616) *              not occurred.
(0617) *
(0618) * Arguments  : pevent   is a pointer to the event control block for which the task will be waiting for.
(0619) *
(0620) * Returns    : none
(0621) *
(0622) * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
(0623) *********************************************************************************************************
(0624) */
(0625) #if OS_EVENT_EN > 0
(0626) void  OS_EventTaskWait (OS_EVENT *pevent)
(0627) {
(0628)     OSTCBCur->OSTCBEventPtr = pevent;            /* Store pointer to event control block in TCB        */
_OS_EventTaskWait:
  pevent               --> R16
    033E 91E00122  LDS	R30,OSTCBCur
    0340 91F00123  LDS	R31,OSTCBCur+1
    0342 8317      STD	Z+7,R17
    0343 8306      STD	Z+6,R16
(0629)     if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {   /* Task no longer ready      */
    0344 EA8A      LDI	R24,0xAA
    0345 E091      LDI	R25,1
    0346 8425      LDD	R2,Z+13
    0347 2433      CLR	R3
    0348 0E28      ADD	R2,R24
    0349 1E39      ADC	R3,R25
    034A 91E00122  LDS	R30,OSTCBCur
    034C 91F00123  LDS	R31,OSTCBCur+1
    034E 8446      LDD	R4,Z+14
    034F 9440      COM	R4
    0350 01F1      MOVW	R30,R2
    0351 8050      LDD	R5,Z+0
    0352 2054      AND	R5,R4
    0353 2C45      MOV	R4,R5
    0354 8240      STD	Z+0,R4
    0355 2055      TST	R5
    0356 F459      BNE	0x0362
(0630)         OSRdyGrp &= ~OSTCBCur->OSTCBBitY;        /* Clear event grp bit if this was only task pending  */
    0357 91E00122  LDS	R30,OSTCBCur
    0359 91F00123  LDS	R31,OSTCBCur+1
    035B 8427      LDD	R2,Z+15
    035C 9420      COM	R2
    035D 903001AD  LDS	R3,OSRdyGrp
    035F 2032      AND	R3,R2
    0360 923001AD  STS	OSRdyGrp,R3
(0631)     }
(0632)     pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;          /* Put task in waiting list  */
    0362 01C8      MOVW	R24,R16
    0363 9606      ADIW	R24,6
    0364 91E00122  LDS	R30,OSTCBCur
    0366 91F00123  LDS	R31,OSTCBCur+1
    0368 8425      LDD	R2,Z+13
    0369 2433      CLR	R3
    036A 0E28      ADD	R2,R24
    036B 1E39      ADC	R3,R25
    036C 91E00122  LDS	R30,OSTCBCur
    036E 91F00123  LDS	R31,OSTCBCur+1
    0370 8446      LDD	R4,Z+14
    0371 01F1      MOVW	R30,R2
    0372 8050      LDD	R5,Z+0
    0373 2854      OR	R5,R4
    0374 8250      STD	Z+0,R5
(0633)     pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY;
    0375 01C8      MOVW	R24,R16
    0376 9601      ADIW	R24,1
    0377 91E00122  LDS	R30,OSTCBCur
    0379 91F00123  LDS	R31,OSTCBCur+1
    037B 8447      LDD	R4,Z+15
    037C 01FC      MOVW	R30,R24
    037D 8050      LDD	R5,Z+0
    037E 2854      OR	R5,R4
    037F 8250      STD	Z+0,R5
    0380 9508      RET
(0634) }
(0635) #endif
(0636) /*$PAGE*/
(0637) /*
(0638) *********************************************************************************************************
(0639) *                              MAKE TASK READY TO RUN BASED ON EVENT TIMEOUT
(0640) *
(0641) * Description: This function is called by other uC/OS-II services to make a task ready to run because a
(0642) *              timeout occurred.
(0643) *
(0644) * Arguments  : pevent   is a pointer to the event control block which is readying a task.
(0645) *
(0646) * Returns    : none
(0647) *
(0648) * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
(0649) *********************************************************************************************************
(0650) */
(0651) #if OS_EVENT_EN > 0
(0652) void  OS_EventTO (OS_EVENT *pevent)
(0653) {
(0654)     if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {
_OS_EventTO:
  pevent               --> R16
    0381 01C8      MOVW	R24,R16
    0382 9606      ADIW	R24,6
    0383 91E00122  LDS	R30,OSTCBCur
    0385 91F00123  LDS	R31,OSTCBCur+1
    0387 8425      LDD	R2,Z+13
    0388 2433      CLR	R3
    0389 0E28      ADD	R2,R24
    038A 1E39      ADC	R3,R25
    038B 91E00122  LDS	R30,OSTCBCur
    038D 91F00123  LDS	R31,OSTCBCur+1
    038F 8446      LDD	R4,Z+14
    0390 9440      COM	R4
    0391 01F1      MOVW	R30,R2
    0392 8050      LDD	R5,Z+0
    0393 2054      AND	R5,R4
    0394 2C45      MOV	R4,R5
    0395 8240      STD	Z+0,R4
    0396 2055      TST	R5
    0397 F461      BNE	0x03A4
(0655)         pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
    0398 01C8      MOVW	R24,R16
    0399 9601      ADIW	R24,1
    039A 91E00122  LDS	R30,OSTCBCur
    039C 91F00123  LDS	R31,OSTCBCur+1
    039E 8447      LDD	R4,Z+15
    039F 9440      COM	R4
    03A0 01FC      MOVW	R30,R24
    03A1 8050      LDD	R5,Z+0
    03A2 2054      AND	R5,R4
    03A3 8250      STD	Z+0,R5
(0656)     }
(0657)     OSTCBCur->OSTCBStat     = OS_STAT_RDY;       /* Set status to ready                                */
    03A4 2422      CLR	R2
    03A5 91E00122  LDS	R30,OSTCBCur
    03A7 91F00123  LDS	R31,OSTCBCur+1
    03A9 8622      STD	Z+10,R2
(0658)     OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;     /* No longer waiting for event                        */
    03AA 2433      CLR	R3
    03AB 91E00122  LDS	R30,OSTCBCur
    03AD 91F00123  LDS	R31,OSTCBCur+1
    03AF 8237      STD	Z+7,R3
    03B0 8226      STD	Z+6,R2
    03B1 9508      RET
_OS_EventWaitListInit:
  ptbl                 --> R20
  pevent               --> R16
    03B2 D9E5      RCALL	push_gset1
(0659) }
(0660) #endif
(0661) /*$PAGE*/
(0662) /*
(0663) *********************************************************************************************************
(0664) *                                 INITIALIZE EVENT CONTROL BLOCK'S WAIT LIST
(0665) *
(0666) * Description: This function is called by other uC/OS-II services to initialize the event wait list.
(0667) *
(0668) * Arguments  : pevent    is a pointer to the event control block allocated to the event.
(0669) *
(0670) * Returns    : none
(0671) *
(0672) * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
(0673) *********************************************************************************************************
(0674) */
(0675) #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0)
(0676) void  OS_EventWaitListInit (OS_EVENT *pevent)
(0677) {
(0678)     INT8U  *ptbl;
(0679) 
(0680) 
(0681)     pevent->OSEventGrp = 0x00;                   /* No task waiting on event                           */
    03B3 2422      CLR	R2
    03B4 01F8      MOVW	R30,R16
    03B5 8221      STD	Z+1,R2
(0682)     ptbl               = &pevent->OSEventTbl[0];
    03B6 01A8      MOVW	R20,R16
    03B7 5F4A      SUBI	R20,0xFA
    03B8 4F5F      SBCI	R21,0xFF
(0683) 
(0684) #if OS_EVENT_TBL_SIZE > 0
(0685)     *ptbl++            = 0x00;
    03B9 01FA      MOVW	R30,R20
    03BA 9221      ST	R2,Z+
(0686) #endif
(0687) 
(0688) #if OS_EVENT_TBL_SIZE > 1
(0689)     *ptbl++            = 0x00;
    03BB 9221      ST	R2,Z+
(0690) #endif
(0691) 
(0692) #if OS_EVENT_TBL_SIZE > 2
(0693)     *ptbl++            = 0x00;
    03BC 9221      ST	R2,Z+
    03BD 01AF      MOVW	R20,R30
    03BE D9DC      RCALL	pop_gset1
    03BF 9508      RET
_OS_Sched:
  y                    --> R12
  cpu_sr               --> R10
    03C0 D9D1      RCALL	push_gset4
(0694) #endif
(0695) 
(0696) #if OS_EVENT_TBL_SIZE > 3
(0697)     *ptbl++            = 0x00;
(0698) #endif
(0699) 
(0700) #if OS_EVENT_TBL_SIZE > 4
(0701)     *ptbl++            = 0x00;
(0702) #endif
(0703) 
(0704) #if OS_EVENT_TBL_SIZE > 5
(0705)     *ptbl++            = 0x00;
(0706) #endif
(0707) 
(0708) #if OS_EVENT_TBL_SIZE > 6
(0709)     *ptbl++            = 0x00;
(0710) #endif
(0711) 
(0712) #if OS_EVENT_TBL_SIZE > 7
(0713)     *ptbl              = 0x00;
(0714) #endif
(0715) }
(0716) #endif
(0717) /*$PAGE*/
(0718) /*
(0719) *********************************************************************************************************
(0720) *                                              SCHEDULER
(0721) *
(0722) * Description: This function is called by other uC/OS-II services to determine whether a new, high
(0723) *              priority task has been made ready to run.  This function is invoked by TASK level code
(0724) *              and is not used to reschedule tasks from ISRs (see OSIntExit() for ISR rescheduling).
(0725) *
(0726) * Arguments  : none
(0727) *
(0728) * Returns    : none
(0729) *
(0730) * Notes      : 1) This function is INTERNAL to uC/OS-II and your application should not call it.
(0731) *              2) Rescheduling is prevented when the scheduler is locked (see OSSchedLock())
(0732) *********************************************************************************************************
(0733) */
(0734) 
(0735) void  OS_Sched (void)
(0736) {
(0737) #if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
(0738)     OS_CPU_SR  cpu_sr;
(0739) #endif    
(0740)     INT8U      y;
(0741) 
(0742) 
(0743)     OS_ENTER_CRITICAL(

⌨️ 快捷键说明

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