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

📄 os_core.lis

📁 把UCOSII移植到AVR MEGA8上的程序 应用程序为驱动1602显示器,虽说有些简单,但可测试UCOS的运行
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0322           ;     if (OSRunning == FALSE) {
 0322           ;         y             = OSUnMapTbl[OSRdyGrp];        /* Find highest priority's task priority number   */
 0322           ;         x             = OSUnMapTbl[OSRdyTbl[y]];
 0322           ;         OSPrioHighRdy = (INT8U)((y << 3) + x);
 0322           ;         OSPrioCur     = OSPrioHighRdy;
 0322           ;         OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
 0322           ;         OSTCBCur      = OSTCBHighRdy;
 0322           ;         OSStartHighRdy();                            /* Execute target specific code to start task     */
 0322           ;     }
 0322           ; }
 0322           ; /*$PAGE*/
 0322           ; /*
 0322           ; *********************************************************************************************************
 0322           ; *                                        STATISTICS INITIALIZATION
 0322           ; *
 0322           ; * Description: This function is called by your application to establish CPU usage by first determining
 0322           ; *              how high a 32-bit counter would count to in 1 second if no other tasks were to execute
 0322           ; *              during that time.  CPU usage is then determined by a low priority task which keeps track
 0322           ; *              of this 32-bit counter every second but this time, with other tasks running.  CPU usage is
 0322           ; *              determined by:
 0322           ; *
 0322           ; *                                             OSIdleCtr
 0322           ; *                 CPU Usage (%) = 100 * (1 - ------------)
 0322           ; *                                            OSIdleCtrMax
 0322           ; *
 0322           ; * Arguments  : none
 0322           ; *
 0322           ; * Returns    : none
 0322           ; *********************************************************************************************************
 0322           ; */
 0322           ; 
 0322           ; #if OS_TASK_STAT_EN > 0
 0322           ; void  OSStatInit (void)
 0322           ; {
 0322           ; #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
 0322           ;     OS_CPU_SR  cpu_sr;
 0322           ; #endif    
 0322           ;     
 0322           ;     
 0322           ;     OSTimeDly(2);                                /* Synchronize with clock tick                        */
 0322           ;     OS_ENTER_CRITICAL();
 0322           ;     OSIdleCtr    = 0L;                           /* Clear idle counter                                 */
 0322           ;     OS_EXIT_CRITICAL();
 0322           ;     OSTimeDly(OS_TICKS_PER_SEC);                 /* Determine MAX. idle counter value for 1 second     */
 0322           ;     OS_ENTER_CRITICAL();
 0322           ;     OSIdleCtrMax = OSIdleCtr;                    /* Store maximum idle counter count in 1 second       */
 0322           ;     OSStatRdy    = TRUE;
 0322           ;     OS_EXIT_CRITICAL();
 0322           ; }
 0322           ; #endif
 0322           ; /*$PAGE*/
 0322           ; /*
 0322           ; *********************************************************************************************************
 0322           ; *                                         PROCESS SYSTEM TICK
 0322           ; *
 0322           ; * Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also known
 0322           ; *              as a 'clock tick').  This function should be called by the ticker ISR but, can also be
 0322           ; *              called by a high priority task.
 0322           ; *
 0322           ; * Arguments  : none
 0322           ; *
 0322           ; * Returns    : none
 0322           ; *********************************************************************************************************
 0322           ; */
 0322           ; 
 0322           ; void  OSTimeTick (void)
 0322           ; {
 0322                   .dbline 491
 0322           ; #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
 0322           ;     OS_CPU_SR  cpu_sr;
 0322           ; #endif    
 0322           ;     OS_TCB    *ptcb;
 0322           ; 
 0322           ; 
 0322           ;     OSTimeTickHook();                                      /* Call user definable hook                 */
 0322 00D0              rcall _OSTimeTickHook
 0324                   .dbline 493
 0324           ; #if OS_TIME_GET_SET_EN > 0   
 0324           ;     OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter           */
 0324 00D0              rcall _OS_CPU_SR_Save
 0326 A02E              mov R10,R16
 0328                   .dbline 494
 0328           ;     OSTime++;
 0328 41E0              ldi R20,1
 032A 50E0              ldi R21,0
 032C 60E0              ldi R22,0
 032E 70E0              ldi R23,0
 0330 40900200          lds R4,_OSTime+2
 0334 50900300          lds R5,_OSTime+2+1
 0338 20900000          lds R2,_OSTime
 033C 30900100          lds R3,_OSTime+1
 0340 240E              add R2,R20
 0342 351E              adc R3,R21
 0344 461E              adc R4,R22
 0346 571E              adc R5,R23
 0348 30920100          sts _OSTime+1,R3
 034C 20920000          sts _OSTime,R2
 0350 50920300          sts _OSTime+2+1,R5
 0354 40920200          sts _OSTime+2,R4
 0358                   .dbline 495
 0358           ;     OS_EXIT_CRITICAL();
 0358 00D0              rcall _OS_CPU_SR_Restore
 035A                   .dbline 497
 035A           ; #endif    
 035A           ;     ptcb = OSTCBList;                                      /* Point at first TCB in TCB list           */
 035A C0908E00          lds R12,_OSTCBList
 035E D0908F00          lds R13,_OSTCBList+1
 0362 3AC0              rjmp L38
 0364           L37:
 0364                   .dbline 498
 0364           ;     while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {              /* Go through all TCBs in TCB list          */
 0364                   .dbline 499
 0364           ;         OS_ENTER_CRITICAL();
 0364 00D0              rcall _OS_CPU_SR_Save
 0366 A02E              mov R10,R16
 0368                   .dbline 500
 0368           ;         if (ptcb->OSTCBDly != 0) {                         /* Delayed or waiting for event with TO     */
 0368 F601              movw R30,R12
 036A 2084              ldd R2,z+8
 036C 3184              ldd R3,z+9
 036E 2220              tst R2
 0370 19F4              brne X3
 0372 3320              tst R3
 0374 09F4              brne X5
 0376 2BC0              rjmp L40
 0378           X5:
 0378           X3:
 0378                   .dbline 500
 0378                   .dbline 501
 0378           ;             if (--ptcb->OSTCBDly == 0) {                   /* Decrement nbr of ticks to end of delay   */
 0378 C601              movw R24,R12
 037A 0896              adiw R24,8
 037C FC01              movw R30,R24
 037E 8081              ldd R24,z+0
 0380 9181              ldd R25,z+1
 0382 0197              sbiw R24,1
 0384 2C01              movw R4,R24
 0386 5182              std z+1,R5
 0388 4082              std z+0,R4
 038A 8030              cpi R24,0
 038C 8907              cpc R24,R25
 038E 09F0              breq X6
 0390 1EC0              rjmp L42
 0392           X6:
 0392           X4:
 0392                   .dbline 501
 0392                   .dbline 502
 0392           ;                 if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == 0x00) {   /* Is task suspended?             */
 0392 F601              movw R30,R12
 0394 2284              ldd R2,z+10
 0396 23FC              sbrc R2,3
 0398 15C0              rjmp L44
 039A                   .dbline 502
 039A                   .dbline 503
 039A           ;                     OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task Rdy to Run (timed out)*/
 039A F601              movw R30,R12
 039C 2784              ldd R2,z+15
 039E 30901F01          lds R3,_OSRdyGrp
 03A2 3228              or R3,R2
 03A4 30921F01          sts _OSRdyGrp,R3
 03A8                   .dbline 504
 03A8           ;                     OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
 03A8 80E0              ldi R24,<_OSRdyTbl
 03AA 90E0              ldi R25,>_OSRdyTbl
 03AC F601              movw R30,R12
 03AE 2584              ldd R2,z+13
 03B0 3324              clr R3
 03B2 280E              add R2,R24
 03B4 391E              adc R3,R25
 03B6 F601              movw R30,R12
 03B8 4684              ldd R4,z+14
 03BA F101              movw R30,R2
 03BC 5080              ldd R5,z+0
 03BE 5428              or R5,R4
 03C0 5082              std z+0,R5
 03C2                   .dbline 505
 03C2 05C0              rjmp L45
 03C4           L44:
 03C4                   .dbline 505
 03C4           ;                 } else {                                       /* Yes, Leave 1 tick to prevent ...     */
 03C4                   .dbline 506
 03C4           ;                     ptcb->OSTCBDly = 1;                        /* ... loosing the task when the ...    */
 03C4 81E0              ldi R24,1
 03C6 90E0              ldi R25,0
 03C8 F601              movw R30,R12
 03CA 9187              std z+9,R25
 03CC 8087              std z+8,R24
 03CE                   .dbline 507
 03CE           ;                 }                                              /* ... suspension is removed.           */
 03CE           L45:
 03CE                   .dbline 508
 03CE           ;             }
 03CE           L42:
 03CE                   .dbline 509
 03CE           ;         }
 03CE           L40:
 03CE                   .dbline 510
 03CE F601              movw R30,R12
 03D0 C280              ldd R12,z+2
 03D2 D380              ldd R13,z+3
 03D4                   .dbline 511
 03D4 0A2D              mov R16,R10
 03D6 00D0              rcall _OS_CPU_SR_Restore
 03D8                   .dbline 512
 03D8           L38:
 03D8                   .dbline 498
 03D8 F601              movw R30,R12
 03DA 8385              ldd R24,z+11
 03DC 8431              cpi R24,20
 03DE 09F0              breq X7
 03E0 C1CF              rjmp L37
 03E2           X7:
 03E2                   .dbline -2
 03E2           L36:
 03E2 00D0              rcall pop_gset4
 03E4                   .dbline 0 ; func end
 03E4 0895              ret
 03E6                   .dbsym r cpu_sr 10 c
 03E6                   .dbsym r ptcb 12 pS[os_tcb]
 03E6                   .dbend
 03E6                   .dbfunc e OSVersion _OSVersion fi
                        .even
 03E6           _OSVersion::
 03E6                   .dbline -1
 03E6                   .dbline 530
 03E6           ;         ptcb = ptcb->OSTCBNext;                                /* Point at next TCB in TCB list        */
 03E6           ;         OS_EXIT_CRITICAL();
 03E6           ;     }
 03E6           ; }
 03E6           ; /*$PAGE*/
 03E6           ; /*
 03E6           ; *********************************************************************************************************
 03E6           ; *                                             GET VERSION
 03E6           ; *
 03E6           ; * Description: This function is used to return the version number of uC/OS-II.  The returned value
 03E6           ; *              corresponds to uC/OS-II's version number multiplied by 100.  In other words, version 2.00
 03E6           ; *              would be returned as 200.
 03E6           ; *
 03E6           ; * Arguments  : none
 03E6           ; *
 03E6           ; * Returns    : the version number of uC/OS-II multiplied by 100.
 03E6           ; *********************************************************************************************************
 03E6           ; */
 03E6           ; 
 03E6           ; INT16U  OSVersion (void)
 03E6           ; {
 03E6                   .dbline 531
 03E6           ;     return (OS_VERSION);
 03E6 0BEF              ldi R16,251
 03E8 10E0              ldi R17,0
 03EA                   .dbline -2
 03EA           L46:
 03EA                   .dbline 0 ; func end
 03EA 0895              ret
 03EC                   .dbend
 03EC                   .dbfunc e OS_EventTaskRdy _OS_EventTaskRdy fc
 03EC           ;           bity -> R12
 03EC           ;           bitx -> R22
 03EC           ;           prio -> R20
 03EC           ;              x -> R20
 03EC           ;           ptcb -> R14,R15
 03EC           ;              y -> R10
 03EC           ;            msk -> y+10
 03EC           ;            msg -> R18,R19
 03EC           ;         pevent -> R16,R17
                        .even
 03EC           _OS_EventTaskRdy::
 03EC 00D0              rcall push_gset5
 03EE                   .dbline -1
 03EE                   .dbline 577
 03EE           ; }
 03EE           ; 
 03EE           ; /*$PAGE*/

⌨️ 快捷键说明

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