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

📄 os_core.lis

📁 1.将uC/OS-II操作系统移植到Mega16上 2.建立两个任务
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0218 41F1              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 0E940000          xcall _OSIntCtxSw
 026A                   .dbline 155
 026A           ;         }
 026A           L27:
 026A                   .dbline 156
 026A           ;     }
 026A           L25:
 026A                   .dbline 157
 026A           ;     OS_EXIT_CRITICAL();
 026A 0A93              st -y,r16
 026C 0F91              pop r16
 026E 0FBF              out 0x3F,r16
 0270 0991              ld r16,y+
 0272                   .dbline 157
 0272                   .dbline -2
 0272                   .dbline 158
 0272           ; }
 0272           L24:
 0272                   .dbline 0 ; func end
 0272 0895              ret
 0274                   .dbend
 0274                   .dbfunc e OSSched _OSSched fV
 0274           ;              y -> R20
                        .even
 0274           _OSSched::
 0274 0E940000          xcall push_gset1
 0278                   .dbline -1
 0278                   .dbline 178
 0278           ; /*$PAGE*/
 0278           ; /*
 0278           ; *********************************************************************************************************
 0278           ; *                                              SCHEDULER
 0278           ; *
 0278           ; * Description: This function is called by other uC/OS-II services to determine whether a new, high
 0278           ; *              priority task has been made ready to run.  This function is invoked by TASK level code
 0278           ; *              and is not used to reschedule tasks from ISRs (see OSIntExit() for ISR rescheduling).
 0278           ; *
 0278           ; * Arguments  : none
 0278           ; *
 0278           ; * Returns    : none
 0278           ; *
 0278           ; * Notes      : 1) This function is INTERNAL to uC/OS-II and your application should not call it.
 0278           ; *              2) Rescheduling is prevented when the scheduler is locked (see OSSchedLock())
 0278           ; *********************************************************************************************************
 0278           ; */
 0278           ; 
 0278           ; void OSSched (void)
 0278           ; {
 0278                   .dbline 182
 0278           ;     INT8U y;
 0278           ; 
 0278           ; 
 0278           ;     OS_ENTER_CRITICAL();
 0278 0A93              st -y,r16
 027A 0FB7              in r16,0x3f
 027C F894              cli
 027E 0F93              push r16
 0280 0991              ld r16,y+
 0282                   .dbline 182
 0282                   .dbline 183
 0282           ;     if ((OSLockNesting | OSIntNesting) == 0) {   /* Task scheduling must be enabled and not ISR level  */
 0282 2090ED00          lds R2,_OSIntNesting
 0286 3090EC00          lds R3,_OSLockNesting
 028A 3228              or R3,R2
 028C 09F0              breq X1
 028E 4EC0              xjmp L30
 0290           X1:
 0290                   .dbline 183
 0290                   .dbline 184
 0290           ;         y             = OSUnMapTbl[OSRdyGrp];    /* Get pointer to highest priority task ready to run  */
 0290 80E0              ldi R24,<_OSUnMapTbl
 0292 90E0              ldi R25,>_OSUnMapTbl
 0294 E091E900          lds R30,_OSRdyGrp
 0298 FF27              clr R31
 029A E80F              add R30,R24
 029C F91F              adc R31,R25
 029E 4491              lpm R20,Z
 02A0                   .dbline 185
 02A0           ;         OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
 02A0 80E0              ldi R24,<_OSRdyTbl
 02A2 90E0              ldi R25,>_OSRdyTbl
 02A4 E42F              mov R30,R20
 02A6 FF27              clr R31
 02A8 E80F              add R30,R24
 02AA F91F              adc R31,R25
 02AC E081              ldd R30,z+0
 02AE FF27              clr R31
 02B0 80E0              ldi R24,<_OSUnMapTbl
 02B2 90E0              ldi R25,>_OSUnMapTbl
 02B4 E80F              add R30,R24
 02B6 F91F              adc R31,R25
 02B8 2490              lpm R2,Z
 02BA 3324              clr R3
 02BC 442E              mov R4,R20
 02BE 5524              clr R5
 02C0 440C              lsl R4
 02C2 551C              rol R5
 02C4 440C              lsl R4
 02C6 551C              rol R5
 02C8 440C              lsl R4
 02CA 551C              rol R5
 02CC 420C              add R4,R2
 02CE 531C              adc R5,R3
 02D0 4092EA00          sts _OSPrioHighRdy,R4
 02D4                   .dbline 186
 02D4           ;         if (OSPrioHighRdy != OSPrioCur) {         /* No context switch if current task is highest ready */
 02D4 2090EB00          lds R2,_OSPrioCur
 02D8 4214              cp R4,R2
 02DA 41F1              breq L32
 02DC                   .dbline 186
 02DC                   .dbline 187
 02DC           ;             OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
 02DC 242C              mov R2,R4
 02DE 82E0              ldi R24,2
 02E0 829D              mul R24,R2
 02E2 F001              movw R30,R0
 02E4 80E0              ldi R24,<_OSTCBPrioTbl
 02E6 90E0              ldi R25,>_OSTCBPrioTbl
 02E8 E80F              add R30,R24
 02EA F91F              adc R31,R25
 02EC 2080              ldd R2,z+0
 02EE 3180              ldd R3,z+1
 02F0 3092E000          sts _OSTCBHighRdy+1,R3
 02F4 2092DF00          sts _OSTCBHighRdy,R2
 02F8                   .dbline 188
 02F8           ;             OSCtxSwCtr++;                        /* Increment context switch counter                   */
 02F8 81E0              ldi R24,1
 02FA 90E0              ldi R25,0
 02FC A0E0              ldi R26,0
 02FE B0E0              ldi R27,0
 0300 40900601          lds R4,_OSCtxSwCtr+2
 0304 50900701          lds R5,_OSCtxSwCtr+2+1
 0308 20900401          lds R2,_OSCtxSwCtr
 030C 30900501          lds R3,_OSCtxSwCtr+1
 0310 280E              add R2,R24
 0312 391E              adc R3,R25
 0314 4A1E              adc R4,R26
 0316 5B1E              adc R5,R27
 0318 30920501          sts _OSCtxSwCtr+1,R3
 031C 20920401          sts _OSCtxSwCtr,R2
 0320 50920701          sts _OSCtxSwCtr+2+1,R5
 0324 40920601          sts _OSCtxSwCtr+2,R4
 0328                   .dbline 189
 0328           ;             OS_TASK_SW();                        /* Perform a context switch                           */
 0328 0E940000          xcall _OSCtxSw
 032C                   .dbline 190
 032C           ;         }
 032C           L32:
 032C                   .dbline 191
 032C           ;     }
 032C           L30:
 032C                   .dbline 192
 032C           ;     OS_EXIT_CRITICAL();
 032C 0A93              st -y,r16
 032E 0F91              pop r16
 0330 0FBF              out 0x3F,r16
 0332 0991              ld r16,y+
 0334                   .dbline 192
 0334                   .dbline -2
 0334                   .dbline 193
 0334           ; }
 0334           L29:
 0334 0E940000          xcall pop_gset1
 0338                   .dbline 0 ; func end
 0338 0895              ret
 033A                   .dbsym r y 20 c
 033A                   .dbend
 033A                   .dbfunc e OSStart _OSStart fV
 033A           ;              x -> R22
 033A           ;              y -> R20
                        .even
 033A           _OSStart::
 033A 0E940000          xcall push_gset2
 033E                   .dbline -1
 033E                   .dbline 214
 033E                   .dbline 219
 033E 2090E600          lds R2,_OSRunning
 0342 2220              tst R2
 0344 09F0              breq X2
 0346 39C0              xjmp L35
 0348           X2:
 0348                   .dbline 219
 0348                   .dbline 220
 0348 80E0              ldi R24,<_OSUnMapTbl
 034A 90E0              ldi R25,>_OSUnMapTbl
 034C E091E900          lds R30,_OSRdyGrp
 0350 FF27              clr R31
 0352 E80F              add R30,R24
 0354 F91F              adc R31,R25
 0356 4491              lpm R20,Z
 0358                   .dbline 221
 0358 80E0              ldi R24,<_OSRdyTbl
 035A 90E0              ldi R25,>_OSRdyTbl
 035C E42F              mov R30,R20
 035E FF27              clr R31
 0360 E80F              add R30,R24
 0362 F91F              adc R31,R25
 0364 E081              ldd R30,z+0
 0366 FF27              clr R31
 0368 80E0              ldi R24,<_OSUnMapTbl
 036A 90E0              ldi R25,>_OSUnMapTbl
 036C E80F              add R30,R24
 036E F91F              adc R31,R25
 0370 6491              lpm R22,Z
 0372                   .dbline 222
 0372 262E              mov R2,R22
 0374 3324              clr R3
 0376 442E              mov R4,R20
 0378 5524              clr R5
 037A 440C              lsl R4
 037C 551C              rol R5
 037E 440C              lsl R4
 0380 551C              rol R5
 0382 440C              lsl R4
 0384 551C              rol R5
 0386 420C              add R4,R2
 0388 531C              adc R5,R3
 038A 4092EA00          sts _OSPrioHighRdy,R4
 038E                   .dbline 223
 038E 242C              mov R2,R4
 0390 2092EB00          sts _OSPrioCur,R2
 0394                   .dbline 224
 0394 82E0              ldi R24,2
 0396 829D              mul R24,R2
 0398 F001              movw R30,R0
 039A 80E0              ldi R24,<_OSTCBPrioTbl
 039C 90E0              ldi R25,>_OSTCBPrioTbl
 039E E80F              add R30,R24
 03A0 F91F              adc R31,R25
 03A2 2080              ldd R2,z+0
 03A4 3180              ldd R3,z+1
 03A6 3092E000          sts _OSTCBHighRdy+1,R3
 03AA 2092DF00          sts _OSTCBHighRdy,R2
 03AE                   .dbline 225
 03AE 3092E400          sts _OSTCBCur+1,R3
 03B2 2092E300          sts _OSTCBCur,R2
 03B6                   .dbline 226
 03B6 0E940000          xcall _OSStartHighRdy
 03BA                   .dbline 227
 03BA           L35:
 03BA                   .dbline -2
 03BA                   .dbline 228
 03BA           ; /*$PAGE*/
 03BA           ; /*
 03BA           ; *********************************************************************************************************
 03BA           ; *                                          START MULTITASKING
 03BA           ; *
 03BA           ; * Description: This function is used to start the multitasking process which lets uC/OS-II manages the
 03BA           ; *              task that you have created.  Before you can call OSStart(), you MUST have called OSInit()
 03BA           ; *              and you MUST have created at least one task.
 03BA           ; *
 03BA           ; * Arguments  : none
 03BA           ; *
 03BA           ; * Returns    : none
 03BA           ; *
 03BA           ; * Note       : OSStartHighRdy() MUST:
 03BA           ; *                 a) Call OSTaskSwHook() then,
 03BA           ; *                 b) Set OSRunning to TRUE.
 03BA           ; *********************************************************************************************************

⌨️ 快捷键说明

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