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

📄 ucos.lst

📁 使用mega8和iccavr编译器的一段ucos操作系统程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    048D 9508      RET
(0337)     }
(0338) }
(0339) /*$PAGE*/
(0340) /*
(0341) *********************************************************************************************************
(0342) *                                         PROCESS SYSTEM TICK
(0343) *
(0344) * Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also known
(0345) *              as a 'clock tick').  This function should be called by the ticker ISR but, can also be
(0346) *              called by a high priority task.
(0347) *
(0348) * Arguments  : none
(0349) *
(0350) * Returns    : none
(0351) *********************************************************************************************************
(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
    048E 91000225  LDS	R16,OSTCBList
    0490 91100226  LDS	R17,OSTCBList+1
    0492 C03F      RJMP	0x04D2
(0359)     while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {              /* Go through all TCBs in TCB list          */
(0360)         OS_ENTER_CRITICAL();
    0493 930A      ST	R16,-Y
    0494 B70F      IN	R16,0x3F
    0495 94F8      BCLR	7
    0496 930F      PUSH	R16
    0497 9109      LD	R16,Y+
(0361)         if (ptcb->OSTCBDly != 0) {                         /* Delayed or waiting for event with TO     */
    0498 01F8      MOVW	R30,R16
    0499 8026      LDD	R2,Z+6
    049A 8037      LDD	R3,Z+7
    049B 2022      TST	R2
    049C F419      BNE	0x04A0
    049D 2033      TST	R3
    049E F409      BNE	0x04A0
    049F C02B      RJMP	0x04CB
(0362)             if (--ptcb->OSTCBDly == 0) {                   /* Decrement nbr of ticks to end of delay   */
    04A0 01C8      MOVW	R24,R16
    04A1 9606      ADIW	R24,6
    04A2 01FC      MOVW	R30,R24
    04A3 8180      LDD	R24,Z+0
    04A4 8191      LDD	R25,Z+1
    04A5 9701      SBIW	R24,1
    04A6 012C      MOVW	R4,R24
    04A7 8251      STD	Z+1,R5
    04A8 8240      STD	Z+0,R4
    04A9 3080      CPI	R24,0
    04AA 0789      CPC	R24,R25
    04AB F009      BEQ	0x04AD
    04AC C01E      RJMP	0x04CB
(0363)                 if (!(ptcb->OSTCBStat & OS_STAT_SUSPEND)) {    /* Is task suspended?                   */
    04AD 01F8      MOVW	R30,R16
    04AE 8420      LDD	R2,Z+8
    04AF FC23      SBRC	R2,3
    04B0 C015      RJMP	0x04C6
(0364)                     OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task Rdy to Run (timed out)*/
    04B1 01F8      MOVW	R30,R16
    04B2 8425      LDD	R2,Z+13
    04B3 90300231  LDS	R3,OSRdyGrp
    04B5 2832      OR	R3,R2
    04B6 92300231  STS	OSRdyGrp,R3
(0365)                     OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
    04B8 E28F      LDI	R24,0x2F
    04B9 E092      LDI	R25,2
    04BA 01F8      MOVW	R30,R16
    04BB 8423      LDD	R2,Z+11
    04BC 2433      CLR	R3
    04BD 0E28      ADD	R2,R24
    04BE 1E39      ADC	R3,R25
    04BF 01F8      MOVW	R30,R16
    04C0 8444      LDD	R4,Z+12
    04C1 01F1      MOVW	R30,R2
    04C2 8050      LDD	R5,Z+0
    04C3 2854      OR	R5,R4
    04C4 8250      STD	Z+0,R5
(0366)                 } else {                                       /* Yes, Leave 1 tick to prevent ...     */
    04C5 C005      RJMP	0x04CB
(0367)                     ptcb->OSTCBDly = 1;                        /* ... loosing the task when the ...    */
    04C6 E081      LDI	R24,1
    04C7 E090      LDI	R25,0
    04C8 01F8      MOVW	R30,R16
    04C9 8397      STD	Z+7,R25
    04CA 8386      STD	Z+6,R24
(0368)                 }                                              /* ... suspension is removed.           */
(0369)             }
(0370)         }
(0371)         ptcb = ptcb->OSTCBNext;                            /* Point at next TCB in TCB list            */
    04CB 01F8      MOVW	R30,R16
    04CC 8102      LDD	R16,Z+2
    04CD 8113      LDD	R17,Z+3
(0372)         OS_EXIT_CRITICAL();
    04CE 930A      ST	R16,-Y
    04CF 910F      POP	R16
    04D0 BF0F      OUT	0x3F,R16
    04D1 9109      LD	R16,Y+
    04D2 01F8      MOVW	R30,R16
    04D3 8581      LDD	R24,Z+9
    04D4 308F      CPI	R24,0xF
    04D5 F009      BEQ	0x04D7
    04D6 CFBC      RJMP	0x0493
(0373)     }
(0374)     OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter           */
    04D7 930A      ST	R16,-Y
    04D8 B70F      IN	R16,0x3F
    04D9 94F8      BCLR	7
    04DA 930F      PUSH	R16
    04DB 9109      LD	R16,Y+
(0375)     OSTime++;
    04DC E081      LDI	R24,1
    04DD E090      LDI	R25,0
    04DE E0A0      LDI	R26,0
    04DF E0B0      LDI	R27,0
    04E0 90400203  LDS	R4,OSTime+2
    04E2 90500204  LDS	R5,OSTime+3
    04E4 90200201  LDS	R2,OSTime
    04E6 90300202  LDS	R3,OSTime+1
    04E8 0E28      ADD	R2,R24
    04E9 1E39      ADC	R3,R25
    04EA 1E4A      ADC	R4,R26
    04EB 1E5B      ADC	R5,R27
    04EC 92300202  STS	OSTime+1,R3
    04EE 92200201  STS	OSTime,R2
    04F0 92500204  STS	OSTime+3,R5
    04F2 92400203  STS	OSTime+2,R4
(0376)     OS_EXIT_CRITICAL();
    04F4 930A      ST	R16,-Y
    04F5 910F      POP	R16
    04F6 BF0F      OUT	0x3F,R16
    04F7 9109      LD	R16,Y+
    04F8 9508      RET
_OSTaskStkInit:
  stks                 --> R14
  tmp                  --> R12
  stk                  --> R10
  opt                  --> Y+8
  ptos                 --> Y+6
  pdata                --> R18
  task                 --> R16
    04F9 D322      RCALL	push_gset5x
FILE: G:\IccPro\ucos_m8_icc\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
    04FA 80AE      LDD	R10,Y+6
    04FB 80BF      LDD	R11,Y+7
(0056) 	// AVR return stack ("hardware stack")
(0057)     stks    = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-32);
    04FC 01C5      MOVW	R24,R10
    04FD 5484      SUBI	R24,0x44
    04FE 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;
    04FF 01F8      MOVW	R30,R16
    0500 90C5      LPM	R12,Z+
    0501 90D4      LPM	R13,0(Z)
(0063)    
(0064) 	// 36 Bytes
(0065)     *stks-- = (INT8U)tmp;	//Put task start address on top of hardware stack
    0502 011C      MOVW	R2,R24
    0503 9701      SBIW	R24,1
    0504 01F1      MOVW	R30,R2
    0505 82C0      STD	Z+0,R12
(0066)     *stks-- = (INT8U)(tmp >> 8);
    0506 011C      MOVW	R2,R24
    0507 9701      SBIW	R24,1
    0508 017C      MOVW	R14,R24
    0509 0126      MOVW	R4,R12
    050A 2C45      MOV	R4,R5
    050B 2455      CLR	R5
    050C 01F1      MOVW	R30,R2
    050D 8240      STD	Z+0,R4
(0067) 
(0068)     *stk-- = (INT8U)0x00;		// R0  = 0x00
    050E 0115      MOVW	R2,R10
    050F 01C1      MOVW	R24,R2
    0510 9701      SBIW	R24,1
    0511 2444      CLR	R4
    0512 01F1      MOVW	R30,R2
    0513 8240      STD	Z+0,R4
(0069)     *stk-- = (INT8U)0x01; 
    0514 011C      MOVW	R2,R24
    0515 9701      SBIW	R24,1
    0516 015C      MOVW	R10,R24
    0517 E081      LDI	R24,1
    0518 01F1      MOVW	R30,R2
    0519 8380      STD	Z+0,R24
(0070)     *stk-- = (INT8U)0x02;
    051A 0115      MOVW	R2,R10
    051B 01C1      MOVW	R24,R2
    051C 9701      SBIW	R24,1
    051D 015C      MOVW	R10,R24
    051E E082      LDI	R24,2
    051F 01F1      MOVW	R30,R2
    0520 8380      STD	Z+0,R24
(0071)     *stk-- = (INT8U)0x03;
    0521 0115      MOVW	R2,R10
    0522 01C1      MOVW	R24,R2
    0523 9701      SBIW	R24,1
    0524 015C      MOVW	R10,R24
    0525 E083      LDI	R24,3
    0526 01F1      MOVW	R30,R2
    0527 8380      STD	Z+0,R24
(0072)     *stk-- = (INT8U)0x04;
    0528 0115      MOVW	R2,R10
    0529 01C1      MOVW	R24,R2
    052A 9701      SBIW	R24,1
    052B 015C      MOVW	R10,R24
    052C E084      LDI	R24,4
    052D 01F1      MOVW	R30,R2
    052E 8380      STD	Z+0,R24
(0073)     *stk-- = (INT8U)0x05;
    052F 0115      MOVW	R2,R10
    0530 01C1      MOVW	R24,R2
    0531 9701      SBIW	R24,1
    0532 015C      MOVW	R10,R24
    0533 E085      LDI	R24,5
    0534 01F1      MOVW	R30,R2
    0535 8380      STD	Z+0,R24
(0074)     *stk-- = (INT8U)0x06;
    0536 0115      MOVW	R2,R10
    0537 01C1      MOVW	R24,R2
    0538 9701      SBIW	R24,1
    0539 015C      MOVW	R10,R24
    053A E086      LDI	R24,6
    053B 01F1      MOVW	R30,R2
    053C 8380      STD	Z+0,R24
(0075)     *stk-- = (INT8U)0x07;
    053D 0115      MOVW	R2,R10
    053E 01C1      MOVW	R24,R2
    053F 9701      SBIW	R24,1
    0540 015C      MOVW	R10,R24
    0541 E087      LDI	R24,7
    0542 01F1      MOVW	R30,R2
    0543 8380      STD	Z+0,R24
(0076)     *stk-- = (INT8U)0x08;
    0544 0115      MOVW	R2,R10
    0545 01C1      MOVW	R24,R2
    0546 9701      SBIW	R24,1
    0547 015C      MOVW	R10,R24
    0548 E088      LDI	R24,0x8
    0549 01F1      MOVW	R30,R2
    054A 8380      STD	Z+0,R24
(0077)     *stk-- = (INT8U)0x09;
    054B 0115      MOVW	R2,R10
    054C 01C1      MOVW	R24,R2
    054D 9701      SBIW	R24,1
    054E 015C      MOVW	R10,R24
    054F E089      LDI	R24,0x9
    0550 01F1      MOVW	R30,R2
    0551 8380      STD	Z+0,R24
(0078)     *stk-- = (INT8U)0x10;
    0552 0115      MOVW	R2,R10
    0553 01C1      MOVW	R24,R2
    0554 9701      SBIW	R24,1
    0555 015C      MOVW	R10,R24
    0556 E180      LDI	R24,0x10
    0557 01F1      MOVW	R30,R2
    0558 8380      STD	Z+0,R24
(0079)     *stk-- = (INT8U)0x11;
    0559 0115      MOVW	R2,R10
    055A 01C1      MOVW	R24,R2
    055B 9701      SBIW	R24,1
    055C 015C      MOVW	R10,R24
    055D E181      LDI	R24,0x11
    055E 01F1      MOVW	R30,R2
    055F 8380      STD	Z+0,R24
(0080)     *stk-- = (INT8U)0x12;
    0560 0115      MOVW	R2,R10
    0561 01C1      MOVW	R24,R2
    0562 9701      SBIW	R24,1
    0563 015C      MOVW	R10,R24
    0564 E182      LDI	R24,0x12
    0565 01F1      MOVW	R30,R2
    0566 8380      STD	Z+0,R24
(0081)     *stk-- = (INT8U)0x13;
    0567 0115      MOVW	R2,R10
    0568 01C1      MOVW	R24,R2
    0569 9701      SBIW	R24,1
    056A 015C      MOVW	R10,R24
    056B E183      LDI	R24,0x13
    056C 01F1      MOVW	R30,R2
    056D 8380      STD	Z+0,R2

⌨️ 快捷键说明

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