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