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

📄 os_core.lis

📁 ucos如何移植到单片机mega128
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01A6           ; * Arguments  : none
 01A6           ; *
 01A6           ; * Returns    : none
 01A6           ; *********************************************************************************************************
 01A6           ; */
 01A6           ; 
 01A6           ; void  OSTimeTick (void)
 01A6           ; {
 01A6                   .dbline 372
 01A6           ; #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
 01A6           ;     OS_CPU_SR  cpu_sr;
 01A6           ; #endif    
 01A6           ;     OS_TCB    *ptcb;
 01A6           ; 
 01A6           ; 
 01A6           ;     OSTimeTickHook();                                      /* Call user definable hook                 */
 01A6 0E940000          xcall _OSTimeTickHook
 01AA                   .dbline 378
 01AA           ; #if OS_TIME_GET_SET_EN > 0   
 01AA           ;     OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter           */
 01AA           ;     OSTime++;
 01AA           ;     OS_EXIT_CRITICAL();
 01AA           ; #endif
 01AA           ;     if (OSRunning == TRUE) {    
 01AA 80912301          lds R24,_OSRunning
 01AE 8130              cpi R24,1
 01B0 09F0              breq X6
 01B2 49C0              xjmp L22
 01B4           X6:
 01B4                   .dbline 378
 01B4                   .dbline 379
 01B4           ;         ptcb = OSTCBList;                                  /* Point at first TCB in TCB list           */
 01B4 40919600          lds R20,_OSTCBList
 01B8 50919700          lds R21,_OSTCBList+1
 01BC 3FC0              xjmp L25
 01BE           L24:
 01BE                   .dbline 380
 01BE           ;         while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {          /* Go through all TCBs in TCB list          */
 01BE                   .dbline 381
 01BE           ;             OS_ENTER_CRITICAL();
 01BE 0A93              st -y,r16
 01C0 0FB7              in r16,0x3F
 01C2 F894              cli
 01C4 0F93              push r16
 01C6 0991              ld r16,y+
 01C8                   .dbline 381
 01C8                   .dbline 382
 01C8           ;             if (ptcb->OSTCBDly != 0) {                     /* Delayed or waiting for event with TO     */
 01C8 FA01              movw R30,R20
 01CA 2184              ldd R2,z+9
 01CC 3284              ldd R3,z+10
 01CE 2220              tst R2
 01D0 19F4              brne X4
 01D2 3320              tst R3
 01D4 09F4              brne X7
 01D6 2BC0              xjmp L27
 01D8           X7:
 01D8           X4:
 01D8                   .dbline 382
 01D8                   .dbline 383
 01D8           ;                 if (--ptcb->OSTCBDly == 0) {               /* Decrement nbr of ticks to end of delay   */
 01D8 CA01              movw R24,R20
 01DA 0996              adiw R24,9
 01DC FC01              movw R30,R24
 01DE 8081              ldd R24,z+0
 01E0 9181              ldd R25,z+1
 01E2 0197              sbiw R24,1
 01E4 2C01              movw R4,R24
 01E6 5182              std z+1,R5
 01E8 4082              std z+0,R4
 01EA 8030              cpi R24,0
 01EC 8907              cpc R24,R25
 01EE 09F0              breq X8
 01F0 1EC0              xjmp L29
 01F2           X8:
 01F2           X5:
 01F2                   .dbline 383
 01F2                   .dbline 384
 01F2           ;                     if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended?    */
 01F2 FA01              movw R30,R20
 01F4 2384              ldd R2,z+11
 01F6 23FC              sbrc R2,3
 01F8 15C0              rjmp L31
 01FA                   .dbline 384
 01FA                   .dbline 385
 01FA           ;                         OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task R-to-R (timed out)*/
 01FA FA01              movw R30,R20
 01FC 2088              ldd R2,z+16
 01FE 30902701          lds R3,_OSRdyGrp
 0202 3228              or R3,R2
 0204 30922701          sts _OSRdyGrp,R3
 0208                   .dbline 386
 0208           ;                         OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
 0208 80E0              ldi R24,<_OSRdyTbl
 020A 90E0              ldi R25,>_OSRdyTbl
 020C FA01              movw R30,R20
 020E 2684              ldd R2,z+14
 0210 3324              clr R3
 0212 280E              add R2,R24
 0214 391E              adc R3,R25
 0216 FA01              movw R30,R20
 0218 4784              ldd R4,z+15
 021A F101              movw R30,R2
 021C 5080              ldd R5,z+0
 021E 5428              or R5,R4
 0220 5082              std z+0,R5
 0222                   .dbline 387
 0222 05C0              xjmp L32
 0224           L31:
 0224                   .dbline 387
 0224           ;                     } else {                               /* Yes, Leave 1 tick to prevent ...         */
 0224                   .dbline 388
 0224           ;                         ptcb->OSTCBDly = 1;                /* ... loosing the task when the ...        */
 0224 81E0              ldi R24,1
 0226 90E0              ldi R25,0
 0228 FA01              movw R30,R20
 022A 9287              std z+10,R25
 022C 8187              std z+9,R24
 022E                   .dbline 389
 022E           ;                     }                                      /* ... suspension is removed.               */
 022E           L32:
 022E                   .dbline 390
 022E           ;                 }
 022E           L29:
 022E                   .dbline 391
 022E           ;             }
 022E           L27:
 022E                   .dbline 392
 022E FA01              movw R30,R20
 0230 4281              ldd R20,z+2
 0232 5381              ldd R21,z+3
 0234                   .dbline 393
 0234 0A93              st -y,r16
 0236 0F91              pop r16
 0238 0FBF              out 0x3F,r16
 023A 0991              ld r16,y+
 023C                   .dbline 393
 023C                   .dbline 394
 023C           L25:
 023C                   .dbline 380
 023C FA01              movw R30,R20
 023E 8485              ldd R24,z+12
 0240 8431              cpi R24,20
 0242 09F0              breq X9
 0244 BCCF              xjmp L24
 0246           X9:
 0246                   .dbline 395
 0246           L22:
 0246                   .dbline -2
 0246           L21:
 0246 0E940000          xcall pop_gset1
 024A                   .dbline 0 ; func end
 024A 0895              ret
 024C                   .dbsym r ptcb 20 pS[os_tcb]
 024C                   .dbend
 024C                   .dbfunc e OSVersion _OSVersion fi
                        .even
 024C           _OSVersion::
 024C                   .dbline -1
 024C                   .dbline 413
 024C           ;             ptcb = ptcb->OSTCBNext;                        /* Point at next TCB in TCB list            */
 024C           ;             OS_EXIT_CRITICAL();
 024C           ;         }
 024C           ;     }
 024C           ; }
 024C           ; 
 024C           ; /*
 024C           ; *********************************************************************************************************
 024C           ; *                                             GET VERSION
 024C           ; *
 024C           ; * Description: This function is used to return the version number of uC/OS-II.  The returned value
 024C           ; *              corresponds to uC/OS-II's version number multiplied by 100.  In other words, version 2.00
 024C           ; *              would be returned as 200.
 024C           ; *
 024C           ; * Arguments  : none
 024C           ; *
 024C           ; * Returns    : the version number of uC/OS-II multiplied by 100.
 024C           ; *********************************************************************************************************
 024C           ; */
 024C           ; 
 024C           ; INT16U  OSVersion (void)
 024C           ; {
 024C                   .dbline 414
 024C           ;     return (OS_VERSION);
 024C 0CEF              ldi R16,252
 024E 10E0              ldi R17,0
 0250                   .dbline -2
 0250           L33:
 0250                   .dbline 0 ; func end
 0250 0895              ret
 0252                   .dbend
 0252                   .dbfunc e OS_Dummy _OS_Dummy fV
                        .even
 0252           _OS_Dummy::
 0252                   .dbline -1
 0252                   .dbline 432
 0252           ; }
 0252           ; 
 0252           ; 
 0252           ; /*
 0252           ; *********************************************************************************************************
 0252           ; *                                            DUMMY FUNCTION
 0252           ; *
 0252           ; * Description: This function doesn't do anything.  It is called by OSTaskDel().
 0252           ; *
 0252           ; * Arguments  : none
 0252           ; *
 0252           ; * Returns    : none
 0252           ; *********************************************************************************************************
 0252           ; */
 0252           ; 
 0252           ; #if OS_TASK_DEL_EN > 0
 0252           ; void  OS_Dummy (void)
 0252           ; {
 0252                   .dbline -2
 0252           L34:
 0252                   .dbline 0 ; func end
 0252 0895              ret
 0254                   .dbend
 0254                   .dbfunc s OS_InitEventList _OS_InitEventList fV
                        .even
 0254           _OS_InitEventList:
 0254                   .dbline -1
 0254                   .dbline 615
 0254           ; }
 0254           ; #endif
 0254           ; 
 0254           ; 
 0254           ; /*
 0254           ; *********************************************************************************************************
 0254           ; *                             MAKE TASK READY TO RUN BASED ON EVENT OCCURING
 0254           ; *
 0254           ; * Description: This function is called by other uC/OS-II services and is used to ready a task that was
 0254           ; *              waiting for an event to occur.
 0254           ; *
 0254           ; * Arguments  : pevent    is a pointer to the event control block corresponding to the event.
 0254           ; *
 0254           ; *              msg       is a pointer to a message.  This pointer is used by message oriented services
 0254           ; *                        such as MAILBOXEs and QUEUEs.  The pointer is not used when called by other
 0254           ; *                        service functions.
 0254           ; *
 0254           ; *              msk       is a mask that is used to clear the status byte of the TCB.  For example,
 0254           ; *                        OSSemPost() will pass OS_STAT_SEM, OSMboxPost() will pass OS_STAT_MBOX etc.
 0254           ; *
 0254           ; * Returns    : none
 0254           ; *
 0254           ; * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
 0254           ; *********************************************************************************************************
 0254           ; */
 0254           ; #if OS_EVENT_EN > 0
 0254           ; INT8U  OS_EventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)
 0254           ; {
 0254           ;     OS_TCB *ptcb;
 0254           ;     INT8U   x;
 0254           ;     INT8U   y;
 0254           ;     INT8U   bitx;
 0254           ;     INT8U   bity;
 0254           ;     INT8U   prio;
 0254           ; 
 0254           ; 
 0254           ;     y    = OSUnMapTbl[pevent->OSEventGrp];            /* Find highest prio. task waiting for message   */
 0254           ;     bity = OSMapTbl[y];
 0254           ;     x    = OSUnMapTbl[pevent->OSEventTbl[y]];
 0254           ;     bitx = OSMapTbl[x];
 0254           ;     prio = (INT8U)((y << 3) + x);                     /* Find priority of task getting the msg         */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -