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

📄 ucos.lst

📁 ICCAVR下的uCOS mega8程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    03F0 01F8      MOVW	R30,R16
    03F1 8444      LDD	R4,Z+12
    03F2 01F1      MOVW	R30,R2
    03F3 8050      LDD	R5,Z+0
    03F4 2854      OR	R5,R4
    03F5 8250      STD	Z+0,R5
    03F6 C005      RJMP	0x03FC
    03F7 E081      LDI	R24,1
(0221)         x             = OSUnMapTbl[OSRdyTbl[y]];
    03F8 E090      LDI	R25,0
    03F9 01F8      MOVW	R30,R16
    03FA 8397      STD	Z+7,R25
    03FB 8386      STD	Z+6,R24
    03FC 01F8      MOVW	R30,R16
    03FD 8102      LDD	R16,Z+2
    03FE 8113      LDD	R17,Z+3
    03FF 930A      ST	R16,-Y
    0400 910F      POP	R16
    0401 BF0F      OUT	0x3F,R16
    0402 9109      LD	R16,Y+
    0403 01F8      MOVW	R30,R16
    0404 8581      LDD	R24,Z+9
(0222)         OSPrioHighRdy = (INT8U)((y << 3) + x);
    0405 308F      CPI	R24,0xF
    0406 F009      BEQ	0x0408
    0407 CFBC      RJMP	0x03C4
    0408 930A      ST	R16,-Y
    0409 B70F      IN	R16,0x3F
    040A 94F8      BCLR	7
    040B 930F      PUSH	R16
    040C 9109      LD	R16,Y+
    040D E081      LDI	R24,1
    040E E090      LDI	R25,0
    040F E0A0      LDI	R26,0
    0410 E0B0      LDI	R27,0
    0411 904001EC  LDS	R4,OSTime+2
(0223)         OSPrioCur     = OSPrioHighRdy;
    0413 905001ED  LDS	R5,OSTime+3
    0415 902001EA  LDS	R2,OSTime
(0224)         OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
    0417 903001EB  LDS	R3,OSTime+1
    0419 0E28      ADD	R2,R24
    041A 1E39      ADC	R3,R25
    041B 1E4A      ADC	R4,R26
    041C 1E5B      ADC	R5,R27
    041D 923001EB  STS	OSTime+1,R3
    041F 922001EA  STS	OSTime,R2
    0421 925001ED  STS	OSTime+3,R5
(0225)         OSTCBCur      = OSTCBHighRdy;
    0423 924001EC  STS	OSTime+2,R4
    0425 930A      ST	R16,-Y
    0426 910F      POP	R16
(0226)         OSStartHighRdy();                            /* Execute target specific code to start task     */
    0427 BF0F      OUT	0x3F,R16
    0428 9109      LD	R16,Y+
(0227)     }
    0429 9508      RET
_OSTaskStkInit:
  stks                 --> R14
  tmp                  --> R12
  stk                  --> R10
  opt                  --> Y+8
  ptos                 --> Y+6
  pdata                --> R18
  task                 --> R16
    042A 940E0784  CALL	push_gset5x
(0228) }
(0229) /*$PAGE*/
(0230) /*
(0231) *********************************************************************************************************
(0232) *                                              IDLE TASK
(0233) *
(0234) * Description: This task is internal to uC/OS-II and executes whenever no other higher priority tasks
(0235) *              executes because they are waiting for event(s) to occur.
(0236) *
(0237) * Arguments  : none
(0238) *
(0239) * Returns    : none
(0240) *********************************************************************************************************
(0241) */
(0242) 
(0243) void OSTaskIdle (void *pdata)
(0244) {
(0245)     pdata = pdata;                               /* Prevent compiler warning for not using 'pdata'     */
(0246)     for (;;) {
(0247)         OS_ENTER_CRITICAL();
    042C 80AE      LDD	R10,Y+6
    042D 80BF      LDD	R11,Y+7
    042E 01C5      MOVW	R24,R10
    042F 5484      SUBI	R24,0x44
    0430 4090      SBCI	R25,0
(0248)         OSIdleCtr++;
    0431 01F8      MOVW	R30,R16
    0432 90C5      LPM	R12,Z+
    0433 90D4      LPM	R13,0(Z)
    0434 011C      MOVW	R2,R24
    0435 9701      SBIW	R24,1
    0436 01F1      MOVW	R30,R2
    0437 82C0      STD	Z+0,R12
    0438 011C      MOVW	R2,R24
    0439 9701      SBIW	R24,1
    043A 017C      MOVW	R14,R24
    043B 0126      MOVW	R4,R12
    043C 2C45      MOV	R4,R5
    043D 2455      CLR	R5
    043E 01F1      MOVW	R30,R2
    043F 8240      STD	Z+0,R4
    0440 0115      MOVW	R2,R10
    0441 01C1      MOVW	R24,R2
    0442 9701      SBIW	R24,1
    0443 2444      CLR	R4
    0444 01F1      MOVW	R30,R2
    0445 8240      STD	Z+0,R4
    0446 011C      MOVW	R2,R24
    0447 9701      SBIW	R24,1
    0448 015C      MOVW	R10,R24
(0249)         OS_EXIT_CRITICAL();
    0449 E081      LDI	R24,1
    044A 01F1      MOVW	R30,R2
    044B 8380      STD	Z+0,R24
    044C 0115      MOVW	R2,R10
    044D 01C1      MOVW	R24,R2
    044E 9701      SBIW	R24,1
    044F 015C      MOVW	R10,R24
    0450 E082      LDI	R24,2
(0250)     }
(0251) }
(0252) /*$PAGE*/
(0253) /*
(0254) *********************************************************************************************************
(0255) *                                            INITIALIZE TCB
(0256) *
(0257) * Description: This function is internal to uC/OS-II and is used to initialize a Task Control Block when
(0258) *              a task is created (see OSTaskCreate() and OSTaskCreateExt()).
(0259) *
(0260) * Arguments  : prio          is the priority of the task being created
(0261) *
(0262) *              ptos          is a pointer to the task's top-of-stack assuming that the CPU registers
(0263) *                            have been placed on the stack.  Note that the top-of-stack corresponds to a 
(0264) *                            'high' memory location is OS_STK_GROWTH is set to 1 and a 'low' memory
(0265) *                            location if OS_STK_GROWTH is set to 0.  Note that stack growth is CPU
(0266) *                            specific.
(0267) *
(0268) *              pbos          is a pointer to the bottom of stack.  A NULL pointer is passed if called by
(0269) *                            'OSTaskCreate()'.
(0270) *
(0271) *              id            is the task's ID (0..65535)
(0272) *
(0273) *              stk_size      is the size of the stack (in 'stack units').  If the stack units are INT8Us
(0274) *                            then, 'stk_size' contains the number of bytes for the stack.  If the stack
(0275) *                            units are INT32Us then, the stack contains '4 * stk_size' bytes.  The stack
(0276) *                            units are established by the #define constant OS_STK which is CPU
(0277) *                            specific.  'stk_size' is 0 if called by 'OSTaskCreate()'.
(0278) *
(0279) *              pext          is a pointer to a user supplied memory area that is used to extend the task
(0280) *                            control block.  This allows you to store the contents of floating-point
(0281) *                            registers, MMU registers or anything else you could find useful during a 
(0282) *                            context switch.  You can even assign a name to each task and store this name
(0283) *                            in this TCB extension.  A NULL pointer is passed if called by OSTaskCreate().
(0284) *
(0285) *              opt           options as passed to 'OSTaskCreateExt()' or, 
(0286) *                            0 if called from 'OSTaskCreate()'.
(0287) *
(0288) * Returns    : OS_NO_ERR         if the call was successful
(0289) *              OS_NO_MORE_TCB    if there are no more free TCBs to be allocated and thus, the task cannot
(0290) *                                be created.
(0291) *
(0292) * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
(0293) *********************************************************************************************************
(0294) */
(0295) 
(0296) INT8U OSTCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT16U stk_size, void *pext, INT16U opt)
(0297) {
(0298)     OS_TCB *ptcb;
(0299) 
(0300) 
(0301)     OS_ENTER_CRITICAL();
    0451 01F1      MOVW	R30,R2
    0452 8380      STD	Z+0,R24
    0453 0115      MOVW	R2,R10
    0454 01C1      MOVW	R24,R2
    0455 9701      SBIW	R24,1
(0302)     ptcb = OSTCBFreeList;                                  /* Get a free TCB from the free TCB list    */
    0456 015C      MOVW	R10,R24
    0457 E083      LDI	R24,3
    0458 01F1      MOVW	R30,R2
    0459 8380      STD	Z+0,R24
(0303)     if (ptcb != (OS_TCB *)0) {
    045A 0115      MOVW	R2,R10
    045B 01C1      MOVW	R24,R2
    045C 9701      SBIW	R24,1
    045D 015C      MOVW	R10,R24
    045E E084      LDI	R24,4
(0304)         OSTCBFreeList        = ptcb->OSTCBNext;            /* Update pointer to free TCB list          */
    045F 01F1      MOVW	R30,R2
    0460 8380      STD	Z+0,R24
    0461 0115      MOVW	R2,R10
    0462 01C1      MOVW	R24,R2
    0463 9701      SBIW	R24,1
    0464 015C      MOVW	R10,R24
    0465 E085      LDI	R24,5
(0305)         OS_EXIT_CRITICAL();
    0466 01F1      MOVW	R30,R2
    0467 8380      STD	Z+0,R24
    0468 0115      MOVW	R2,R10
    0469 01C1      MOVW	R24,R2
(0306)         ptcb->OSTCBStkPtr    = ptos;                       /* Load Stack pointer in TCB                */
    046A 9701      SBIW	R24,1
    046B 015C      MOVW	R10,R24
    046C E086      LDI	R24,6
(0307)         ptcb->OSTCBPrio      = (INT8U)prio;                /* Load task priority into TCB              */
    046D 01F1      MOVW	R30,R2
(0308)         ptcb->OSTCBStat      = OS_STAT_RDY;                /* Task is ready to run                     */
    046E 8380      STD	Z+0,R24
    046F 0115      MOVW	R2,R10
    0470 01C1      MOVW	R24,R2
(0309)         ptcb->OSTCBDly       = 0;                          /* Task is not delayed                      */
    0471 9701      SBIW	R24,1
    0472 015C      MOVW	R10,R24
    0473 E087      LDI	R24,7
    0474 01F1      MOVW	R30,R2
(0310) 
(0311)         pext                 = pext;                       /* Prevent compiler warning if not used     */
(0312)         stk_size             = stk_size;
(0313)         pbos                 = pbos;
(0314)         opt                  = opt;
(0315)         id                   = id;
(0316) 
(0317)         ptcb->OSTCBY         = prio >> 3;                  /* Pre-compute X, Y, BitX and BitY          */
    0475 8380      STD	Z+0,R24
    0476 0115      MOVW	R2,R10
    0477 01C1      MOVW	R24,R2
    0478 9701      SBIW	R24,1
    0479 015C      MOVW	R10,R24
    047A E088      LDI	R24,0x8
(0318)         ptcb->OSTCBBitY      = OSMapTbl[ptcb->OSTCBY];
    047B 01F1      MOVW	R30,R2
    047C 8380      STD	Z+0,R24
    047D 0115      MOVW	R2,R10
    047E 01C1      MOVW	R24,R2
    047F 9701      SBIW	R24,1
    0480 015C      MOVW	R10,R24
    0481 E089      LDI	R24,0x9
    0482 01F1      MOVW	R30,R2
    0483 8380      STD	Z+0,R24
    0484 0115      MOVW	R2,R10
    0485 01C1      MOVW	R24,R2
(0319)         ptcb->OSTCBX         = prio & 0x07;
    0486 9701      SBIW	R24,1
    0487 015C      MOVW	R10,R24
    0488 E180      LDI	R24,0x10
    0489 01F1      MOVW	R30,R2
(0320)         ptcb->OSTCBBitX      = OSMapTbl[ptcb->OSTCBX];
    048A 8380      STD	Z+0,R24
    048B 0115      MOVW	R2,R10
    048C 01C1      MOVW	R24,R2
    048D 9701      SBIW	R24,1
    048E 015C      MOVW	R10,R24
    048F E181      LDI	R24,0x11
    0490 01F1      MOVW	R30,R2
    0491 8380      STD	Z+0,R24
    0492 0115      MOVW	R2,R10
    0493 01C1      MOVW	R24,R2
    0494 9701      SBIW	R24,1
(0321) 
(0322)         OS_ENTER_CRITICAL();
    0495 015C      MOVW	R10,R24
    0496 E182      LDI	R24,0x12
    0497 01F1      MOVW	R30,R2
    0498 8380      STD	Z+0,R24
    0499 0115      MOVW	R2,R10
(0323)         OSTCBPrioTbl[prio]   = ptcb;
    049A 01C1      MOVW	R24,R2
    049B 9701      SBIW	R24,1
    049C 015C      MOVW	R10,R24
    049D E183      LDI	R24,0x13
    049E 01F1      MOVW	R30,R2
    049F 8380      STD	Z+0,R24
    04A0 0115      MOVW	R2,R10
    04A1 01C1      MOVW	R24,R2
    04A2 9701      SBIW	R24,1
(0324)         ptcb->OSTCBNext      = OSTCBList;                  /* Link into TCB chain                      */
    04A3 015C      MOVW	R10,R24
    04A4 E184      LDI	R24,0x14
    04A5 01F1      MOVW	R30,R2
    04A6 8380      STD	Z+0,R24
    04A7 0115      MOVW	R2,R10
    04A8 01C1      MOVW	R24,R2
    04A9 9701      SBIW	R24,1
(0325)         ptcb->OSTCBPrev      = (OS_TCB *)0;
    04AA 015C      MOVW	R10,R24
    04AB E185      LDI	R24,0x15
    04AC 01F1      MOVW	R30,R2
    04AD 8380      STD	Z+0,R24
    04AE 0169      MOVW	R12,R18
(0326)         if (OSTCBList != (OS_TCB *)0) {
    04AF 0115      MOVW	R2,R10
    04B0 01C1      MOVW	R24,R2
    04B1 9701      SBIW	R24,1
    04B2 01F1      MOVW	R30,R2
    04B3 82C0      STD	Z+0,R12
    04B4 011C      MOVW	R2,R24
    04B5 9701      SBIW	R24,1
    04B6 0126      MOVW	R4,R12
(0327)             OSTCBList->OSTCBPrev = ptcb;
    04B7 2C45      MOV	R4,R5
    04B8 2455      CLR	R5
    04B9 01F1      MOVW	R30,R2
    04BA 8240      STD	Z+0,R4
    04BB 011C      MOVW	R2,R24
    04BC 9701      SBIW	R24,1
(0328)         }
(0329)         OSTCBList               = ptcb;
    04BD 015C      MOVW	R10,R24
    04BE E188      LDI	R24,0x18
    04BF 01F1      MOVW	R30,R2
    04C0 8380      STD	Z+0,R24
(0330)         OSRdyGrp               |= ptcb->OSTCBBitY;         /* Make task ready to run                   */
    04C1 0115      MOVW	R2,R10
    04C2 01C1      MOVW	R24,R2
    04C3 9701      SBIW	R24,1
    04C4 015C      MOVW	R10,R24
    04C5 E189      LDI	R24,0x19
    04C6 01F1      MOVW	R30,R2
    04C7 8380      STD	Z+0,R24
(0331)         OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
    04C8 0115      MOVW	R2,R10
    04C9 01C1      MOVW	R24,R2
    04CA 9701      SBIW	R24,1
    04CB 015C      MOVW	R10,R24
    04CC E280      LDI	R24,0x20
    04CD 01F1      MOVW	R30,R2
    04CE 8380      STD	Z+0,R24
    04CF 0115      MOVW	R2,R10
    04D0 01C1      MOVW	R24,R2
    04D1 9701      SBIW	R24,1
    04D2 015C      MOVW	R10,R24
    04D3 E281      LDI	R24,0x21
    04D4 01F1      MOVW	R30,R2
(0332)         OS_EXIT_CRITICAL();
    04D5 8380      STD	Z+0,R24
    04D6 0115      MOVW	R2,R10
    04D7 01C1      MOVW	R24,R2
    04D8 9701      SBIW	R24,1
(0333)         return (OS_NO_ERR);
    04D9 015C      MOVW	R10,R24
    04DA E282      LDI	R24,0x22

⌨️ 快捷键说明

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