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

📄 os_core.ls1

📁 uCOS-II_2.52在51上的移植程序
💻 LS1
📖 第 1 页 / 共 5 页
字号:
0077 E0              797             MOVX    A,@DPTR
0078 7800     F      798             MOV     R0,#LOW (OSTCBHighRdy)
007A A603            799             MOV     @R0,AR3
007C 08              800             INC     R0
007D A602            801             MOV     @R0,AR2
007F 08              802             INC     R0
0080 F6              803             MOV     @R0,A
                     804     ;                 OSCtxSwCtr++;                              /* Keep track of the number of
                              ctx switches */
                     805                             ; SOURCE LINE # 187
0081 900000   F      806             MOV     DPTR,#OSCtxSwCtr
0084 E0              807             MOVX    A,@DPTR
0085 FC              808             MOV     R4,A
0086 A3              809             INC     DPTR
0087 E0              810             MOVX    A,@DPTR
0088 FD              811             MOV     R5,A
0089 A3              812             INC     DPTR
008A E0              813             MOVX    A,@DPTR
008B FE              814             MOV     R6,A
008C A3              815             INC     DPTR
008D E0              816             MOVX    A,@DPTR
008E 2401            817             ADD     A,#01H
0090 FF              818             MOV     R7,A
0091 E4              819             CLR     A
0092 3E              820             ADDC    A,R6
0093 FE              821             MOV     R6,A
0094 E4              822             CLR     A
0095 3D              823             ADDC    A,R5
0096 FD              824             MOV     R5,A
0097 E4              825             CLR     A
0098 3C              826             ADDC    A,R4
0099 FC              827             MOV     R4,A
009A 900000   F      828             MOV     DPTR,#OSCtxSwCtr
009D 120000   F      829             LCALL   ?C?LSTXDATA
                     830     ;                 OSIntCtxSw();                              /* Perform interrupt level ctx
                              switch       */
                     831                             ; SOURCE LINE # 188
00A0 120000   F      832             LCALL   OSIntCtxSw
                     833     ;             }
                     834                             ; SOURCE LINE # 189
                     835     ;         }
                     836                             ; SOURCE LINE # 190
00A3                 837     ?C0007:
                     838     ;         OS_EXIT_CRITICAL();
                     839                             ; SOURCE LINE # 191
00A3 D2AF            840             SETB    EA
                     841     ;     }
                     842                             ; SOURCE LINE # 192
                     843     ; }
                     844                             ; SOURCE LINE # 193
00A5                 845     ?C0009:
00A5 22              846             RET     
                     847     ; END OF _?OSIntExit
                     848     
                     849     ; /*$PAGE*/
                     850     ; /*
                     851     ; *****************************************************************************************
                             ****************
                     852     ; *                                          PREVENT SCHEDULING
A51 MACRO ASSEMBLER  OS_CORE                                                              08/08/2005 12:35:32 PAGE    15

                     853     ; *
                     854     ; * Description: This function is used to prevent rescheduling to take place.  This allows 
                             your application
                     855     ; *              to prevent context switches until you are ready to permit context switchin
                             g.
                     856     ; *
                     857     ; * Arguments  : none
                     858     ; *
                     859     ; * Returns    : none
                     860     ; *
                     861     ; * Notes      : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair.  In other wo
                             rds, for every
                     862     ; *                 call to OSSchedLock() you MUST have a call to OSSchedUnlock().
                     863     ; *****************************************************************************************
                             ****************
                     864     ; */
                     865     ; 
                     866     ; #if OS_SCHED_LOCK_EN > 0
                     867     ; void  OSSchedLock (void) reentrant
                     868     
----                 869             RSEG  ?PR?_?OSSchedLock?OS_CORE
0000                 870     _?OSSchedLock:
                     871             USING   0
                     872                             ; SOURCE LINE # 212
                     873     ; {
                     874     ; 
                     875     ;     
                     876     ;     
                     877     ;     if (OSRunning == TRUE) {                     /* Make sure multitasking is running    
                                           */
                     878                             ; SOURCE LINE # 217
0000 7800     F      879             MOV     R0,#LOW (OSRunning)
0002 E6              880             MOV     A,@R0
0003 B40110          881             CJNE    A,#01H,?C0012
                     882     ;         OS_ENTER_CRITICAL();
                     883                             ; SOURCE LINE # 218
0006 C2AF            884             CLR     EA
                     885     ;         if (OSLockNesting < 255) {               /* Prevent OSLockNesting from wrapping b
                             ack to 0      */
                     886                             ; SOURCE LINE # 219
0008 900000   F      887             MOV     DPTR,#OSLockNesting
000B E0              888             MOVX    A,@DPTR
000C C3              889             CLR     C
000D 94FF            890             SUBB    A,#0FFH
000F 5003            891             JNC     ?C0011
                     892     ;             OSLockNesting++;                     /* Increment lock nesting level         
                                           */
                     893                             ; SOURCE LINE # 220
0011 E0              894             MOVX    A,@DPTR
0012 04              895             INC     A
0013 F0              896             MOVX    @DPTR,A
                     897     ;         }
                     898                             ; SOURCE LINE # 221
0014                 899     ?C0011:
                     900     ;         OS_EXIT_CRITICAL();
                     901                             ; SOURCE LINE # 222
0014 D2AF            902             SETB    EA
                     903     ;     }
                     904                             ; SOURCE LINE # 223
                     905     ; }
                     906                             ; SOURCE LINE # 224
0016                 907     ?C0012:
0016 22              908             RET     
                     909     ; END OF _?OSSchedLock
                     910     
                     911     ; #endif    
A51 MACRO ASSEMBLER  OS_CORE                                                              08/08/2005 12:35:32 PAGE    16

                     912     ; 
                     913     ; /*$PAGE*/
                     914     ; /*
                     915     ; *****************************************************************************************
                             ****************
                     916     ; *                                          ENABLE SCHEDULING
                     917     ; *
                     918     ; * Description: This function is used to re-allow rescheduling.
                     919     ; *
                     920     ; * Arguments  : none
                     921     ; *
                     922     ; * Returns    : none
                     923     ; *
                     924     ; * Notes      : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair.  In other wo
                             rds, for every
                     925     ; *                 call to OSSchedLock() you MUST have a call to OSSchedUnlock().
                     926     ; *****************************************************************************************
                             ****************
                     927     ; */
                     928     ; 
                     929     ; #if OS_SCHED_LOCK_EN > 0
                     930     ; void  OSSchedUnlock (void) reentrant
                     931     
----                 932             RSEG  ?PR?_?OSSchedUnlock?OS_CORE
0000                 933     _?OSSchedUnlock:
                     934             USING   0
                     935                             ; SOURCE LINE # 244
                     936     ; {
                     937     ; 
                     938     ;     
                     939     ;     if (OSRunning == TRUE) {                                   /* Make sure multitasking 
                             is running    */
                     940                             ; SOURCE LINE # 248
0000 7800     F      941             MOV     R0,#LOW (OSRunning)
0002 E6              942             MOV     A,@R0
0003 6401            943             XRL     A,#01H
0005 7021            944             JNZ     ?C0018
                     945     ;         OS_ENTER_CRITICAL();
                     946                             ; SOURCE LINE # 249
0007 C2AF            947             CLR     EA
                     948     ;         if (OSLockNesting > 0) {                               /* Do not decrement if alr
                             eady 0        */
                     949                             ; SOURCE LINE # 250
0009 900000   F      950             MOV     DPTR,#OSLockNesting
000C E0              951             MOVX    A,@DPTR
000D D3              952             SETB    C
000E 9400            953             SUBB    A,#00H
0010 4014            954             JC      ?C0014
                     955     ;             OSLockNesting--;                                   /* Decrement lock nesting 
                             level         */
                     956                             ; SOURCE LINE # 251
0012 E0              957             MOVX    A,@DPTR
0013 14              958             DEC     A
0014 F0              959             MOVX    @DPTR,A
                     960     ;             if ((OSLockNesting == 0) && (OSIntNesting == 0)) { /* See if sched. enabled a
                             nd not an ISR */
                     961                             ; SOURCE LINE # 252
0015 E0              962             MOVX    A,@DPTR
0016 700B            963             JNZ     ?C0015
0018 900000   F      964             MOV     DPTR,#OSIntNesting
001B E0              965             MOVX    A,@DPTR
001C 7005            966             JNZ     ?C0015
                     967     ;                 OS_EXIT_CRITICAL();
                     968                             ; SOURCE LINE # 253
001E D2AF            969             SETB    EA
                     970     ;                 OS_Sched();                                    /* See if a HPT is ready  
A51 MACRO ASSEMBLER  OS_CORE                                                              08/08/2005 12:35:32 PAGE    17

                                           */
                     971                             ; SOURCE LINE # 254
0020 020000   F      972             LJMP    OS_Sched
                     973     ;             } else {
                     974                             ; SOURCE LINE # 255
0023                 975     ?C0015:
                     976     ;                 OS_EXIT_CRITICAL();
                     977                             ; SOURCE LINE # 256
0023 D2AF            978             SETB    EA
                     979     ;             }
                     980                             ; SOURCE LINE # 257
                     981     ;         } else {
                     982                             ; SOURCE LINE # 258
0025 22              983             RET     
0026                 984     ?C0014:
                     985     ;             OS_EXIT_CRITICAL();
                     986                             ; SOURCE LINE # 259
0026 D2AF            987             SETB    EA
                     988     ;         }
                     989                             ; SOURCE LINE # 260
                     990     ;     }
                     991                             ; SOURCE LINE # 261
                     992     ; }
                     993                             ; SOURCE LI

⌨️ 快捷键说明

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