os_core.ls1

来自「在51单片机上移植成功的UCOS-II操作系统源代码,包括源代码及相关注释」· LS1 代码 · 共 1,120 行 · 第 1/5 页

LS1
1,120
字号
                     603     ; *
                     604     ; * Note       : This function is INTERNAL to uC/OS-II and your application should not call
                              it.
                     605     ; *****************************************************************************************
                             ****************
                     606     ; */
                     607     ; #if  (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_EN
A51 MACRO ASSEMBLER  OS_CORE                                                              09/09/2007 21:12:24 PAGE    11

                     608     ; void  OSEventTO (OS_EVENT *pevent) reentrant
                     609     ; {
                     610     ;     if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
                     611     ;         pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
                     612     ;     }
                     613     ;     OSTCBCur->OSTCBStat     = OS_STAT_RDY;       /* Set status to ready                  
                                           */
                     614     ;     OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;     /* No longer waiting for event          
                                           */
                     615     ; }
                     616     ; #endif
                     617     ; /*$PAGE*/
                     618     ; /*
                     619     ; *****************************************************************************************
                             ****************
                     620     ; *                                 INITIALIZE EVENT CONTROL BLOCK'S WAIT LIST
                     621     ; *
                     622     ; * Description: This function is called by other uC/OS-II services to initialize the event
                              wait list.
                     623     ; *
                     624     ; * Arguments  : pevent    is a pointer to the event control block allocated to the event.
                     625     ; *
                     626     ; * Returns    : none
                     627     ; *
                     628     ; * Note       : This function is INTERNAL to uC/OS-II and your application should not call
                              it.
                     629     ; *****************************************************************************************
                             ****************
                     630     ; */
                     631     ; #if  (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_EN
                     632     ; void  OSEventWaitListInit (OS_EVENT *pevent) reentrant
                     633     ; {
                     634     ;     INT8U i;
                     635     ;     
                     636     ;     
                     637     ;     pevent->OSEventGrp = 0x00;                   /* No task waiting on event             
                                           */
                     638     ;     for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
                     639     ;         pevent->OSEventTbl[i] = 0x00;
                     640     ;     }
                     641     ; }
                     642     ; #endif
                     643     ; /*$PAGE*/
                     644     ; /*
                     645     ; *****************************************************************************************
                             ****************
                     646     ; *                                             INITIALIZATION
                     647     ; *
                     648     ; * Description: This function is used to initialize the internals of uC/OS-II and MUST be 
                             called prior to
                     649     ; *              creating any uC/OS-II object and, prior to calling OSStart().
                     650     ; *
                     651     ; * Arguments  : none
                     652     ; *
                     653     ; * Returns    : none
                     654     ; *****************************************************************************************
                             ****************
                     655     ; */
                     656     ; 
                     657     ; void OSInit (void) reentrant
                     658     
----                 659             RSEG  ?PR?_?OSInit?OS_CORE
0000                 660     _?OSInit:
                     661             USING   0
                     662                             ; SOURCE LINE # 225
0000 90FFFE          663             MOV     DPTR,#0FFFEH
A51 MACRO ASSEMBLER  OS_CORE                                                              09/09/2007 21:12:24 PAGE    12

0003 120000   F      664             LCALL   ?C?ADDXBP
                     665     ; {
                     666     ;     INT16U i;
                     667     ; 
                     668     ; 
                     669     ;     OSTime        = 0L;                                    /* Clear the 32-bit system clo
                             ck            */
                     670                             ; SOURCE LINE # 230
0006 900000   F      671             MOV     DPTR,#OSTime
0009 120000   F      672             LCALL   ?C?LSTKXDATA
000C 00              673             DB      00H
000D 00              674             DB      00H
000E 00              675             DB      00H
000F 00              676             DB      00H
                     677     ;     OSIntNesting  = 0;                                     /* Clear the interrupt nesting
                              counter      */
                     678                             ; SOURCE LINE # 231
0010 E4              679             CLR     A
0011 900000   F      680             MOV     DPTR,#OSIntNesting
0014 F0              681             MOVX    @DPTR,A
                     682     ;     OSLockNesting = 0;                                     /* Clear the scheduling lock c
                             ounter        */
                     683                             ; SOURCE LINE # 232
0015 900000   F      684             MOV     DPTR,#OSLockNesting
0018 F0              685             MOVX    @DPTR,A
                     686     ; #if OS_TASK_CREATE_EN  || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN
                     687     ;     OSTaskCtr     = 0;                                     /* Clear the number of tasks  
                                           */
                     688                             ; SOURCE LINE # 234
0019 900000   F      689             MOV     DPTR,#OSTaskCtr
001C F0              690             MOVX    @DPTR,A
                     691     ; #endif
                     692     ;     OSRunning     = FALSE;                                 /* Indicate that multitasking 
                             not started   */
                     693                             ; SOURCE LINE # 236
001D 7800     F      694             MOV     R0,#LOW (OSRunning)
001F F6              695             MOV     @R0,A
                     696     ;     OSIdleCtr     = 0L;                                    /* Clear the 32-bit idle count
                             er            */
                     697                             ; SOURCE LINE # 237
0020 900000   F      698             MOV     DPTR,#OSIdleCtr
0023 120000   F      699             LCALL   ?C?LSTKXDATA
0026 00              700             DB      00H
0027 00              701             DB      00H
0028 00              702             DB      00H
0029 00              703             DB      00H
                     704     ; #if OS_TASK_STAT_EN && OS_TASK_CREATE_EXT_EN
                     705     ;     OSIdleCtrRun  = 0L;
                     706     ;     OSIdleCtrMax  = 0L;
                     707     ;     OSStatRdy     = FALSE;                                 /* Statistic task is not ready
                                           */
                     708     ; #endif
                     709     ;     OSCtxSwCtr    = 0;                                     /* Clear the context switch co
                             unter         */
                     710                             ; SOURCE LINE # 243
002A 900000   F      711             MOV     DPTR,#OSCtxSwCtr
002D 120000   F      712             LCALL   ?C?LSTKXDATA
0030 00              713             DB      00H
0031 00              714             DB      00H
0032 00              715             DB      00H
0033 00              716             DB      00H
                     717     ;     OSRdyGrp      = 0;                                     /* Clear the ready list       
                                           */
                     718                             ; SOURCE LINE # 244
0034 E4              719             CLR     A
0035 900000   F      720             MOV     DPTR,#OSRdyGrp
A51 MACRO ASSEMBLER  OS_CORE                                                              09/09/2007 21:12:24 PAGE    13

0038 F0              721             MOVX    @DPTR,A
                     722     ;     for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
                     723                             ; SOURCE LINE # 245
0039 850083   F      724             MOV     DPH,?C_XBP
003C 850082   F      725             MOV     DPL,?C_XBP+01H
003F F0              726             MOVX    @DPTR,A
0040 A3              727             INC     DPTR
0041 F0              728             MOVX    @DPTR,A
0042                 729     ?C0001:
0042 850083   F      730             MOV     DPH,?C_XBP
0045 850082   F      731             MOV     DPL,?C_XBP+01H
0048 E0              732             MOVX    A,@DPTR
0049 FE              733             MOV     R6,A
004A A3              734             INC     DPTR
004B E0              735             MOVX    A,@DPTR
004C FF              736             MOV     R7,A
004D C3              737             CLR     C
004E 9404            738             SUBB    A,#04H
0050 EE              739             MOV     A,R6
0051 9400            740             SUBB    A,#00H
0053 501A            741             JNC     ?C0002
                     742     ;         OSRdyTbl[i] = 0;
                     743                             ; SOURCE LINE # 246
0055 7400     F      744             MOV     A,#LOW (OSRdyTbl)
0057 2F              745             ADD     A,R7
0058 F582            746             MOV     DPL,A
005A E4              747             CLR     A
005B 3400     F      748             ADDC    A,#HIGH (OSRdyTbl)
005D F583            749             MOV     DPH,A
005F E4              750             CLR     A
0060 F0              751             MOVX    @DPTR,A
                     752     ;     }
                     753                             ; SOURCE LINE # 247
0061 850083   F      754             MOV     DPH,?C_XBP
0064 850082   F      755             MOV     DPL,?C_XBP+01H
0067 75F001          756             MOV     B,#01H
006A 120000   F      757             LCALL   ?C?IILDX
006D 80D3            758             SJMP    ?C0001
006F                 759     ?C0002:
                     760     ;                 
                     761     ;     OSPrioCur     = 0;
                     762                             ; SOURCE LINE # 249
006F E4              763             CLR     A
0070 7800     F      764             MOV     R0,#LOW (OSPrioCur)
0072 F6              765             MOV     @R0,A
                     766     ;     OSPrioHighRdy = 0;                                           
                     767                             ; SOURCE LINE # 250
0073 08              768             INC     R0
0074 F6              769             MOV     @R0,A
                     770     ;     OSTCBHighRdy  = (OS_TCB *)0;                                 /* TCB Initialization   
                                           */
                     771                             ; SOURCE LINE # 251
0075 7800     F      772             MOV     R0,#LOW (OSTCBHighRdy)
0077 F6              773             MOV     @R0,A
0078 08              774             INC     R0
0079 F6              775             MOV     @R0,A
007A 08              776             INC     R0
007B F6              777             MOV     @R0,A
                     778     ;     OSTCBCur      = (OS_TCB *)0;
                     779                             ; SOURCE LINE # 252
007C 7800     F      780             MOV     R0,#LOW (OSTCBCur)
007E F6              781             MOV     @R0,A
007F 08              782             INC     R0
0080 F6              783             MOV     @R0,A
0081 08              784             INC     R0
0082 F6              785             MOV     @R0,A
A51 MACRO ASSEMBLER  OS_CORE                                                              09/09/2007 21:12:24 PAGE    14

                     786     ;     OSTCBList     = (OS_TCB *)0;
                     787                             ; SOURCE LINE # 253
0083 F9              788             MOV     R1,A
0084 900000   F      789             MOV     DPTR,#OSTCBList
0087 C9              790             XCH     A,R1
0088 F0              791             MOVX    @DPTR,A
0089 A3              792             INC     DPTR
008A F0              793             MOVX    @DPTR,A
008B A3              794             INC     DPTR
008C E9              795             MOV     A,R1
008D F0              796             MOVX    @DPTR,A

⌨️ 快捷键说明

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