?? rtx51tny.lst
字號:
A51 MACRO ASSEMBLER RTX51TNY 04/22/2006 15:06:57 PAGE 1
MACRO ASSEMBLER A51 V6.23
OBJECT MODULE PLACED IN .\RTX51TNY.obj
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE C:\Keil\C51\RTX_TINY\RTX51TNY.A51 SET(LARGE) DEBUG PRINT(.\RTX51TNY.lst) O
BJECT(.\RTX51TNY.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 1991 - 1994
4 ;------------------------------------------------------------------------------
5 ;
6 ; RTX51TNY.A51: This module contains all RTX-51 TINY function calls.
7 ;
8 ; RTX51 TINY VERSION 1.06
9 ;
10 ;------------------------------------------------------------------------------
11
12 NAME ?RTX51_TINY
13
14 PUBLIC ?RTX_TASKSP
15 PUBLIC ?RTX_TASKSTATUS
16 PUBLIC ?RTX_TASKENTRY
17
18 PUBLIC ?RTX_NEXTTASK
19 PUBLIC ?RTX_NEXTID
20 PUBLIC ?RTX_TASKIDX
21 PUBLIC ?RTX_TS_REQ
22 PUBLIC ?RTX_TS_DELAY
23 PUBLIC ?RTX_TASKSWITCHING
24
25 PUBLIC _OS_CREATE_TASK
26 PUBLIC _OS_WAIT
27 PUBLIC _OS_WAIT1
28 PUBLIC _OS_WAIT2
29 PUBLIC _OS_SEND_SIGNAL
30 PUBLIC _ISR_SEND_SIGNAL
31 PUBLIC _OS_CLEAR_SIGNAL
32 PUBLIC _OS_DELETE_TASK
33 PUBLIC OS_RUNNING_TASK_ID
34
35 EXTRN NUMBER (?RTX_MAXTASKN) ; max Task Number
36 EXTRN NUMBER (?RTX_TIMESHARING) ; Round Robin Enable & Time Out
37 EXTRN NUMBER (?RTX_REGISTERBANK)
38 EXTRN NUMBER (?RTX_RAMTOP)
39 EXTRN NUMBER (?RTX_CLOCK)
40 EXTRN NUMBER (?RTX_FREESTACK)
41
42 EXTRN CODE (?RTX_STACKERROR)
43
44 EXTRN DATA (?RTX_CURRENTTASK)
45 EXTRN DATA (?RTX_ROBINTIME)
46 EXTRN DATA (?RTX_SAVEACC)
47 EXTRN DATA (?RTX_SAVEPSW)
48
REG 49 saveacc EQU R2
REG 50 savepsw EQU R3
REG 51 robintime EQU R4
REG 52 currenttask EQU R5
53
54
55 ?RTX?TASKENT?S SEGMENT CODE ; Segment with Task Entries
---- 56 RSEG ?RTX?TASKENT?S
0000 57 ?RTX_TASKENTRY: DS 2
A51 MACRO ASSEMBLER RTX51TNY 04/22/2006 15:06:57 PAGE 2
58
59 ?RTX?TASKSP?S SEGMENT IDATA
---- 60 RSEG ?RTX?TASKSP?S
0000 61 ?RTX_TASKSP: DS 1 ; Reserve Space for Stack Pointer
62
63 ?RTX?TASKSTATE?S SEGMENT IDATA
---- 64 RSEG ?RTX?TASKSTATE?S
0000 65 ?RTX_TASKSTATUS:
0000 66 TimerVal: DS 1 ; Reserve Space for Timer
0001 67 TaskState: DS 1
68 ; Bits in TaskState:
69 ; TaskState.0 = Wait for Signal
70 ; TaskState.1 = Wait for TimeOut
71 ; TaskState.2 = Signal Flag
72 ; TaskState.3 = TimeOut Flag
73 ; TaskState.4 = Task Ready (Wait for Running)
74 ; TaskState.5 = Task Active (enabled with os_create)
75 ; TaskState.6 = Round Robin Time Out
76
0001 77 K_SIG EQU 1
0002 78 K_TMO EQU 2
0004 79 SIG_EVENT EQU 4
0008 80 TMO_EVENT EQU 8
0010 81 K_READY EQU 16
0020 82 K_ACTIVE EQU 32
0040 83 K_ROBIN EQU 64
0080 84 K_IVL EQU 128
85
0000 86 B_WAITSIG EQU 0
0001 87 B_WAITTIM EQU 1
0002 88 B_SIGNAL EQU 2
0003 89 B_TIMEOUT EQU 3
0004 90 B_READY EQU 4
0005 91 B_ACTIVE EQU 5
0006 92 B_ROBIN EQU 6
0007 93 B_INTERVAL EQU 7
94
95 ?RTX?BITS SEGMENT BIT
96
---- 97 RSEG ?RTX?BITS
0000 98 ?RTX_TS_DELAY: DBIT 1
0001 99 ?RTX_TS_REQ: DBIT 1
100
---- 101 CSEG AT 0BH
000B 020000 F 102 JMP TIMERINT
103
104 ?RTX?CODE SEGMENT CODE
105
---- 106 RSEG ?RTX?CODE
107
0000 32 108 RETINT: RETI
109
0001 EA 110 NoTimeSharing: MOV A,saveacc
0002 8BD0 111 MOV PSW,savepsw
0004 22 112 RET
113
0005 120000 F 114 TIMERINT: CALL RETINT ; Enable Interrupts again.
0008 85D000 F 115 MOV ?RTX_SAVEPSW,PSW
000B 75D000 F 116 MOV PSW,#?RTX_REGISTERBANK
000E FA 117 MOV saveacc,A
118 ; Update Timer
000F C28C 119 CLR TR0
0011 E58A 120 MOV A,TL0
0013 2400 F 121 ADD A,#LOW (?RTX_CLOCK + 7)
0015 F58A 122 MOV TL0,A
0017 E58C 123 MOV A,TH0
A51 MACRO ASSEMBLER RTX51TNY 04/22/2006 15:06:57 PAGE 3
0019 3400 F 124 ADDC A,#HIGH (?RTX_CLOCK + 7)
001B F58C 125 MOV TH0,A
001D D28C 126 SETB TR0
127 ; Check Stack
001F ED 128 MOV A,currenttask
0020 2400 F 129 ADD A,#?RTX?TASKSP?S+1
0022 F8 130 MOV R0,A
0023 E6 131 MOV A,@R0
0024 BD0002 F 132 CJNE currenttask,#?RTX_MAXTASKN,checkstack
0027 7400 F 133 MOV A,#?RTX_RAMTOP
0029 C3 134 checkstack: CLR C
002A 9581 135 SUBB A,SP
002C B40000 F 136 CJNE A,#?RTX_FREESTACK,$+3
002F 5003 137 JNC checkstack2
0031 020000 F 138 LJMP ?RTX_STACKERROR
0034 139 checkstack2:
140
141 ; Update & Check Task Timers
0034 7900 F 142 MOV R1,#?RTX_MAXTASKN+1
0036 7800 F 143 MOV R0,#?RTX?TASKSTATE?S
0038 16 144 TIMERLOOP: DEC @R0
0039 E6 145 MOV A,@R0
003A C2D5 146 CLR F0
003C 7002 147 JNZ NoTimeOut
003E D2D5 148 SETB F0
0040 08 149 NoTimeOut: INC R0 ; advance to TaskState
0041 C2AF 150 CLR EA
0043 E6 151 MOV A,@R0
0044 30E106 152 JNB ACC.B_WAITTIM,NoWaitTimeout
0047 30D503 153 JNB F0,NoWaitTimeOut
004A 4418 154 ORL A,#(K_READY+TMO_EVENT)
004C F6 155 MOV @R0,A
004D D2AF 156 NoWaitTimeout: SETB EA
004F 08 157 INC R0
0050 D9E6 158 DJNZ R1,TIMERLOOP
159
160 ; Check Round Robin Timeout
161
0052 7400 F 162 MOV A,#LOW ?RTX_TIMESHARING
0054 60AB 163 JZ NoTimeSharing
0056 ED 164 MOV A,currenttask
0057 23 165 RL A
0058 2400 F 166 ADD A,#?RTX?TASKSTATE?S
005A F8 167 MOV R0,A
005B E6 168 MOV A,@R0
005C B500A2 F 169 CJNE A,?RTX_ROBINTIME,NoTimeSharing
005F EA 170 MOV A,saveacc
0060 8BD0 171 MOV PSW,savepsw
0062 300003 F 172 JNB ?RTX_TS_DELAY,?RTX_TASKSWITCHING
0065 D200 F 173 ts_request: SETB ?RTX_TS_REQ
0067 22 174 RET
175
176 USING 0 ; Registerbank 0 for following code
0068 177 ?RTX_TASKSWITCHING:
0068 C0E0 178 PUSH ACC
006A C0D0 179 PUSH PSW
006C C0F0 180 PUSH B
006E C083 181 PUSH DPH
0070 C082 182 PUSH DPL
0072 C000 183 PUSH AR0
0074 C001 184 PUSH AR1
0076 C002 185 PUSH AR2
0078 C003 186 PUSH AR3
007A C004 187 PUSH AR4
007C C005 188 PUSH AR5
007E C006 189 PUSH AR6
A51 MACRO ASSEMBLER RTX51TNY 04/22/2006 15:06:57 PAGE 4
0080 C007 190 PUSH AR7
0082 E500 F 191 MOV A,?RTX_CURRENTTASK
0084 23 192 RL A
0085 2400 F 193 ADD A,#?RTX?TASKSTATE?S+1
0087 F8 194 MOV R0,A
0088 C2AF 195 CLR EA
008A E6 196 MOV A,@R0
008B 4440 197 ORL A,#K_ROBIN
008D F6 198 MOV @R0,A
008E D2AF 199 SETB EA
200
201 ; Perform a Task-Switch
0090 202 SwitchNow:
203 ; switchnow () {
204 ; uchar i;
205 ; uchar limit;
206
207 ;---- Variable 'current' assigned to Register 'R6' ----
208 ;---- Variable 'next' assigned to Register 'R7' ----
209 ;---- Variable 'i' assigned to Register 'R0' ----
210 ;---- Variable 'limit' assigned to Register 'R5' ----
211 ;
212 ; next = current;
0090 D200 F 213 SETB ?RTX_TS_DELAY ; Delay Task Switching
0092 E500 F 214 MOV A,?RTX_CURRENTTASK
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -