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

📄 os_core.lis

📁 使用mega8和iccavr编译器的一段ucos操作系统程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -