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

📄 ucos.lst

📁 ucos在protus上得仿真试验
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0352) */
(0353) 
(0354) void OSTimeTick (void)
(0355) {
(0356)     OS_TCB *ptcb;
(0357) 
(0358)     ptcb = OSTCBList;                                      /* Point at first TCB in TCB list           */
_OSTimeTick:
  ptcb                 --> R16
    046F 9100020E  LDS	R16,_OSTCBList
    0471 9110020F  LDS	R17,_OSTCBList+1
    0473 C03B      RJMP	0x04AF
(0359)     while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {              /* Go through all TCBs in TCB list          */
(0360)         OS_ENTER_CRITICAL();
    0474 930A      ST	R16,-Y
    0475 B70F      IN	R16,P3F
    0476 94F8      BCLR	7
    0477 930F      PUSH	R16
    0478 9109      LD	R16,Y+
(0361)         if (ptcb->OSTCBDly != 0) {                         /* Delayed or waiting for event with TO     */
    0479 01F8      MOVW	R30,R16
    047A 8026      LDD	R2,6+Z
    047B 8037      LDD	R3,7+Z
    047C 2022      TST	R2
    047D F419      BNE	0x0481
    047E 2033      TST	R3
    047F F409      BNE	0x0481
    0480 C027      RJMP	0x04A8
(0362)             if (--ptcb->OSTCBDly == 0) {                   /* Decrement nbr of ticks to end of delay   */
    0481 01C8      MOVW	R24,R16
    0482 9606      ADIW	R24,6
    0483 01FC      MOVW	R30,R24
    0484 8180      LDD	R24,0+Z
    0485 8191      LDD	R25,1+Z
    0486 9701      SBIW	R24,1
    0487 012C      MOVW	R4,R24
    0488 8240      STD	R4,0+Z
    0489 8251      STD	R5,1+Z
    048A 3080      CPI	R24,0
    048B 0789      CPC	R24,R25
    048C F4D9      BNE	0x04A8
(0363)                 if (!(ptcb->OSTCBStat & OS_STAT_SUSPEND)) {    /* Is task suspended?                   */
    048D 01F8      MOVW	R30,R16
    048E 8420      LDD	R2,8+Z
    048F FC23      SBRC	R2,3
    0490 C012      RJMP	0x04A3
(0364)                     OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task Rdy to Run (timed out)*/
    0491 8425      LDD	R2,13+Z
    0492 9030021A  LDS	R3,_OSRdyGrp
    0494 2832      OR	R3,R2
    0495 9230021A  STS	_OSRdyGrp,R3
(0365)                     OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
    0497 E188      LDI	R24,0x18
    0498 E092      LDI	R25,2
    0499 8423      LDD	R2,11+Z
    049A 2433      CLR	R3
    049B 0E28      ADD	R2,R24
    049C 1E39      ADC	R3,R25
    049D 8444      LDD	R4,12+Z
    049E 01F1      MOVW	R30,R2
    049F 8050      LDD	R5,0+Z
    04A0 2854      OR	R5,R4
    04A1 8250      STD	R5,0+Z
(0366)                 } else {                                       /* Yes, Leave 1 tick to prevent ...     */
    04A2 C005      RJMP	0x04A8
(0367)                     ptcb->OSTCBDly = 1;                        /* ... loosing the task when the ...    */
    04A3 E081      LDI	R24,1
    04A4 E090      LDI	R25,0
    04A5 01F8      MOVW	R30,R16
    04A6 8386      STD	R24,6+Z
    04A7 8397      STD	R25,7+Z
(0368)                 }                                              /* ... suspension is removed.           */
(0369)             }
(0370)         }
(0371)         ptcb = ptcb->OSTCBNext;                            /* Point at next TCB in TCB list            */
    04A8 01F8      MOVW	R30,R16
    04A9 8102      LDD	R16,2+Z
    04AA 8113      LDD	R17,3+Z
(0372)         OS_EXIT_CRITICAL();
    04AB 930A      ST	R16,-Y
    04AC 910F      POP	R16
    04AD BF0F      OUT	P3F,R16
    04AE 9109      LD	R16,Y+
    04AF 01F8      MOVW	R30,R16
    04B0 8581      LDD	R24,9+Z
    04B1 308F      CPI	R24,0xF
    04B2 F009      BEQ	0x04B4
    04B3 CFC0      RJMP	0x0474
(0373)     }
(0374)     OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter           */
    04B4 930A      ST	R16,-Y
    04B5 B70F      IN	R16,P3F
    04B6 94F8      BCLR	7
    04B7 930F      PUSH	R16
    04B8 9109      LD	R16,Y+
(0375)     OSTime++;
    04B9 E081      LDI	R24,1
    04BA E090      LDI	R25,0
    04BB E0A0      LDI	R26,0
    04BC E0B0      LDI	R27,0
    04BD 904001EC  LDS	R4,_OSTime+2
    04BF 905001ED  LDS	R5,_OSTime+3
    04C1 902001EA  LDS	R2,_OSTime
    04C3 903001EB  LDS	R3,_OSTime+1
    04C5 0E28      ADD	R2,R24
    04C6 1E39      ADC	R3,R25
    04C7 1E4A      ADC	R4,R26
    04C8 1E5B      ADC	R5,R27
    04C9 923001EB  STS	_OSTime+1,R3
    04CB 922001EA  STS	_OSTime,R2
    04CD 925001ED  STS	_OSTime+3,R5
    04CF 924001EC  STS	_OSTime+2,R4
(0376)     OS_EXIT_CRITICAL();
    04D1 930A      ST	R16,-Y
    04D2 910F      POP	R16
    04D3 BF0F      OUT	P3F,R16
    04D4 9109      LD	R16,Y+
(0377) }
    04D5 9508      RET
_OSTaskStkInit:
  stks                 --> R14
  tmp                  --> R12
  stk                  --> R10
  opt                  --> Y+8
  ptos                 --> Y+6
  pdata                --> R18
  task                 --> R16
    04D6 D31C      RCALL	push_gset5x
FILE: D:\job\avrtest\光盘\开发板\iccavr\source\os_task.c
(0001) 
(0002) #ifndef  OS_MASTER_FILE
(0003) #include "includes.h"
(0004) #endif
(0005) 
(0006) /*$PAGE*/
(0007) /*
(0008) *********************************************************************************************************
(0009) *                                            CREATE A TASK
(0010) *
(0011) * Description: This function is used to have uC/OS-II manage the execution of a task.  Tasks can either
(0012) *              be created prior to the start of multitasking or by a running task.  A task cannot be
(0013) *              created by an ISR.
(0014) *
(0015) * Arguments  : task     is a pointer to the task's code
(0016) *
(0017) *              pdata    is a pointer to an optional data area which can be used to pass parameters to
(0018) *                       the task when the task first executes.  Where the task is concerned it thinks
(0019) *                       it was invoked and passed the argument 'pdata' as follows:
(0020) *
(0021) *                           void Task (void *pdata)
(0022) *                           {
(0023) *                               for (;;) {
(0024) *                                   Task code;
(0025) *                               }
(0026) *                           }
(0027) *
(0028) *              ptos     is a pointer to the task's top of stack.  If the configuration constant 
(0029) *                       OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high
(0030) *                       memory to low memory).  'pstk' will thus point to the highest (valid) memory 
(0031) *                       location of the stack.  If OS_STK_GROWTH is set to 0, 'pstk' will point to the 
(0032) *                       lowest memory location of the stack and the stack will grow with increasing
(0033) *                       memory locations.
(0034) *
(0035) *              prio     is the task's priority.  A unique priority MUST be assigned to each task and the
(0036) *                       lower the number, the higher the priority.
(0037) *
(0038) * Returns    : OS_NO_ERR        if the function was successful.
(0039) *              OS_PRIO_EXIT     if the task priority already exist 
(0040) *                               (each task MUST have a unique priority).
(0041) *              OS_PRIO_INVALID  if the priority you specify is higher that the maximum allowed 
(0042) *                               (i.e. >= OS_LOWEST_PRIO)
(0043) *********************************************************************************************************
(0044) */
(0045) 
(0046) #if OS_TASK_CREATE_EN
(0047) OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt){
(0048) 
(0049)     INT8U  *stk;
(0050)     INT8U  *stks;		// Temp. variable used for setting up AVR hardware stack
(0051)     INT16U tmp;
(0052) 
(0053) 
(0054)     opt     = opt;			// 'opt' is not used, prevent warning
(0055)     stk     = (INT8U *)ptos;		// Wandlung von ptos in Bytezeiger
    04D7 80AE      LDD	R10,6+Y
    04D8 80BF      LDD	R11,7+Y
(0056) 	// AVR return stack ("hardware stack")
(0057)     stks    = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-32);
    04D9 818E      LDD	R24,6+Y
    04DA 819F      LDD	R25,7+Y
    04DB 5484      SUBI	R24,0x44
    04DC 4090      SBCI	R25,0
(0058) 
(0059) 	// the function address has an extra level of indirection. Fetch the
(0060)     // actual address.
(0061)     //    
(0062)     tmp = *(INT16U const *)task;
    04DD 01F8      MOVW	R30,R16
    04DE 90C5      LPM	R12,Z+
    04DF 90D4      LPM	R13,0(Z)
(0063)    
(0064) 	// 36 Bytes
(0065)     *stks-- = (INT8U)tmp;	//Put task start address on top of hardware stack
    04E0 011C      MOVW	R2,R24
    04E1 9701      SBIW	R24,1
    04E2 01F1      MOVW	R30,R2
    04E3 82C0      STD	R12,0+Z
(0066)     *stks-- = (INT8U)(tmp >> 8);
    04E4 011C      MOVW	R2,R24
    04E5 9701      SBIW	R24,1
    04E6 017C      MOVW	R14,R24
    04E7 0126      MOVW	R4,R12
    04E8 2C45      MOV	R4,R5
    04E9 2455      CLR	R5
    04EA 01F1      MOVW	R30,R2
    04EB 8240      STD	R4,0+Z
(0067) 
(0068)     *stk-- = (INT8U)0x00;		// R0  = 0x00
    04EC 0115      MOVW	R2,R10
    04ED 01C1      MOVW	R24,R2
    04EE 9701      SBIW	R24,1
    04EF 2444      CLR	R4
    04F0 01F1      MOVW	R30,R2
    04F1 8240      STD	R4,0+Z
(0069)     *stk-- = (INT8U)0x01; 
    04F2 011C      MOVW	R2,R24
    04F3 9701      SBIW	R24,1
    04F4 015C      MOVW	R10,R24
    04F5 E081      LDI	R24,1
    04F6 01F1      MOVW	R30,R2
    04F7 8380      STD	R24,0+Z
(0070)     *stk-- = (INT8U)0x02;
    04F8 0115      MOVW	R2,R10
    04F9 01C1      MOVW	R24,R2
    04FA 9701      SBIW	R24,1
    04FB 015C      MOVW	R10,R24
    04FC E082      LDI	R24,2
    04FD 01F1      MOVW	R30,R2
    04FE 8380      STD	R24,0+Z
(0071)     *stk-- = (INT8U)0x03;
    04FF 0115      MOVW	R2,R10
    0500 01C1      MOVW	R24,R2
    0501 9701      SBIW	R24,1
    0502 015C      MOVW	R10,R24
    0503 E083      LDI	R24,3
    0504 01F1      MOVW	R30,R2
    0505 8380      STD	R24,0+Z
(0072)     *stk-- = (INT8U)0x04;
    0506 0115      MOVW	R2,R10
    0507 01C1      MOVW	R24,R2
    0508 9701      SBIW	R24,1
    0509 015C      MOVW	R10,R24
    050A E084      LDI	R24,4
    050B 01F1      MOVW	R30,R2
    050C 8380      STD	R24,0+Z
(0073)     *stk-- = (INT8U)0x05;
    050D 0115      MOVW	R2,R10
    050E 01C1      MOVW	R24,R2
    050F 9701      SBIW	R24,1
    0510 015C      MOVW	R10,R24
    0511 E085      LDI	R24,5
    0512 01F1      MOVW	R30,R2
    0513 8380      STD	R24,0+Z
(0074)     *stk-- = (INT8U)0x06;
    0514 0115      MOVW	R2,R10
    0515 01C1      MOVW	R24,R2
    0516 9701      SBIW	R24,1
    0517 015C      MOVW	R10,R24
    0518 E086      LDI	R24,6
    0519 01F1      MOVW	R30,R2
    051A 8380      STD	R24,0+Z
(0075)     *stk-- = (INT8U)0x07;
    051B 0115      MOVW	R2,R10
    051C 01C1      MOVW	R24,R2
    051D 9701      SBIW	R24,1
    051E 015C      MOVW	R10,R24
    051F E087      LDI	R24,7
    0520 01F1      MOVW	R30,R2
    0521 8380      STD	R24,0+Z
(0076)     *stk-- = (INT8U)0x08;
    0522 0115      MOVW	R2,R10
    0523 01C1      MOVW	R24,R2
    0524 9701      SBIW	R24,1
    0525 015C      MOVW	R10,R24
    0526 E088      LDI	R24,0x8
    0527 01F1      MOVW	R30,R2
    0528 8380      STD	R24,0+Z
(0077)     *stk-- = (INT8U)0x09;
    0529 0115      MOVW	R2,R10
    052A 01C1      MOVW	R24,R2
    052B 9701      SBIW	R24,1
    052C 015C      MOVW	R10,R24
    052D E089      LDI	R24,0x9
    052E 01F1      MOVW	R30,R2
    052F 8380      STD	R24,0+Z
(0078)     *stk-- = (INT8U)0x10;
    0530 0115      MOVW	R2,R10
    0531 01C1      MOVW	R24,R2
    0532 9701      SBIW	R24,1
    0533 015C      MOVW	R10,R24
    0534 E180      LDI	R24,0x10
    0535 01F1      MOVW	R30,R2
    0536 8380      STD	R24,0+Z
(0079)     *stk-- = (INT8U)0x11;
    0537 0115      MOVW	R2,R10
    0538 01C1      MOVW	R24,R2
    0539 9701      SBIW	R24,1
    053A 015C      MOVW	R10,R24
    053B E181      LDI	R24,0x11
    053C 01F1      MOVW	R30,R2
    053D 8380      STD	R24,0+Z
(0080)     *stk-- = (INT8U)0x12;
    053E 0115      MOVW	R2,R10
    053F 01C1      MOVW	R24,R2
    0540 9701      SBIW	R24,1
    0541 015C      MOVW	R10,R24
    0542 E182      LDI	R24,0x12
    0543 01F1      MOVW	R30,R2
    0544 8380      STD	R24,0+Z
(0081)     *stk-- = (INT8U)0x13;
    0545 0115      MOVW	R2,R10
    0546 01C1      MOVW	R24,R2
    0547 9701      SBIW	R24,1
    0548 015C      MOVW	R10,R24
    0549 E183      LDI	R24,0x13
    054A 01F1      MOVW	R30,R2
    054B 8380      STD	R24,0+Z
(0082)     *stk-- = (INT8U)0x14;
    054C 0115      MOVW	R2,R10
    054D 01C1      MOVW	R24,R2
    054E 9701      SBIW	R24,1
    054F 015C      MOVW	R10,R24
    0550 E184      LDI	R24,0x14
    0551 01F1      MOVW	R30,R2
    0552 8380      STD	R24,0+Z
(0083)     *stk-- = (INT8U)0x15;
    0553 0115      MOVW	R2,R10
    0554 01C1      MOVW	R24,R2
    0555 9701      SBIW	R24,1
    0556 015C      MOVW	R10,R24
    0557 E185      LDI	R24,0x15
    0558 01F1      MOVW	R30,R2
    0559 8380      STD	R24,0+Z
(0084)     tmp    = (INT16U)pdata;
    055A 0169      MOVW	R12,R18
(0085)     *stk-- = (INT8U)tmp;	//Simulate call to function wit

⌨️ 快捷键说明

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