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

📄 ucos_ii.lis

📁 移植ucos2.76到mega128中软件仿真成功。 需要在iccavr7.13中编译
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0242           ; #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
 0242           ;     OS_CPU_SR  cpu_sr;
 0242           ; #endif    
 0242           ;     
 0242           ;     
 0242           ;     OSTimeDly(2);                                /* Synchronize with clock tick                        */
 0242           ;     OS_ENTER_CRITICAL();
 0242           ;     OSIdleCtr    = 0L;                           /* Clear idle counter                                 */
 0242           ;     OS_EXIT_CRITICAL();
 0242           ;     OSTimeDly(OS_TICKS_PER_SEC / 10);            /* Determine MAX. idle counter value for 1/10 second  */
 0242           ;     OS_ENTER_CRITICAL();
 0242           ;     OSIdleCtrMax = OSIdleCtr;                    /* Store maximum idle counter count in 1/10 second    */
 0242           ;     OSStatRdy    = TRUE;
 0242           ;     OS_EXIT_CRITICAL();
 0242           ; }
 0242           ; #endif
 0242           ; /*$PAGE*/
 0242           ; /*
 0242           ; *********************************************************************************************************
 0242           ; *                                         PROCESS SYSTEM TICK
 0242           ; *
 0242           ; * Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also known
 0242           ; *              as a 'clock tick').  This function should be called by the ticker ISR but, can also be
 0242           ; *              called by a high priority task.
 0242           ; *
 0242           ; * Arguments  : none
 0242           ; *
 0242           ; * Returns    : none
 0242           ; *********************************************************************************************************
 0242           ; */
 0242           ; 
 0242           ; void  OSTimeTick (void)
 0242           ; {
 0242                   .dbline 533
 0242           ; #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register     */
 0242           ;     OS_CPU_SR  cpu_sr;
 0242           ; #endif    
 0242           ;     OS_TCB    *ptcb;
 0242           ;     BOOLEAN    step;
 0242           ; 
 0242           ; 
 0242           ; #if OS_TIME_TICK_HOOK_EN > 0
 0242           ;     OSTimeTickHook();                                      /* Call user definable hook                     */
 0242 0E940000          xcall _OSTimeTickHook
 0246                   .dbline 540
 0246           ; #endif    
 0246           ; #if OS_TIME_GET_SET_EN > 0   
 0246           ;     OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter               */
 0246           ;     OSTime++;
 0246           ;     OS_EXIT_CRITICAL();
 0246           ; #endif
 0246           ;     if (OSRunning == TRUE) {    
 0246 80913D0A          lds R24,_OSRunning
 024A 8130              cpi R24,1
 024C 09F0              breq X25
 024E 46C0              xjmp L36
 0250           X25:
 0250           X19:
 0250                   .dbline 540
 0250                   .dbline 562
 0250           ; #if OS_TICK_STEP_EN > 0
 0250           ;         switch (OSTickStepState) {                         /* Determine whether we need to process a tick  */
 0250           ;             case OS_TICK_STEP_DIS:                         /* Yes, stepping is disabled                    */
 0250           ;                  step = TRUE;
 0250           ;                  break;
 0250           ;         
 0250           ;             case OS_TICK_STEP_WAIT:                        /* No,  waiting for uC/OS-View to set ...       */
 0250           ;                  step = FALSE;                             /*      .. OSTickStepState to OS_TICK_STEP_ONCE */
 0250           ;                  break;
 0250           ; 
 0250           ;             case OS_TICK_STEP_ONCE:                        /* Yes, process tick once and wait for next ... */
 0250           ;                  step            = TRUE;                   /*      ... step command from uC/OS-View        */
 0250           ;                  OSTickStepState = OS_TICK_STEP_WAIT;
 0250           ;                  break;  
 0250           ; 
 0250           ;             default:                                       /* Invalid case, correct situation              */
 0250           ;                  step            = TRUE;
 0250           ;                  OSTickStepState = OS_TICK_STEP_DIS;
 0250           ;                  break;
 0250           ;         }
 0250           ; #else
 0250           ;         step = TRUE;
 0250 41E0              ldi R20,1
 0252                   .dbline 564
 0252           ; #endif
 0252           ;         if (step == TRUE) {
 0252 4130              cpi R20,1
 0254 09F0              breq X26
 0256 42C0              xjmp L38
 0258           X26:
 0258           X20:
 0258                   .dbline 564
 0258                   .dbline 565
 0258           ;             ptcb = OSTCBList;                              /* Point at first TCB in TCB list               */
 0258 40913009          lds R20,_OSTCBList
 025C 50913109          lds R21,_OSTCBList+1
 0260 38C0              xjmp L41
 0262           L40:
 0262                   .dbline 566
 0262           ;             while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {      /* Go through all TCBs in TCB list              */
 0262                   .dbline 567
 0262           ;                 OS_ENTER_CRITICAL();
 0262 0E940000          xcall _OS_CPU_SR_Save
 0266 A02E              mov R10,R16
 0268                   .dbline 568
 0268           ;                 if (ptcb->OSTCBDly != 0) {                 /* Delayed or waiting for event with TO         */
 0268 FA01              movw R30,R20
 026A 2084              ldd R2,z+8
 026C 3184              ldd R3,z+9
 026E 2220              tst R2
 0270 19F4              brne X21
 0272 3320              tst R3
 0274 09F4              brne X27
 0276 27C0              xjmp L43
 0278           X27:
 0278           X21:
 0278                   .dbline 568
 0278                   .dbline 569
 0278           ;                     if (--ptcb->OSTCBDly == 0) {           /* Decrement nbr of ticks to end of delay       */
 0278 CF01              movw R24,R30
 027A 0896              adiw R24,8
 027C FC01              movw R30,R24
 027E 6081              ldd R22,z+0
 0280 7181              ldd R23,z+1
 0282 6150              subi R22,1
 0284 7040              sbci R23,0
 0286 7183              std z+1,R23
 0288 6083              std z+0,R22
 028A 6030              cpi R22,0
 028C 6707              cpc R22,R23
 028E D9F4              brne L45
 0290           X22:
 0290                   .dbline 569
 0290                   .dbline 570
 0290           ;                         if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended?    */
 0290 FA01              movw R30,R20
 0292 2284              ldd R2,z+10
 0294 23FC              sbrc R2,3
 0296 12C0              rjmp L47
 0298           X23:
 0298                   .dbline 570
 0298                   .dbline 571
 0298           ;                             OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task R-to-R (timed out)*/
 0298 2784              ldd R2,z+15
 029A 3090460A          lds R3,_OSRdyGrp
 029E 3228              or R3,R2
 02A0 3092460A          sts _OSRdyGrp,R3
 02A4                   .dbline 572
 02A4           ;                             OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
 02A4 80E0              ldi R24,<_OSRdyTbl
 02A6 90E0              ldi R25,>_OSRdyTbl
 02A8 C584              ldd R12,z+13
 02AA DD24              clr R13
 02AC C80E              add R12,R24
 02AE D91E              adc R13,R25
 02B0 2684              ldd R2,z+14
 02B2 F601              movw R30,R12
 02B4 3080              ldd R3,z+0
 02B6 3228              or R3,R2
 02B8 3082              std z+0,R3
 02BA                   .dbline 573
 02BA           ;                         } else {                           /* Yes, Leave 1 tick to prevent loosing the ... */
 02BA 05C0              xjmp L48
 02BC           L47:
 02BC                   .dbline 573
 02BC                   .dbline 574
 02BC           ;                             ptcb->OSTCBDly = 1;            /* ... task when the suspension is removed.     */
 02BC 81E0              ldi R24,1
 02BE 90E0              ldi R25,0
 02C0 FA01              movw R30,R20
 02C2 9187              std z+9,R25
 02C4 8087              std z+8,R24
 02C6                   .dbline 575
 02C6           ;                         }
 02C6           L48:
 02C6                   .dbline 576
 02C6           ;                     }
 02C6           L45:
 02C6                   .dbline 577
 02C6           ;                 }
 02C6           L43:
 02C6                   .dbline 578
 02C6           ;                 ptcb = ptcb->OSTCBNext;                    /* Point at next TCB in TCB list                */
 02C6 FA01              movw R30,R20
 02C8 4281              ldd R20,z+2
 02CA 5381              ldd R21,z+3
 02CC                   .dbline 579
 02CC           ;                 OS_EXIT_CRITICAL();
 02CC 0A2D              mov R16,R10
 02CE 0E940000          xcall _OS_CPU_SR_Restore
 02D2                   .dbline 580
 02D2           ;             }
 02D2           L41:
 02D2                   .dbline 566
 02D2 FA01              movw R30,R20
 02D4 8385              ldd R24,z+11
 02D6 8F33              cpi R24,63
 02D8 09F0              breq X28
 02DA C3CF              xjmp L40
 02DC           X28:
 02DC           X24:
 02DC                   .dbline 581
 02DC           ;         }
 02DC           L38:
 02DC                   .dbline 582
 02DC           ;     }
 02DC           L36:
 02DC                   .dbline -2
 02DC           L35:
 02DC                   .dbline 0 ; func end
 02DC 0C940000          xjmp pop_xgsetF03C
 02E0                   .dbsym r step 20 c
 02E0                   .dbsym r cpu_sr 10 c
 02E0                   .dbsym r ptcb 20 pS[os_tcb]
 02E0                   .dbend
 02E0                   .dbfunc e OSVersion _OSVersion fi
                        .even
 02E0           _OSVersion::
 02E0                   .dbline -1
 02E0                   .dbline 600
 02E0           ; }
 02E0           ; /*$PAGE*/
 02E0           ; /*
 02E0           ; *********************************************************************************************************
 02E0           ; *                                             GET VERSION
 02E0           ; *
 02E0           ; * Description: This function is used to return the version number of uC/OS-II.  The returned value
 02E0           ; *              corresponds to uC/OS-II's version number multiplied by 100.  In other words, version 2.00
 02E0           ; *              would be returned as 200.
 02E0           ; *
 02E0           ; * Arguments  : none
 02E0           ; *
 02E0           ; * Returns    : the version number of uC/OS-II multiplied by 100.
 02E0           ; *********************************************************************************************************
 02E0           ; */
 02E0           ; 
 02E0           ; INT16U  OSVersion (void)
 02E0           ; {
 02E0                   .dbline 601
 02E0           ;     return (OS_VERSION);
 02E0 0EE0              ldi R16,270
 02E2 11E0              ldi R17,1
 02E4                   .dbline -2
 02E4           L49:
 02E4                   .dbline 0 ; func end
 02E4 0895              ret
 02E6                   .dbend
 02E6                   .dbfunc e OS_EventTaskRdy _OS_EventTaskRdy fc
 02E6           ;           bity -> R20
 02E6           ;           bitx -> R14
 02E6           ;           prio -> R10
 02E6           ;              x -> R10
 02E6           ;           ptcb -> R22,R23
 02E6           ;              y -> y+0
 02E6           ;            msk -> y+13
 02E6           ;            msg -> <dead>
 02E6           ;         pevent -> R16,R17
                        .even
 02E6           _OS_EventTaskRdy::
 02E6 3A93              st -y,r19
 02E8 2A93              st -y,r18
 02EA 0E940000          xcall push_xgsetF0FC
 02EE 2197              sbiw R28,1
 02F0                   .dbline -1
 02F0                   .dbline 647
 02F0           ; }
 02F0           ; 
 02F0           ; /*$PAGE*/
 02F0           ; /*
 02F0           ; *******************************************************

⌨️ 快捷键说明

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