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

📄 os_wait.lst

📁 让Keil 的 RTX51 运行在 P89C669 让Keil 的 RTX51 运行在 P89C669
💻 LST
📖 第 1 页 / 共 2 页
字号:
AX51 MACRO ASSEMBLER  OS_WAIT                                                               11/21/05 17:35:21 PAGE     1


MACRO ASSEMBLER AX51 V3.01
OBJECT MODULE PLACED IN .\Keil\os_wait.obj
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\AX51.EXE OS\os_wait.A51 MOD_MX51 SET(SMALL) DEBUG PRINT(.\Keil\os_wait.lst) OBJECT
                      (.\Keil\os_wait.obj) EP

LOC    OBJ             LINE     SOURCE

                          1     ;------------------------------------------------------------------------------
                          2     ;  This file is part of the RTX-51 TINY Real-Time Operating System Package
                          3     ;  Copyright KEIL ELEKTRONIK GmbH and Keil Software, Inc.  1991 - 2002
                          4     ;------------------------------------------------------------------------------
                          5     ;
                          6     ;  OS_WAIT.A51:  This module contains the OS_WAIT function call.
                          7     ;
                          8     ;  RTX51 TINY VERSION 2
                          9     ;
                         10     ;------------------------------------------------------------------------------
                         11     
                         12     NAME    ?RTX51_TINY_OS_WAIT
                         13     
                         14     
                         15     ;$include (os_defines.inc)
                    +1   16     ;------------------------------------------------------------------------------
                    +1   17     ;
                    +1   18     ;  OS_DEFINES.INC:  Defines  (a)  External References for OS routines
                    +1   19     ;                            (b)  Bits in TaskState
                    +1   20     ;
                    +1   21     ;  RTX51 TINY VERSION 2.0
                    +1   22     ;
                    +1   23     ;------------------------------------------------------------------------------
                    +1   24     EXTRN   NUMBER (?RTX_RAMTOP)            ; top of RAM for stack
                    +1   25     EXTRN   DATA   (?RTX_CURRENTTASK)       ; current running task
                    +1   26     EXTRN   ECODE   (os_switch_task)         ; perform a task switch
                    +1   27     
                    +1   28     EXTRN   HCONST (TASK_ENTRY)
                    +1   29     EXTRN   NUMBER (?RTX_MAXTASKN)            ; top of RAM for stack
                    +1   30     
------              +1   31     ?RTX?TASKSTATE?S  SEGMENT IDATA         ; table of task states
------              +1   32     ?RTX?TASKSP?S     SEGMENT IDATA         ; table of task stack pointers
                    +1   33     
                    +1   34     
                    +1   35     
                    +1   36     ; Internal Status Bits of Task State
                    +1   37     ; Bits in TaskState:
                    +1   38     ;  TaskState.0  = Wait for Signal
                    +1   39     ;  TaskState.1  = Wait for TimeOut
                    +1   40     ;  TaskState.2  = Signal Flag
                    +1   41     ;  TaskState.3  = TimeOut Flag
                    +1   42     ;  TaskState.4  = Task Ready (Wait for Running)
                    +1   43     ;  TaskState.5  = Task Active (enabled with os_create)
                    +1   44     ;  TaskState.6  = Round Robin Time Out
                    +1   45     ;  TaskState.7  = Run Flag
                    +1   46     
                    +1   47     ; byte mask definitions
 0001               +1   48     K_SIG           EQU     1
 0002               +1   49     K_TMO           EQU     2
 0004               +1   50     SIG_EVENT       EQU     4
 0008               +1   51     TMO_EVENT       EQU     8
 0010               +1   52     K_READY         EQU     16
 0020               +1   53     K_ACTIVE        EQU     32
 0040               +1   54     K_ROBIN         EQU     64
 0080               +1   55     K_IVL           EQU     128  ; not a task state bit; only used in os_wait
 0080               +1   56     RDY_EVENT       EQU     128  ; READY status flag
 0080               +1   57     K_RDY           EQU     128  ; READY status flag
AX51 MACRO ASSEMBLER  OS_WAIT                                                               11/21/05 17:35:21 PAGE     2

                    +1   58     
                    +1   59     ; bit position definitions
 0000               +1   60     B_WAITSIG       EQU     0
 0001               +1   61     B_WAITTIM       EQU     1
 0002               +1   62     B_SIGNAL        EQU     2
 0003               +1   63     B_TIMEOUT       EQU     3
 0004               +1   64     B_READY         EQU     4
 0005               +1   65     B_ACTIVE        EQU     5
 0006               +1   66     B_ROBIN         EQU     6
 0007               +1   67     B_IVL           EQU     7    ; not a task state bit; only used in os_wait
 0007               +1   68     B_RDY           EQU     7    ; READY status flag
                    +1   69     
                    +1   70     
 00A8.7             +1   71     EA      BIT     0AFH
 00A8.1             +1   72     ET0     BIT     0A9H
                         73     
                         74     
                         75     PUBLIC _os_wait, _os_wait1, _os_wait2
                         76     
------                   77     ?RTX?CODE       SEGMENT ECODE
------                   78                     RSEG    ?RTX?CODE
                         79                     USING   0               ; Registerbank 0 for following code
                         80     ;
                         81     ;------------------------------------------------
                         82     ; os_wait function
                         83     ;
                         84     ;  os_wait (uchar typ, uchar timeout)  {
000000                   85     _os_wait:
000000                   86     _os_wait1:                      ; entry point for 1 parameter
000000                   87     _os_wait2:                      ; entry point for 2 parameters
                         88     ;---- Variable 'typ' assigned to Register 'B' ----
                         89     ;---- Variable 'timeout' assigned to Register 'R5' ----
                         90     ;---- Variable 'st' assigned to Register 'R7' ----
                         91     ;---- Variable 'twait' assigned to Register 'R6' ----
000000 8FF0              92                     MOV     B,R7
000002 E4                93                     CLR     A
                         94     ;    st = 0;
000003 FF                95                     MOV     R7,A
                         96     ;    twait = 0;
000004 FE                97                     MOV     R6,A
                         98     ;
000005 E500       E      99                     MOV     A,?RTX_CURRENTTASK
000007 23               100                     RL      A
000008 2400       F     101                     ADD     A,#?RTX?TASKSTATE?S
00000A F8               102                     MOV     R0,A
                        103     
00000B C2A9             104                     CLR     ET0
                        105     ;    if (typ & K_IVL)  {
00000D 30F70D           106                     JNB     B.B_IVL,??C0005
                        107     ;    st = TMO_EVENT;
000010 7F08             108                     MOV     R7,#TMO_EVENT
                        109     ;      STATE[current].timer += timeout;
000012 E6               110                     MOV     A,@R0
000013 600B             111                     JZ      SetTimeout
000015 2D               112                     ADD     A,R5
000016 F6               113                     MOV     @R0,A
                        114     ;      if (!CY)  {
000017 6034             115                     JZ      no_wait1        ; zero means no wait
000019 5032             116                     JNC     no_wait1        ; no overflow (6.12.2002)
00001B 8007             117                     SJMP    wait            ; overflow    (6.12.2002)
                        118                     
00001D 30F106           119     ??C0005:        JNB     B.B_WAITTIM,??C0007

⌨️ 快捷键说明

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