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

📄 os_core.ls1

📁 UCOS在51上的移植,绝对经典!可以较少开发人员的工作量
💻 LS1
📖 第 1 页 / 共 5 页
字号:

004B 33              789             RLC     A
004C 33              790             RLC     A
004D 54F8            791             ANL     A,#0F8H
004F FF              792             MOV     R7,A
0050 EE              793             MOV     A,R6
0051 2F              794             ADD     A,R7
0052 FF              795             MOV     R7,A
0053 900000   F      796             MOV     DPTR,#OSPrioHighRdy
0056 F0              797             MOVX    @DPTR,A
                     798     ;             if (OSPrioHighRdy != OSPrioCur) {              /* No Ctx Sw if current task i
                             s highest rdy */
                     799                             ; SOURCE LINE # 187
0057 900000   F      800             MOV     DPTR,#OSPrioCur
005A E0              801             MOVX    A,@DPTR
005B 6F              802             XRL     A,R7
005C 6036            803             JZ      ?C0007
                     804     ;                 OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];
                     805                             ; SOURCE LINE # 188
005E 900000   F      806             MOV     DPTR,#OSPrioHighRdy
0061 E0              807             MOVX    A,@DPTR
0062 75F003          808             MOV     B,#03H
0065 A4              809             MUL     AB
0066 2400     F      810             ADD     A,#LOW (OSTCBPrioTbl)
0068 F582            811             MOV     DPL,A
006A E4              812             CLR     A
006B 3400     F      813             ADDC    A,#HIGH (OSTCBPrioTbl)
006D F583            814             MOV     DPH,A
006F 120000   F      815             LCALL   ?C?PLDXDATA
0072 900000   F      816             MOV     DPTR,#OSTCBHighRdy
0075 120000   F      817             LCALL   ?C?PSTXDATA
                     818     ;                 OSCtxSwCtr++;                              /* Keep track of the number of
                              ctx switches */
                     819                             ; SOURCE LINE # 189
0078 900000   F      820             MOV     DPTR,#OSCtxSwCtr
007B 120000   F      821             LCALL   ?C?LLDXDATA
007E EF              822             MOV     A,R7
007F 2401            823             ADD     A,#01H
0081 FF              824             MOV     R7,A
0082 E4              825             CLR     A
0083 3E              826             ADDC    A,R6
0084 FE              827             MOV     R6,A
0085 E4              828             CLR     A
0086 3D              829             ADDC    A,R5
0087 FD              830             MOV     R5,A
0088 E4              831             CLR     A
0089 3C              832             ADDC    A,R4
008A FC              833             MOV     R4,A
008B 900000   F      834             MOV     DPTR,#OSCtxSwCtr
008E 120000   F      835             LCALL   ?C?LSTXDATA
                     836     ;                 OSIntCtxSw();                              /* Perform interrupt level ctx
                              switch       */
                     837                             ; SOURCE LINE # 190
0091 120000   F      838             LCALL   _?OSIntCtxSw
                     839     ;             }
                     840                             ; SOURCE LINE # 191
                     841     ;         }
                     842                             ; SOURCE LINE # 192
0094                 843     ?C0007:
                     844     ;         OS_EXIT_CRITICAL();
                     845                             ; SOURCE LINE # 193
0094 D2AF            846             SETB    EA
                     847     ;     }
                     848                             ; SOURCE LINE # 194
                     849     ; }
                     850                             ; SOURCE LINE # 195
0096                 851     ?C0009:
A51 MACRO ASSEMBLER  OS_CORE                                                              05/17/2005 11:19:50 PAGE    15

0096 22              852             RET     
                     853     ; END OF _?OSIntExit
                     854     
                     855     ; /*$PAGE*/
                     856     ; /*
                     857     ; *****************************************************************************************
                             ****************
                     858     ; *                                          PREVENT SCHEDULING
                     859     ; *
                     860     ; * Description: This function is used to prevent rescheduling to take place.  This allows 
                             your application
                     861     ; *              to prevent context switches until you are ready to permit context switchin
                             g.
                     862     ; *
                     863     ; * Arguments  : none
                     864     ; *
                     865     ; * Returns    : none
                     866     ; *
                     867     ; * Notes      : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair.  In other wo
                             rds, for every
                     868     ; *                 call to OSSchedLock() you MUST have a call to OSSchedUnlock().
                     869     ; *****************************************************************************************
                             ****************
                     870     ; */
                     871     ; 
                     872     ; #if OS_SCHED_LOCK_EN > 0
                     873     ; void  OSSchedLock (void) LG_REENTRANT
                     874     ; {
                     875     ; #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status regis
                             ter           */
                     876     ;     OS_CPU_SR  cpu_sr;
                     877     ; #endif    
                     878     ;     
                     879     ;     
                     880     ;     if (OSRunning == TRUE) {                     /* Make sure multitasking is running    
                                           */
                     881     ;         OS_ENTER_CRITICAL();
                     882     ;         if (OSLockNesting < 255) {               /* Prevent OSLockNesting from wrapping b
                             ack to 0      */
                     883     ;             OSLockNesting++;                     /* Increment lock nesting level         
                                           */
                     884     ;         }
                     885     ;         OS_EXIT_CRITICAL();
                     886     ;     }
                     887     ; }
                     888     ; #endif    
                     889     ; 
                     890     ; /*$PAGE*/
                     891     ; /*
                     892     ; *****************************************************************************************
                             ****************
                     893     ; *                                          ENABLE SCHEDULING
                     894     ; *
                     895     ; * Description: This function is used to re-allow rescheduling.
                     896     ; *
                     897     ; * Arguments  : none
                     898     ; *
                     899     ; * Returns    : none
                     900     ; *
                     901     ; * Notes      : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair.  In other wo
                             rds, for every
                     902     ; *                 call to OSSchedLock() you MUST have a call to OSSchedUnlock().
                     903     ; *****************************************************************************************
                             ****************
                     904     ; */
                     905     ; 
A51 MACRO ASSEMBLER  OS_CORE                                                              05/17/2005 11:19:50 PAGE    16

                     906     ; #if OS_SCHED_LOCK_EN > 0
                     907     ; void  OSSchedUnlock (void) LG_REENTRANT
                     908     ; {
                     909     ; #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU st
                             atus register */
                     910     ;     OS_CPU_SR  cpu_sr;
                     911     ; #endif    
                     912     ;     
                     913     ;     
                     914     ;     if (OSRunning == TRUE) {                                   /* Make sure multitasking 
                             is running    */
                     915     ;         OS_ENTER_CRITICAL();
                     916     ;         if (OSLockNesting > 0) {                               /* Do not decrement if alr
                             eady 0        */
                     917     ;             OSLockNesting--;                                   /* Decrement lock nesting 
                             level         */
                     918     ;             if ((OSLockNesting == 0) && (OSIntNesting == 0)) { /* See if sched. enabled a
                             nd not an ISR */
                     919     ;                 OS_EXIT_CRITICAL();
                     920     ;                 OS_Sched();                                    /* See if a HPT is ready  
                                           */
                     921     ;             } else {
                     922     ;                 OS_EXIT_CRITICAL();
                     923     ;             }
                     924     ;         } else {
                     925     ;             OS_EXIT_CRITICAL();
                     926     ;         }
                     927     ;     }
                     928     ; }
                     929     ; #endif    
                     930     ; 
                     931     ; /*$PAGE*/
                     932     ; /*
                     933     ; *****************************************************************************************
                             ****************
                     934     ; *                                          START MULTITASKING
                     935     ; *
                     936     ; * Description: This function is used to start the multitasking process which lets uC/OS-I
                             I manages the
                     937     ; *              task that you have created.  Before you can call OSStart(), you MUST have 
                             called OSInit()
                     938     ; *              and you MUST have created at least one task.
                     939     ; *
                     940     ; * Arguments  : none
                     941     ; *
                     942     ; * Returns    : none
                     943     ; *
                     944     ; * Note       : OSStartHighRdy() MUST:
                     945     ; *                 a) Call OSTaskSwHook() then,
                     946     ; *                 b) Set OSRunning to TRUE.
                     947     ; *                 c) Load the context of the task pointed to by OSTCBHighRdy.
                     948     ; *                 d_ Execute the task.
                     949     ; *****************************************************************************************
                             ****************
                     950     ; */
                     951     ; 
                     952     ; void  OSStart (void) LG_REENTRANT
                     953     
----                 954             RSEG  ?PR?_?OSStart?OS_CORE
0000                 955     _?OSStart:
                     956             USING   0
                     957                             ; SOURCE LINE # 293
0000 90FFFE          958             MOV     DPTR,#0FFFEH
0003 120000   F      959             LCALL   ?C?ADDXBP
                     960     ; {
                     961     ;     INT8U y;
A51 MACRO ASSEMBLER  OS_CORE                                                              05/17/2005 11:19:50 PAGE    17

                     962     ;     INT8U x;
                     963     ; 
                     964     ;     if (OSRunning == FALSE) {
                     965                             ; SOURCE LINE # 298
0006 20006A   F      966             JB      OSRunning,?C0011
                     967     ;         y             = OSUnMapTbl[OSRdyGrp];        /* Find highest priority's task prio
                             rity number   */
                     968                             ; SOURCE LINE # 299
0009 900000   F      969             MOV     DPTR,#OSRdyGrp
000C E0              970             MOVX    A,@DPTR
000D 2400     F      971             ADD     A,#LOW (OSUnMapTbl)
000F F582            972             MOV     DPL,A
0011 E4              973             CLR     A
0012 3400     F      974             ADDC    A,#HIGH (OSUnMapTbl)
0014 F583            975      

⌨️ 快捷键说明

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