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

📄 os_core.lis

📁 使用mega8和iccavr编译器的一段ucos操作系统程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 020E 4092EA00          sts _OSPrioHighRdy,R4
 0212                   .dbline 151
 0212           ;         if (OSPrioHighRdy != OSPrioCur) {        /* No context switch if current task is highest ready */
 0212 2090EB00          lds R2,_OSPrioCur
 0216 4214              cp R4,R2
 0218 39F1              breq L27
 021A                   .dbline 151
 021A                   .dbline 152
 021A           ;             OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];
 021A 242C              mov R2,R4
 021C 82E0              ldi R24,2
 021E 829D              mul R24,R2
 0220 F001              movw R30,R0
 0222 80E0              ldi R24,<_OSTCBPrioTbl
 0224 90E0              ldi R25,>_OSTCBPrioTbl
 0226 E80F              add R30,R24
 0228 F91F              adc R31,R25
 022A 2080              ldd R2,z+0
 022C 3180              ldd R3,z+1
 022E 3092E000          sts _OSTCBHighRdy+1,R3
 0232 2092DF00          sts _OSTCBHighRdy,R2
 0236                   .dbline 153
 0236           ;             OSCtxSwCtr++;                        /* Keep track of the number of context switches       */
 0236 81E0              ldi R24,1
 0238 90E0              ldi R25,0
 023A A0E0              ldi R26,0
 023C B0E0              ldi R27,0
 023E 40900601          lds R4,_OSCtxSwCtr+2
 0242 50900701          lds R5,_OSCtxSwCtr+2+1
 0246 20900401          lds R2,_OSCtxSwCtr
 024A 30900501          lds R3,_OSCtxSwCtr+1
 024E 280E              add R2,R24
 0250 391E              adc R3,R25
 0252 4A1E              adc R4,R26
 0254 5B1E              adc R5,R27
 0256 30920501          sts _OSCtxSwCtr+1,R3
 025A 20920401          sts _OSCtxSwCtr,R2
 025E 50920701          sts _OSCtxSwCtr+2+1,R5
 0262 40920601          sts _OSCtxSwCtr+2,R4
 0266                   .dbline 154
 0266           ;             OSIntCtxSw();                        /* Perform interrupt level context switch             */
 0266 00D0              rcall _OSIntCtxSw
 0268                   .dbline 155
 0268           ;         }
 0268           L27:
 0268                   .dbline 156
 0268           ;     }
 0268           L25:
 0268                   .dbline 157
 0268           ;     OS_EXIT_CRITICAL();
 0268 0A93              st -y,r16
 026A 0F91              pop r16
 026C 0FBF              out 0x3F,r16
 026E 0991              ld r16,y+
 0270                   .dbline 157
 0270                   .dbline -2
 0270           L24:
 0270                   .dbline 0 ; func end
 0270 0895              ret
 0272                   .dbend
 0272                   .dbfunc e OSSched _OSSched fV
 0272           ;              y -> R10
                        .even
 0272           _OSSched::
 0272 00D0              rcall push_gset3x
 0274                   .dbline -1
 0274                   .dbline 178
 0274           ; }
 0274           ; /*$PAGE*/
 0274           ; /*
 0274           ; *********************************************************************************************************
 0274           ; *                                              SCHEDULER
 0274           ; *
 0274           ; * Description: This function is called by other uC/OS-II services to determine whether a new, high
 0274           ; *              priority task has been made ready to run.  This function is invoked by TASK level code
 0274           ; *              and is not used to reschedule tasks from ISRs (see OSIntExit() for ISR rescheduling).
 0274           ; *
 0274           ; * Arguments  : none
 0274           ; *
 0274           ; * Returns    : none
 0274           ; *
 0274           ; * Notes      : 1) This function is INTERNAL to uC/OS-II and your application should not call it.
 0274           ; *              2) Rescheduling is prevented when the scheduler is locked (see OSSchedLock())
 0274           ; *********************************************************************************************************
 0274           ; */
 0274           ; 
 0274           ; void OSSched (void)
 0274           ; {
 0274                   .dbline 182
 0274           ;     INT8U y;
 0274           ; 
 0274           ; 
 0274           ;     OS_ENTER_CRITICAL();
 0274 0A93              st -y,r16
 0276 0FB7              in r16,0x3F
 0278 F894              cli
 027A 0F93              push r16
 027C 0991              ld r16,y+
 027E                   .dbline 182
 027E                   .dbline 183
 027E           ;     if ((OSLockNesting | OSIntNesting) == 0) {   /* Task scheduling must be enabled and not ISR level  */
 027E 2090ED00          lds R2,_OSIntNesting
 0282 3090EC00          lds R3,_OSLockNesting
 0286 3228              or R3,R2
 0288 09F0              breq X1
 028A 4DC0              rjmp L30
 028C           X1:
 028C                   .dbline 183
 028C                   .dbline 184
 028C           ;         y             = OSUnMapTbl[OSRdyGrp];    /* Get pointer to highest priority task ready to run  */
 028C 80E0              ldi R24,<_OSUnMapTbl
 028E 90E0              ldi R25,>_OSUnMapTbl
 0290 E091E900          lds R30,_OSRdyGrp
 0294 FF27              clr R31
 0296 E80F              add R30,R24
 0298 F91F              adc R31,R25
 029A A490              lpm R10,Z
 029C                   .dbline 185
 029C           ;         OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
 029C 80E0              ldi R24,<_OSRdyTbl
 029E 90E0              ldi R25,>_OSRdyTbl
 02A0 EA2D              mov R30,R10
 02A2 FF27              clr R31
 02A4 E80F              add R30,R24
 02A6 F91F              adc R31,R25
 02A8 E081              ldd R30,z+0
 02AA FF27              clr R31
 02AC 80E0              ldi R24,<_OSUnMapTbl
 02AE 90E0              ldi R25,>_OSUnMapTbl
 02B0 E80F              add R30,R24
 02B2 F91F              adc R31,R25
 02B4 2490              lpm R2,Z
 02B6 3324              clr R3
 02B8 4A2C              mov R4,R10
 02BA 5524              clr R5
 02BC 440C              lsl R4
 02BE 551C              rol R5
 02C0 440C              lsl R4
 02C2 551C              rol R5
 02C4 440C              lsl R4
 02C6 551C              rol R5
 02C8 420C              add R4,R2
 02CA 531C              adc R5,R3
 02CC 4092EA00          sts _OSPrioHighRdy,R4
 02D0                   .dbline 186
 02D0           ;         if (OSPrioHighRdy != OSPrioCur) {         /* No context switch if current task is highest ready */
 02D0 2090EB00          lds R2,_OSPrioCur
 02D4 4214              cp R4,R2
 02D6 39F1              breq L32
 02D8                   .dbline 186
 02D8                   .dbline 187
 02D8           ;             OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
 02D8 242C              mov R2,R4
 02DA 82E0              ldi R24,2
 02DC 829D              mul R24,R2
 02DE F001              movw R30,R0
 02E0 80E0              ldi R24,<_OSTCBPrioTbl
 02E2 90E0              ldi R25,>_OSTCBPrioTbl
 02E4 E80F              add R30,R24
 02E6 F91F              adc R31,R25
 02E8 2080              ldd R2,z+0
 02EA 3180              ldd R3,z+1
 02EC 3092E000          sts _OSTCBHighRdy+1,R3
 02F0 2092DF00          sts _OSTCBHighRdy,R2
 02F4                   .dbline 188
 02F4           ;             OSCtxSwCtr++;                        /* Increment context switch counter                   */
 02F4 81E0              ldi R24,1
 02F6 90E0              ldi R25,0
 02F8 A0E0              ldi R26,0
 02FA B0E0              ldi R27,0
 02FC 40900601          lds R4,_OSCtxSwCtr+2
 0300 50900701          lds R5,_OSCtxSwCtr+2+1
 0304 20900401          lds R2,_OSCtxSwCtr
 0308 30900501          lds R3,_OSCtxSwCtr+1
 030C 280E              add R2,R24
 030E 391E              adc R3,R25
 0310 4A1E              adc R4,R26
 0312 5B1E              adc R5,R27
 0314 30920501          sts _OSCtxSwCtr+1,R3
 0318 20920401          sts _OSCtxSwCtr,R2
 031C 50920701          sts _OSCtxSwCtr+2+1,R5
 0320 40920601          sts _OSCtxSwCtr+2,R4
 0324                   .dbline 189
 0324           ;             OS_TASK_SW();                        /* Perform a context switch                           */
 0324 00D0              rcall _OSCtxSw
 0326                   .dbline 190
 0326           ;         }
 0326           L32:
 0326                   .dbline 191
 0326           ;     }
 0326           L30:
 0326                   .dbline 192
 0326           ;     OS_EXIT_CRITICAL();
 0326 0A93              st -y,r16
 0328 0F91              pop r16
 032A 0FBF              out 0x3F,r16
 032C 0991              ld r16,y+
 032E                   .dbline 192
 032E                   .dbline -2
 032E           L29:
 032E 00D0              rcall pop_gset3x
 0330                   .dbline 0 ; func end
 0330 0895              ret
 0332                   .dbsym r y 10 c
 0332                   .dbend
 0332                   .dbfunc e OSStart _OSStart fV
 0332           ;              x -> R12
 0332           ;              y -> R10
                        .even
 0332           _OSStart::
 0332 00D0              rcall push_gset4x
 0334                   .dbline -1
 0334                   .dbline 214
 0334                   .dbline 219
 0334 2090E600          lds R2,_OSRunning
 0338 2220              tst R2
 033A 09F0              breq X2
 033C 38C0              rjmp L35
 033E           X2:
 033E                   .dbline 219
 033E                   .dbline 220
 033E 80E0              ldi R24,<_OSUnMapTbl
 0340 90E0              ldi R25,>_OSUnMapTbl
 0342 E091E900          lds R30,_OSRdyGrp
 0346 FF27              clr R31
 0348 E80F              add R30,R24
 034A F91F              adc R31,R25
 034C A490              lpm R10,Z
 034E                   .dbline 221
 034E 80E0              ldi R24,<_OSRdyTbl
 0350 90E0              ldi R25,>_OSRdyTbl
 0352 EA2D              mov R30,R10
 0354 FF27              clr R31
 0356 E80F              add R30,R24
 0358 F91F              adc R31,R25
 035A E081              ldd R30,z+0
 035C FF27              clr R31
 035E 80E0              ldi R24,<_OSUnMapTbl
 0360 90E0              ldi R25,>_OSUnMapTbl
 0362 E80F              add R30,R24
 0364 F91F              adc R31,R25
 0366 C490              lpm R12,Z
 0368                   .dbline 222
 0368 2C2C              mov R2,R12
 036A 3324              clr R3
 036C 4A2C              mov R4,R10
 036E 5524              clr R5
 0370 440C              lsl R4
 0372 551C              rol R5
 0374 440C              lsl R4
 0376 551C              rol R5
 0378 440C              lsl R4
 037A 551C              rol R5
 037C 420C              add R4,R2
 037E 531C              adc R5,R3
 0380 4092EA00          sts _OSPrioHighRdy,R4
 0384                   .dbline 223
 0384 242C              mov R2,R4
 0386 2092EB00          sts _OSPrioCur,R2
 038A                   .dbline 224
 038A 82E0              ldi R24,2
 038C 829D              mul R24,R2
 038E F001              movw R30,R0
 0390 80E0              ldi R24,<_OSTCBPrioTbl
 0392 90E0              ldi R25,>_OSTCBPrioTbl
 0394 E80F              add R30,R24
 0396 F91F              adc R31,R25
 0398 2080              ldd R2,z+0
 039A 3180              ldd R3,z+1
 039C 3092E000          sts _OSTCBHighRdy+1,R3
 03A0 2092DF00          sts _OSTCBHighRdy,R2
 03A4                   .dbline 225
 03A4 3092E400          sts _OSTCBCur+1,R3
 03A8 2092E300          sts _OSTCBCur,R2
 03AC                   .dbline 226
 03AC 00D0              rcall _OSStartHighRdy
 03AE                   .dbline 227
 03AE           L35:
 03AE                   .dbline -2
 03AE           L34:
 03AE 00D0              rcall pop_gset4x
 03B0                   .dbline 0 ; func end
 03B0 0895              ret
 03B2                   .dbsym r x 12 c
 03B2                   .dbsym r y 10 c
 03B2                   .dbend
 03B2                   .dbfunc e OSTaskIdle _OSTaskIdle fV
 03B2           ;          pdata -> R16,R17
                        .even
 03B2           _OSTaskIdle::
 03B2                   .dbline -1
 03B2                   .dbline 244
 03B2           ; }
 03B2           ; /*$PAGE*/
 03B2           ; /*
 03B2           ; *********************************************************************************************************

⌨️ 快捷键说明

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