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

📄 os_core.lis

📁 1.将uC/OS-II操作系统移植到Mega16上 2.建立两个任务
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -