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

📄 test.lst

📁 移植ucos2.76到mega128中软件仿真成功。 需要在iccavr7.13中编译
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0417)                     OS_Sched();                                /* See if a HPT is ready                */
     1BE D288      RCALL	_OS_Sched
(0418)                 } else {
     1BF C00B      RJMP	0x01CB
(0419)                     OS_EXIT_CRITICAL();
     1C0 2D0A      MOV	R16,R10
     1C1 940E 0BBA CALL	_OS_CPU_SR_Restore
(0420)                 }
(0421)             } else {
     1C3 C007      RJMP	0x01CB
(0422)                 OS_EXIT_CRITICAL();
     1C4 2D0A      MOV	R16,R10
     1C5 940E 0BBA CALL	_OS_CPU_SR_Restore
(0423)             }
(0424)         } else {
     1C7 C003      RJMP	0x01CB
(0425)             OS_EXIT_CRITICAL();
     1C8 2D0A      MOV	R16,R10
     1C9 940E 0BBA CALL	_OS_CPU_SR_Restore
(0426)         }
(0427)     }
     1CB 90A9      LD	R10,Y+
     1CC 9508      RET
_OSStart:
  x                    --> R12
  y                    --> R10
     1CD 92AA      ST	R10,-Y
     1CE 92CA      ST	R12,-Y
(0428) }
(0429) #endif    
(0430) 
(0431) /*$PAGE*/
(0432) /*
(0433) *********************************************************************************************************
(0434) *                                          START MULTITASKING
(0435) *
(0436) * Description: This function is used to start the multitasking process which lets uC/OS-II manages the
(0437) *              task that you have created.  Before you can call OSStart(), you MUST have called OSInit()
(0438) *              and you MUST have created at least one task.
(0439) *
(0440) * Arguments  : none
(0441) *
(0442) * Returns    : none
(0443) *
(0444) * Note       : OSStartHighRdy() MUST:
(0445) *                 a) Call OSTaskSwHook() then,
(0446) *                 b) Set OSRunning to TRUE.
(0447) *                 c) Load the context of the task pointed to by OSTCBHighRdy.
(0448) *                 d_ Execute the task.
(0449) *********************************************************************************************************
(0450) */
(0451) 
(0452) void  OSStart (void)
(0453) {
(0454)     INT8U y;
(0455)     INT8U x;
(0456) 
(0457) 
(0458)     if (OSRunning == FALSE) {
     1CF 9020 0B3D LDS	R2,OSRunning
     1D1 2022      TST	R2
     1D2 F009      BEQ	0x01D4
     1D3 C03A      RJMP	0x020E
(0459)         y             = OSUnMapTbl[OSRdyGrp];        /* Find highest priority's task priority number   */
     1D4 E98C      LDI	R24,0x9C
     1D5 E090      LDI	R25,0
     1D6 91E0 0B46 LDS	R30,OSRdyGrp
     1D8 27FF      CLR	R31
     1D9 0FE8      ADD	R30,R24
     1DA 1FF9      ADC	R31,R25
     1DB 90A6      ELPM	R10,2886(Z)
(0460)         x             = OSUnMapTbl[OSRdyTbl[y]];
     1DC E38E      LDI	R24,0x3E
     1DD E09B      LDI	R25,0xB
     1DE 2DEA      MOV	R30,R10
     1DF 27FF      CLR	R31
     1E0 0FE8      ADD	R30,R24
     1E1 1FF9      ADC	R31,R25
     1E2 81E0      LDD	R30,Z+0
     1E3 27FF      CLR	R31
     1E4 E98C      LDI	R24,0x9C
     1E5 E090      LDI	R25,0
     1E6 0FE8      ADD	R30,R24
     1E7 1FF9      ADC	R31,R25
     1E8 90C6      ELPM	R12,0(Z)
(0461)         OSPrioHighRdy = (INT8U)((y << 3) + x);
     1E9 2C2C      MOV	R2,R12
     1EA 2433      CLR	R3
     1EB 2C4A      MOV	R4,R10
     1EC 2455      CLR	R5
     1ED 0C44      LSL	R4
     1EE 1C55      ROL	R5
     1EF 0C44      LSL	R4
     1F0 1C55      ROL	R5
     1F1 0C44      LSL	R4
     1F2 1C55      ROL	R5
     1F3 0C42      ADD	R4,R2
     1F4 1C53      ADC	R5,R3
     1F5 9240 0B47 STS	OSPrioHighRdy,R4
(0462)         OSPrioCur     = OSPrioHighRdy;
     1F7 2C24      MOV	R2,R4
     1F8 9220 0B48 STS	OSPrioCur,R2
(0463)         OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
     1FA EB80      LDI	R24,0xB0
     1FB E099      LDI	R25,0x9
     1FC 2DE4      MOV	R30,R4
     1FD 27FF      CLR	R31
     1FE 0FEE      LSL	R30
     1FF 1FFF      ROL	R31
     200 0FE8      ADD	R30,R24
     201 1FF9      ADC	R31,R25
     202 8020      LDD	R2,Z+0
     203 8031      LDD	R3,Z+1
     204 9230 0A33 STS	OSTCBHighRdy+1,R3
     206 9220 0A32 STS	OSTCBHighRdy,R2
(0464)         OSTCBCur      = OSTCBHighRdy;
     208 9230 0A37 STS	OSTCBCur+1,R3
     20A 9220 0A36 STS	OSTCBCur,R2
(0465)         OSStartHighRdy();                            /* Execute target specific code to start task     */
     20C 940E 0BBC CALL	_OSStartHighRdy
(0466)     }
     20E 90C9      LD	R12,Y+
     20F 90A9      LD	R10,Y+
     210 9508      RET
_OSTimeTick:
  step                 --> R20
  cpu_sr               --> R10
  ptcb                 --> R20
     211 940E 0FC8 CALL	push_xgsetF03C
(0467) }
(0468) /*$PAGE*/
(0469) /*
(0470) *********************************************************************************************************
(0471) *                                        STATISTICS INITIALIZATION
(0472) *
(0473) * Description: This function is called by your application to establish CPU usage by first determining
(0474) *              how high a 32-bit counter would count to in 1 second if no other tasks were to execute
(0475) *              during that time.  CPU usage is then determined by a low priority task which keeps track
(0476) *              of this 32-bit counter every second but this time, with other tasks running.  CPU usage is
(0477) *              determined by:
(0478) *
(0479) *                                             OSIdleCtr
(0480) *                 CPU Usage (%) = 100 * (1 - ------------)
(0481) *                                            OSIdleCtrMax
(0482) *
(0483) * Arguments  : none
(0484) *
(0485) * Returns    : none
(0486) *********************************************************************************************************
(0487) */
(0488) 
(0489) #if OS_TASK_STAT_EN > 0
(0490) void  OSStatInit (void)
(0491) {
(0492) #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
(0493)     OS_CPU_SR  cpu_sr;
(0494) #endif    
(0495)     
(0496)     
(0497)     OSTimeDly(2);                                /* Synchronize with clock tick                        */
(0498)     OS_ENTER_CRITICAL();
(0499)     OSIdleCtr    = 0L;                           /* Clear idle counter                                 */
(0500)     OS_EXIT_CRITICAL();
(0501)     OSTimeDly(OS_TICKS_PER_SEC / 10);            /* Determine MAX. idle counter value for 1/10 second  */
(0502)     OS_ENTER_CRITICAL();
(0503)     OSIdleCtrMax = OSIdleCtr;                    /* Store maximum idle counter count in 1/10 second    */
(0504)     OSStatRdy    = TRUE;
(0505)     OS_EXIT_CRITICAL();
(0506) }
(0507) #endif
(0508) /*$PAGE*/
(0509) /*
(0510) *********************************************************************************************************
(0511) *                                         PROCESS SYSTEM TICK
(0512) *
(0513) * Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also known
(0514) *              as a 'clock tick').  This function should be called by the ticker ISR but, can also be
(0515) *              called by a high priority task.
(0516) *
(0517) * Arguments  : none
(0518) *
(0519) * Returns    : none
(0520) *********************************************************************************************************
(0521) */
(0522) 
(0523) void  OSTimeTick (void)
(0524) {
(0525) #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register     */
(0526)     OS_CPU_SR  cpu_sr;
(0527) #endif    
(0528)     OS_TCB    *ptcb;
(0529)     BOOLEAN    step;
(0530) 
(0531) 
(0532) #if OS_TIME_TICK_HOOK_EN > 0
(0533)     OSTimeTickHook();                                      /* Call user definable hook                     */
     213 940E 0DE3 CALL	_OSTimeTickHook
(0534) #endif    
(0535) #if OS_TIME_GET_SET_EN > 0   
(0536)     OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter               */
(0537)     OSTime++;
(0538)     OS_EXIT_CRITICAL();
(0539) #endif
(0540)     if (OSRunning == TRUE) {    
     215 9180 0B3D LDS	R24,OSRunning
     217 3081      CPI	R24,1
     218 F009      BEQ	0x021A
     219 C046      RJMP	0x0260
(0541) #if OS_TICK_STEP_EN > 0
(0542)         switch (OSTickStepState) {                         /* Determine whether we need to process a tick  */
(0543)             case OS_TICK_STEP_DIS:                         /* Yes, stepping is disabled                    */
(0544)                  step = TRUE;
(0545)                  break;
(0546)         
(0547)             case OS_TICK_STEP_WAIT:                        /* No,  waiting for uC/OS-View to set ...       */
(0548)                  step = FALSE;                             /*      .. OSTickStepState to OS_TICK_STEP_ONCE */
(0549)                  break;
(0550) 
(0551)             case OS_TICK_STEP_ONCE:                        /* Yes, process tick once and wait for next ... */
(0552)                  step            = TRUE;                   /*      ... step command from uC/OS-View        */
(0553)                  OSTickStepState = OS_TICK_STEP_WAIT;
(0554)                  break;  
(0555) 
(0556)             default:                                       /* Invalid case, correct situation              */
(0557)                  step            = TRUE;
(0558)                  OSTickStepState = OS_TICK_STEP_DIS;
(0559)                  break;
(0560)         }
(0561) #else
(0562)         step = TRUE;
     21A E041      LDI	R20,1
(0563) #endif
(0564)         if (step == TRUE) {
     21B 3041      CPI	R20,1
     21C F009      BEQ	0x021E
     21D C042      RJMP	0x0260
(0565)             ptcb = OSTCBList;                              /* Point at first TCB in TCB list               */
     21E 9140 0A30 LDS	R20,OSTCBList
     220 9150 0A31 LDS	R21,OSTCBList+1
     222 C038      RJMP	0x025B
(0566)             while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {      /* Go through all TCBs in TCB list              */
(0567)                 OS_ENTER_CRITICAL();
     223 940E 0BB7 CALL	_OS_CPU_SR_Save
     225 2EA0      MOV	R10,R16
(0568)                 if (ptcb->OSTCBDly != 0) {                 /* Delayed or waiting for event with TO         */
     226 01FA      MOVW	R30,R20
     227 8420      LDD	R2,Z+8
     228 8431      LDD	R3,Z+9
     229 2022      TST	R2
     22A F419      BNE	0x022E
     22B 2033      TST	R3
     22C F409      BNE	0x022E
     22D C027      RJMP	0x0255
(0569)                     if (--ptcb->OSTCBDly == 0) {           /* Decrement nbr of ticks to end of delay       */
     22E 01CF      MOVW	R24,R30
     22F 9608      ADIW	R24,0x8
     230 01FC      MOVW	R30,R24
     231 8160      LDD	R22,Z+0
     232 8171      LDD	R23,Z+1
     233 5061      SUBI	R22,1
     234 4070      SBCI	R23,0
     235 8371      STD	Z+1,R23
     236 8360      STD	Z+0,R22
     237 3060      CPI	R22,0
     238 0767      CPC	R22,R23
     239 F4D9      BNE	0x0255
(0570)                         if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended?    */
     23A 01FA      MOVW	R30,R20
     23B 8422      LDD	R2,Z+10
     23C FC23      SBRC	R2,3
     23D C012      RJMP	0x0250
(0571)                             OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task R-to-R (timed out)*/
     23E 8427      LDD	R2,Z+15
     23F 9030 0B46 LDS	R3,OSRdyGrp
     241 2832      OR	R3,R2
     242 9230 0B46 STS	OSRdyGrp,R3
(0572)                             OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
     244 E38E      LDI	R24,0x3E
     245 E09B      LDI	R25,0xB
     246 84C5      LDD	R12,Z+13
     247 24DD      CLR	R13
     248 0EC8      ADD	R12,R24
     249 1ED9      ADC	R13,R25
     24A 8426      LDD	R2,Z+14
     24B 01F6      MOVW	R30,R12
     24C 8030      LDD	R3,Z+0
     24D 2832      OR	R3,R2
     24E 8230      STD	Z+0,R3
(0573)                         } else {                           /* Yes, Leave 1 tick to prevent loosing the ... */
     24F C005      RJMP	0x0255
(0574)                             ptcb->OSTCBDly = 1;            /* ... task when the suspension is removed.     */
     250 E081      LDI	R24,1
     251 E090      LDI	R25,0
     252 01FA      MOVW	R30,R20
     253 8791      STD	Z+9,R25
     254 8780      STD	Z+8,R24
(0575)                         }
(0576)                     }
(0577)                 }
(0578)                 ptcb = ptcb->OSTCBNext;                    /* Point at next TCB in TCB list                */
     255 01FA      MOVW	R30,R20
     256 8142      LDD	R20,Z+2
     257 8153      LDD	R21,Z+3
(0579)                 OS_EXIT_CRITICAL();
     258 2D0A      MOV	R16,R10
     259 940E 0BBA CALL	_OS_CPU_SR_Restore
     25B 01FA      MOVW	R30,R20
     25C 8583      LDD	R24,Z+11
     25D 338F      CPI	R24,0x3F
     25E F009      BEQ	0x0260
     25F CFC3      RJMP	0x0223
(0580)             }
(0581)         }

⌨️ 快捷键说明

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