📄 os_core.lis
字号:
04AA 2282 std z+2,R2
04AC .dbline 325
04AC ; ptcb->OSTCBPrev = (OS_TCB *)0;
04AC 2224 clr R2
04AE 3324 clr R3
04B0 F501 movw R30,R10
04B2 3582 std z+5,R3
04B4 2482 std z+4,R2
04B6 .dbline 326
04B6 ; if (OSTCBList != (OS_TCB *)0) {
04B6 2090DD00 lds R2,_OSTCBList
04BA 3090DE00 lds R3,_OSTCBList+1
04BE 2220 tst R2
04C0 11F4 brne X5
04C2 3320 tst R3
04C4 31F0 breq L45
04C6 X5:
04C6 .dbline 326
04C6 .dbline 327
04C6 ; OSTCBList->OSTCBPrev = ptcb;
04C6 E091DD00 lds R30,_OSTCBList
04CA F091DE00 lds R31,_OSTCBList+1
04CE B582 std z+5,R11
04D0 A482 std z+4,R10
04D2 .dbline 328
04D2 ; }
04D2 L45:
04D2 .dbline 329
04D2 ; OSTCBList = ptcb;
04D2 B092DE00 sts _OSTCBList+1,R11
04D6 A092DD00 sts _OSTCBList,R10
04DA .dbline 330
04DA ; OSRdyGrp |= ptcb->OSTCBBitY; /* Make task ready to run */
04DA F501 movw R30,R10
04DC 2584 ldd R2,z+13
04DE 3090E900 lds R3,_OSRdyGrp
04E2 3228 or R3,R2
04E4 3092E900 sts _OSRdyGrp,R3
04E8 .dbline 331
04E8 ; OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
04E8 80E0 ldi R24,<_OSRdyTbl
04EA 90E0 ldi R25,>_OSRdyTbl
04EC F501 movw R30,R10
04EE 2384 ldd R2,z+11
04F0 3324 clr R3
04F2 280E add R2,R24
04F4 391E adc R3,R25
04F6 F501 movw R30,R10
04F8 4484 ldd R4,z+12
04FA F101 movw R30,R2
04FC 5080 ldd R5,z+0
04FE 5428 or R5,R4
0500 5082 std z+0,R5
0502 .dbline 332
0502 ; OS_EXIT_CRITICAL();
0502 0A93 st -y,r16
0504 0F91 pop r16
0506 0FBF out 0x3F,r16
0508 0991 ld r16,y+
050A .dbline 332
050A .dbline 333
050A ; return (OS_NO_ERR);
050A 0027 clr R16
050C 05C0 rjmp L42
050E L43:
050E .dbline 334
050E ; } else {
050E .dbline 335
050E ; OS_EXIT_CRITICAL();
050E 0A93 st -y,r16
0510 0F91 pop r16
0512 0FBF out 0x3F,r16
0514 0991 ld r16,y+
0516 .dbline 335
0516 .dbline 336
0516 ; return (OS_NO_MORE_TCB);
0516 06E4 ldi R16,70
0518 .dbline -2
0518 L42:
0518 00D0 rcall pop_gset3x
051A .dbline 0 ; func end
051A 0895 ret
051C .dbsym r ptcb 10 pX
051C .dbsym l opt 10 i
051C .dbsym l pext 8 pV
051C .dbsym l stk_size 6 i
051C .dbsym l id 4 i
051C .dbsym l pbos 2 pc
051C .dbsym r ptos 18 pc
051C .dbsym r prio 16 c
051C .dbend
051C .dbfunc e OSTimeTick _OSTimeTick fV
051C ; ptcb -> R16,R17
.even
051C _OSTimeTick::
051C .dbline -1
051C .dbline 355
051C ; }
051C ; }
051C ; /*$PAGE*/
051C ; /*
051C ; *********************************************************************************************************
051C ; * PROCESS SYSTEM TICK
051C ; *
051C ; * Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also known
051C ; * as a 'clock tick'). This function should be called by the ticker ISR but, can also be
051C ; * called by a high priority task.
051C ; *
051C ; * Arguments : none
051C ; *
051C ; * Returns : none
051C ; *********************************************************************************************************
051C ; */
051C ;
051C ; void OSTimeTick (void)
051C ; {
051C .dbline 358
051C ; OS_TCB *ptcb;
051C ;
051C ; ptcb = OSTCBList; /* Point at first TCB in TCB list */
051C 0091DD00 lds R16,_OSTCBList
0520 1091DE00 lds R17,_OSTCBList+1
0524 3FC0 rjmp L49
0526 L48:
0526 .dbline 359
0526 ; while (ptcb->OSTCBPrio != OS_IDLE_PRIO) { /* Go through all TCBs in TCB list */
0526 .dbline 360
0526 ; OS_ENTER_CRITICAL();
0526 0A93 st -y,r16
0528 0FB7 in r16,0x3F
052A F894 cli
052C 0F93 push r16
052E 0991 ld r16,y+
0530 .dbline 360
0530 .dbline 361
0530 ; if (ptcb->OSTCBDly != 0) { /* Delayed or waiting for event with TO */
0530 F801 movw R30,R16
0532 2680 ldd R2,z+6
0534 3780 ldd R3,z+7
0536 2220 tst R2
0538 19F4 brne X7
053A 3320 tst R3
053C 09F4 brne X9
053E 2BC0 rjmp L51
0540 X9:
0540 X7:
0540 .dbline 361
0540 .dbline 362
0540 ; if (--ptcb->OSTCBDly == 0) { /* Decrement nbr of ticks to end of delay */
0540 C801 movw R24,R16
0542 0696 adiw R24,6
0544 FC01 movw R30,R24
0546 8081 ldd R24,z+0
0548 9181 ldd R25,z+1
054A 0197 sbiw R24,1
054C 2C01 movw R4,R24
054E 5182 std z+1,R5
0550 4082 std z+0,R4
0552 8030 cpi R24,0
0554 8907 cpc R24,R25
0556 09F0 breq X10
0558 1EC0 rjmp L53
055A X10:
055A X8:
055A .dbline 362
055A .dbline 363
055A ; if (!(ptcb->OSTCBStat & OS_STAT_SUSPEND)) { /* Is task suspended? */
055A F801 movw R30,R16
055C 2084 ldd R2,z+8
055E 23FC sbrc R2,3
0560 15C0 rjmp L55
0562 .dbline 363
0562 .dbline 364
0562 ; OSRdyGrp |= ptcb->OSTCBBitY; /* No, Make task Rdy to Run (timed out)*/
0562 F801 movw R30,R16
0564 2584 ldd R2,z+13
0566 3090E900 lds R3,_OSRdyGrp
056A 3228 or R3,R2
056C 3092E900 sts _OSRdyGrp,R3
0570 .dbline 365
0570 ; OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
0570 80E0 ldi R24,<_OSRdyTbl
0572 90E0 ldi R25,>_OSRdyTbl
0574 F801 movw R30,R16
0576 2384 ldd R2,z+11
0578 3324 clr R3
057A 280E add R2,R24
057C 391E adc R3,R25
057E F801 movw R30,R16
0580 4484 ldd R4,z+12
0582 F101 movw R30,R2
0584 5080 ldd R5,z+0
0586 5428 or R5,R4
0588 5082 std z+0,R5
058A .dbline 366
058A 05C0 rjmp L56
058C L55:
058C .dbline 366
058C ; } else { /* Yes, Leave 1 tick to prevent ... */
058C .dbline 367
058C ; ptcb->OSTCBDly = 1; /* ... loosing the task when the ... */
058C 81E0 ldi R24,1
058E 90E0 ldi R25,0
0590 F801 movw R30,R16
0592 9783 std z+7,R25
0594 8683 std z+6,R24
0596 .dbline 368
0596 ; } /* ... suspension is removed. */
0596 L56:
0596 .dbline 369
0596 ; }
0596 L53:
0596 .dbline 370
0596 ; }
0596 L51:
0596 .dbline 371
0596 F801 movw R30,R16
0598 0281 ldd R16,z+2
059A 1381 ldd R17,z+3
059C .dbline 372
059C 0A93 st -y,r16
059E 0F91 pop r16
05A0 0FBF out 0x3F,r16
05A2 0991 ld r16,y+
05A4 .dbline 372
05A4 .dbline 373
05A4 L49:
05A4 .dbline 359
05A4 F801 movw R30,R16
05A6 8185 ldd R24,z+9
05A8 8F30 cpi R24,15
05AA 09F0 breq X11
05AC BCCF rjmp L48
05AE X11:
05AE .dbline 374
05AE ; ptcb = ptcb->OSTCBNext; /* Point at next TCB in TCB list */
05AE ; OS_EXIT_CRITICAL();
05AE ; }
05AE ; OS_ENTER_CRITICAL(); /* Update the 32-bit tick counter */
05AE 0A93 st -y,r16
05B0 0FB7 in r16,0x3F
05B2 F894 cli
05B4 0F93 push r16
05B6 0991 ld r16,y+
05B8 .dbline 374
05B8 .dbline 375
05B8 ; OSTime++;
05B8 81E0 ldi R24,1
05BA 90E0 ldi R25,0
05BC A0E0 ldi R26,0
05BE B0E0 ldi R27,0
05C0 4090BB00 lds R4,_OSTime+2
05C4 5090BC00 lds R5,_OSTime+2+1
05C8 2090B900 lds R2,_OSTime
05CC 3090BA00 lds R3,_OSTime+1
05D0 280E add R2,R24
05D2 391E adc R3,R25
05D4 4A1E adc R4,R26
05D6 5B1E adc R5,R27
05D8 3092BA00 sts _OSTime+1,R3
05DC 2092B900 sts _OSTime,R2
05E0 5092BC00 sts _OSTime+2+1,R5
05E4 4092BB00 sts _OSTime+2,R4
05E8 .dbline 376
05E8 ; OS_EXIT_CRITICAL();
05E8 0A93 st -y,r16
05EA 0F91 pop r16
05EC 0FBF out 0x3F,r16
05EE 0991 ld r16,y+
05F0 .dbline 376
05F0 .dbline -2
05F0 L47:
05F0 .dbline 0 ; func end
05F0 0895 ret
05F2 .dbsym r ptcb 16 pX
05F2 .dbend
.area bss(ram, con, rel)
0000 .dbfile G:\IccPro\ucos_m8_icc\source\OS_CORE.C
0000 _OSTCBTbl:
0000 .blkb 84
0054 .dbsym s OSTCBTbl _OSTCBTbl A[84:6]X
0054 _OSTaskIdleStk:
0054 .blkb 100
00B8 .dbsym s OSTaskIdleStk _OSTaskIdleStk A[100:100]c
00B8 _OSIntExitY:
00B8 .blkb 1
00B9 .dbsym s OSIntExitY _OSIntExitY c
00B9 _OSTime::
00B9 .blkb 4
00BD .dbfile G:\IccPro\ucos_m8_icc\source/UCOS_II.H
00BD .dbsym e OSTime _OSTime l
00BD _OSTCBPrioTbl::
00BD .blkb 32
00DD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -