📄 os-task-switch.lis
字号:
021C 00D0 rcall _OSStartHighRdy
021E .dbline 188
021E ; }
021E 02C0 rjmp L35
0220 L34:
0220 .dbline 190
0220 0027 clr R16
0222 00D0 rcall _OSError
0224 L35:
0224 .dbline -2
0224 .dbline 192
0224 ; #if OS_STRICT
0224 ; else OSError(0);
0224 ; #endif
0224 ; }
0224 L33:
0224 .dbline 0 ; func end
0224 0895 ret
0226 .dbend
0226 .dbfunc e OSTimeDly _OSTimeDly fV
0226 ; ticks -> R20,R21
.even
0226 _OSTimeDly::
0226 00D0 rcall push_gset1
0228 402F mov R20,R16
022A 512F mov R21,R17
022C .dbline -1
022C .dbline 211
022C .dbline 212
022C 4030 cpi R20,0
022E 4507 cpc R20,R21
0230 81F0 breq L39
0232 X5:
0232 .dbline 212
0232 .dbline 213
0232 0A93 st -y,r16
0234 0FB7 in r16,0x3f
0236 F894 cli
0238 0F93 push r16
023A 0991 ld r16,y+
023C .dbline 213
023C .dbline 214
023C E0919D01 lds R30,_OSTCBCur
0240 F0919E01 lds R31,_OSTCBCur+1
0244 4283 std z+2,R20
0246 5383 std z+3,R21
0248 .dbline 215
0248 0A93 st -y,r16
024A 0F91 pop r16
024C 0FBF out 0x3F,r16
024E 0991 ld r16,y+
0250 .dbline 215
0250 .dbline 216
0250 90DF rcall _OSSched
0252 .dbline 217
0252 L39:
0252 .dbline -2
0252 .dbline 218
0252 ;
0252 ; /*
0252 ; *********************************************************************************************************
0252 ; * DELAY TASK 'n' TICKS (n from 0 to 65535)
0252 ; *
0252 ; * Description: This function is called to delay execution of the currently running task until the
0252 ; * specified number of system ticks expires. This, of course, directly equates to delaying
0252 ; * the current task for some time to expire. No delay will result If the specified delay is
0252 ; * 0. If the specified delay is greater than 0 then, a context switch will result.
0252 ; *
0252 ; * Arguments : ticks is the time delay that the task will be suspended in number of clock 'ticks'.
0252 ; * Note that by specifying 0, the task will not be delayed.
0252 ; *
0252 ; * Returns : none
0252 ; *********************************************************************************************************
0252 ; */
0252 ;
0252 ; void OSTimeDly (INT16U ticks)
0252 ; {
0252 ; if (ticks > 0) { /* 0 means no delay! */
0252 ; OS_ENTER_CRITICAL();
0252 ; OSTCBCur->OSTCBDly = ticks; /* Load ticks in TCB */
0252 ; OS_EXIT_CRITICAL();
0252 ; OSSched(); /* Find next task to run! */
0252 ; }
0252 ; }
0252 L38:
0252 00D0 rcall pop_gset1
0254 .dbline 0 ; func end
0254 0895 ret
0256 .dbsym r ticks 20 i
0256 .dbend
0256 .dbfunc e OSGetPrioRdy _OSGetPrioRdy fc
0256 ; ret -> R20
0256 ; ptcb -> R10,R11
0256 ; i -> R22
.even
0256 _OSGetPrioRdy::
0256 00D0 rcall push_gset3
0258 .dbline -1
0258 .dbline 221
0258 ; /*return tcb's prio which OSTCBDly==0*/
0258 ; INT8U OSGetPrioRdy(void)
0258 ; {
0258 .dbline 222
0258 ; INT8U i,ret=0xff;
0258 4FEF ldi R20,255
025A .dbline 224
025A ; OS_TCB *ptcb;
025A ; for(i=0;i<OS_TASK_COUNT;i++)
025A 6627 clr R22
025C 40C0 rjmp L45
025E L42:
025E .dbline 225
025E ; {
025E .dbline 226
025E ; ptcb=OSpTCBList[i];
025E 80E0 ldi R24,<_OSpTCBList
0260 90E0 ldi R25,>_OSpTCBList
0262 E62F mov R30,R22
0264 FF27 clr R31
0266 EE0F lsl R30
0268 FF1F rol R31
026A E80F add R30,R24
026C F91F adc R31,R25
026E A080 ldd R10,z+0
0270 B180 ldd R11,z+1
0272 .dbline 228
0272 ; //OS_ENTER_CRITICAL();
0272 ; if(ptcb)
0272 AA20 tst R10
0274 19F4 brne X6
0276 BB20 tst R11
0278 09F4 brne X8
027A 30C0 rjmp L46
027C X8:
027C X6:
027C .dbline 229
027C ; {
027C .dbline 230
027C ; if(0==ptcb->OSTCBDly)
027C EA2D mov R30,R10
027E FB2D mov R31,R11
0280 2280 ldd R2,z+2
0282 3380 ldd R3,z+3
0284 2220 tst R2
0286 09F0 breq X9
0288 29C0 rjmp L48
028A X9:
028A 3320 tst R3
028C 09F0 breq X10
028E 26C0 rjmp L48
0290 X10:
0290 X7:
0290 .dbline 231
0290 ; {
0290 .dbline 232
0290 ; if(OS_STAT_RDY==ptcb->OSTCBStat)
0290 EA2D mov R30,R10
0292 FB2D mov R31,R11
0294 8481 ldd R24,z+4
0296 8130 cpi R24,1
0298 71F4 brne L50
029A .dbline 233
029A ; {
029A .dbline 235
029A ; #if OS_STRICT
029A ; if(i!=ptcb->OSTCBPrio)
029A 2580 ldd R2,z+5
029C 6215 cp R22,R2
029E 11F0 breq L52
02A0 .dbline 236
02A0 ; OSError(0);
02A0 0027 clr R16
02A2 00D0 rcall _OSError
02A4 L52:
02A4 .dbline 238
02A4 ; #endif
02A4 ; ret=ptcb->OSTCBPrio;
02A4 EA2D mov R30,R10
02A6 FB2D mov R31,R11
02A8 4581 ldd R20,z+5
02AA .dbline 240
02AA ; #if OS_STRICT
02AA ; if(ret>OS_LOWEST_PRIO)
02AA 82E0 ldi R24,2
02AC 8417 cp R24,R20
02AE D0F4 brsh L44
02B0 .dbline 241
02B0 ; OSError(0);
02B0 0027 clr R16
02B2 00D0 rcall _OSError
02B4 .dbline 243
02B4 ; #endif
02B4 ; break;//for
02B4 17C0 rjmp L44
02B6 L50:
02B6 .dbline 246
02B6 ; }//end OS_STAT_RDY==ptcb->OSTCBStat
02B6 ; #if OS_SEM_EN
02B6 ; else{
02B6 .dbline 247
02B6 ; if(ptcb->OSTCBStat & OS_STAT_SEM)
02B6 EA2D mov R30,R10
02B8 FB2D mov R31,R11
02BA 2480 ldd R2,z+4
02BC 21FE sbrs R2,1
02BE 0EC0 rjmp L56
02C0 .dbline 248
02C0 ; {
02C0 .dbline 250
02C0 ; #if OS_STRICT
02C0 ; if(i!=ptcb->OSTCBPrio)
02C0 2580 ldd R2,z+5
02C2 6215 cp R22,R2
02C4 11F0 breq L58
02C6 .dbline 251
02C6 ; OSError(0);
02C6 0027 clr R16
02C8 00D0 rcall _OSError
02CA L58:
02CA .dbline 253
02CA ; #endif
02CA ; ret=ptcb->OSTCBPrio;
02CA EA2D mov R30,R10
02CC FB2D mov R31,R11
02CE 4581 ldd R20,z+5
02D0 .dbline 255
02D0 ; #if OS_STRICT
02D0 ; if(ret>OS_LOWEST_PRIO)
02D0 82E0 ldi R24,2
02D2 8417 cp R24,R20
02D4 38F4 brsh L44
02D6 .dbline 256
02D6 ; OSError(0);
02D6 0027 clr R16
02D8 00D0 rcall _OSError
02DA .dbline 258
02DA ; #endif
02DA ; break;//for
02DA 04C0 rjmp L44
02DC L56:
02DC .dbline 260
02DC ; }
02DC ; }//end (ptcb->OSTCBStat & OS_STAT_SEM)
02DC .dbline 262
02DC ; #endif//OS_SEM_EN
02DC ; }//end (0==ptcb->OSTCBDly)
02DC L48:
02DC .dbline 263
02DC ; }
02DC L46:
02DC .dbline 265
02DC L43:
02DC .dbline 224
02DC 6395 inc R22
02DE L45:
02DE .dbline 224
02DE 6330 cpi R22,3
02E0 08F4 brsh X11
02E2 BDCF rjmp L42
02E4 X11:
02E4 L44:
02E4 .dbline 266
02E4 ; //OS_EXIT_CRITICAL();
02E4 ; }
02E4 ; return ret;
02E4 042F mov R16,R20
02E6 .dbline -2
02E6 L41:
02E6 00D0 rcall pop_gset3
02E8 .dbline 0 ; func end
02E8 0895 ret
02EA .dbsym r ret 20 c
02EA .dbsym r ptcb 10 pX
02EA .dbsym r i 22 c
02EA .dbend
02EA .dbfunc e OSTimeTick _OSTimeTick fV
02EA ; ret -> <dead>
02EA ; ptcb -> R16,R17
02EA ; i -> R18
.even
02EA _OSTimeTick::
02EA .dbline -1
02EA .dbline 284
02EA ; }
02EA ;
02EA ; /*
02EA ; *********************************************************************************************************
02EA ; * PROCESS SYSTEM TICK
02EA ; *
02EA ; * Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also known
02EA ; * as a 'clock tick'). This function should be called by the ticker ISR but, can also be
02EA ; * called by a high priority task.
02EA ; *
02EA ; * Arguments : none
02EA ; *
02EA ; * Returns : none
02EA ; *********************************************************************************************************
02EA ; */
02EA ;
02EA ; void OSTimeTick (void)
02EA ; {
02EA .dbline 288
02EA ; INT8U i,ret;
02EA ; OS_TCB *ptcb;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -