📄 os_cpu_a.lst
字号:
0074 9810 151 MOV R1,[R0+] ; Restore DPP3
0076 F6F106FE 152 MOV DPP3,R1 ;
007A 9810 153 MOV R1,[R0+] ; Restore CP
007C F6F110FE 154 MOV CP,R1 ;
0080 CC00 155 NOP
0082 98F0 156 MOV R15,[R0+] ; Restore R15
0084 98E0 157 MOV R14,[R0+] ; Restore R14
0086 98D0 158 MOV R13,[R0+] ; Restore R13
0088 98C0 159 MOV R12,[R0+] ; Restore R12
008A 98B0 160 MOV R11,[R0+] ; Restore R11
008C 98A0 161 MOV R10,[R0+] ; Restore R10
008E 9890 162 MOV R9,[R0+] ; Restore R9
0090 9880 163 MOV R8,[R0+] ; Restore R8
0092 9870 164 MOV R7,[R0+] ; Restore R7
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc. Date: Dec 5 2000 Time: 10:02:43 Page: 4
os_cpu_a
LOC CODE LINE SOURCELINE
0094 9860 165 MOV R6,[R0+] ; Restore R6
0096 9850 166 MOV R5,[R0+] ; Restore R5
0098 9840 167 MOV R4,[R0+] ; Restore R4
009A 9830 168 MOV R3,[R0+] ; Restore R3
009C 9820 169 MOV R2,[R0+] ; Restore R2
009E 9810 170 MOV R1,[R0+] ; Restore R1; Restore context.
171
00A0 BF88 172 BSET IEN ; Enable interrupts
00A2 DB00 173 RETS ; Execute Task
174
175 _OSStartHighRdy ENDP
176 UCOS_C16X ENDS
177
178
179 ;********************************************************************************************************
180 ; PERFORM A CONTEXT SWITCH (From task level)
181 ; void OSCtxSw(void)
182 ;
183 ; Note(s): 1) Upon entry,
184 ; OSTCBCur points to the OS_TCB of the task to suspend
185 ; OSTCBHighRdy points to the OS_TCB of the task to resume
186 ;
187 ; 2) The system stack frame of the task to suspend looks as follows:
188 ; SYSTEM STACK AREA
189 ; SP -> +00 OFFSET of task to suspend (Low memory)
190 ; +02 SEGMENT of task to suspend
191 ; +04 PSW of task to suspend (High memory)
192 ;
193 ; 3) The user stack frame of the task to resume looks as follows:
194 ;
195 ; TASK STACK AREA (High Memory)
196 ; +12 TASK DATA PARAMETER PAGE pointer of task
197 ; +10 TASK DATA PARAMETER OFFSET pointer of task
198 ; +0E SEGMENT of task code address
199 ; +0C OFFSET of task code address
200 ; +0A USER STACK OFFSET POINTER (R0) of task
201 ; +08 USER STACK PAGE POINTER (DPP1) of task
202 ; +06 PSW flags of task
203 ; +04 OFFSET of task return address
204 ; 02 SEGMENT of task return address
205 ; OSTCBHighRdy->OSTCBStkPtr --> 0
206 ; -02 R[1 ..15] General Purpose registers of task
207 ; -20 CP Context pointer of task
208 ; -22 DPP3 Data page pointer 3 of task
209 ; -24 DPP2 Data page pointer 2 of task
210 ; -26 DPP0 Data page pointer 0 of task
211 ; -28 MDC Multiply/Divide Control of task
212 ; -2A MDH Multiply/Divide High register of task
213 ; -2C MDL Multiply/Divide Low register of task (Low Memory)
214 ;********************************************************************************************************
215
216 UCOS_C16X SECTION CODE
217 _OSCtxSw PROC TASK UCOS_OSCtxSw INTNO=50h
218
00A4 BE88 219 BCLR IEN ; Disable interrupts
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc. Date: Dec 5 2000 Time: 10:02:43 Page: 5
os_cpu_a
LOC CODE LINE SOURCELINE
220
221 ; Total execution time : xx states.
00A6 8810 222 MOV [-R0],R1 ; Save R1
00A8 8820 223 MOV [-R0],R2 ; Save R2
00AA 8830 224 MOV [-R0],R3 ; Save R3
00AC 8840 225 MOV [-R0],R4 ; Save R4
00AE 8850 226 MOV [-R0],R5 ; Save R5
00B0 8860 227 MOV [-R0],R6 ; Save R6
00B2 8870 228 MOV [-R0],R7 ; Save R7
00B4 8880 229 MOV [-R0],R8 ; Save R8
00B6 8890 230 MOV [-R0],R9 ; Save R9
00B8 88A0 231 MOV [-R0],R10 ; Save R10
00BA 88B0 232 MOV [-R0],R11 ; Save R11
00BC 88C0 233 MOV [-R0],R12 ; Save R12
00BE 88D0 234 MOV [-R0],R13 ; Save R13
00C0 88E0 235 MOV [-R0],R14 ; Save R14
00C2 88F0 236 MOV [-R0],R15 ; Save R15
237
00C4 F2F410FE 238 MOV R4,CP ; Get Context Pointer (CP)
00C8 8840 239 MOV [-R0],R4 ; Put it on the user stack
00CA F2F406FE 240 MOV R4,DPP3 ; Get Data Page Pointer 3 (DPP3)
00CE 8840 241 MOV [-R0],R4 ; Put it on the user stack
00D0 F2F404FE 242 MOV R4,DPP2 ; Get Data Page Pointer 2 (DPP2)
00D4 8840 243 MOV [-R0],R4 ; Put it on the user stack
00D6 F2F400FE 244 MOV R4,DPP0 ; Get Data Page Pointer 0 (DPP0)
00DA 8840 245 MOV [-R0],R4 ; Put it on the user stack
00DC F2F40EFF 246 MOV R4,MDC ; Get Multiply/Divide Control (MDC)
00E0 8840 247 MOV [-R0],R4 ; Put it on the user stack
00E2 F2F40CFE 248 MOV R4,MDH ; Get Multiply/Divide High (MDH)
00E6 8840 249 MOV [-R0],R4 ; Put it on the user stack
00E8 F2F40EFE 250 MOV R4,MDL ; Get Multiply/Divide Low (MDL)
00EC 8840 251 MOV [-R0],R4 ; Put it on the user stack; Save Register Context
252
00EE D7500000 R 253 EXTP #PAG _OSTCBCur,#02h ; pStack = OSTCBCur->OSTCBStkPtr
00F2 F2F80000 2R 254 MOV R8,POF (_OSTCBCur) ; pStack = R9:R8
00F6 F2F90000 1R 255 MOV R9,POF (_OSTCBCur+2)
00FA DC59 256 EXTP R9,#02h
00FC 9868 2 257 MOV R6,[R8+]
00FE A878 1 258 MOV R7,[R8]
259
0100 F2F512FE 260 MOV R5,SP ; Get Task Return Address
0104 D4350400 261 MOV R3,[R5+#04h] ; Get "current" PSW =(SP + 2)
0108 D4150200 262 MOV R1,[R5+#02h] ; Get "current" CSP =(SP + 1)
010C A825 263 MOV R2,[R5] ; Get "current" IP =(SP + 0)
010E F2F402FE 264 MOV R4,DPP1 ; Get "current" DPP1
265
266
0112 DC57 267 EXTP R7,#02h ; Save this task's interrupt context on user stack
0114 C4160200 2 268 MOV [R6+#02H],R1 ; Task CSP
0118 C4260400 1 269 MOV [R6+#04H],R2 ; Task IP
011C DC67 270 EXTP R7,#03h
011E C4360600 3 271 MOV [R6+#06H],R3 ; Task STATUS
0122 C4460800 2 272 MOV [R6+#08H],R4 ; Task DPP1
0126 C4060A00 1 273 MOV [R6+#0AH],R0 ; Task R0
274
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc. Date: Dec 5 2000 Time: 10:02:43 Page: 6
os_cpu_a
LOC CODE LINE SOURCELINE
012A E6F90000 R 275 MOV R9,#SOF _ADDR01 ; Call user defined task switch hook
012E 8890 276 MOV [-R0],R9
0130 E6F90000 R 277 MOV R9,#SEG _ADDR01
0134 8890 278 MOV [-R0],R9
0136 FA000000 R 279 JMPS SEG( _OSTaskSwHook),SOF( _OSTaskSwHook)
013A 280 _ADDR01:
013A D7500000 R 281 EXTP #PAG _OSTCBHighRdy,#02h ; Get the stack pointer of the task to resume
013E F2F80000 2R 282 MOV R8,POF _OSTCBHighRdy ; OSTCBCur = OSTCBHighRdy
0142 F2F90000 1R 283 MOV R9,POF (_OSTCBHighRdy+2)
0146 D7500000 R 284 EXTP #PAG _OSTCBCur,#02h
014A F6F80000 2R 285 MOV POF (_OSTCBCur),R8
014E F6F90000 1R 286 MOV POF (_OSTCBCur+2),R9
287
0152 D7400000 R 288 EXTP #PAG _OSPrioHighRdy,#01h ; OSPrioCur = OSPrioHighRdy;
0156 F3F20000 1R 289 MOVB RL1,POF _OSPrioHighRdy
015A D7400000 R 290 EXTP #PAG _OSPrioCur,#01h
015E F7F20000 1R 291 MOVB POF _OSPrioCur,RL1
292
0162 DC59 293 EXTP R9,#02h ; R7:R6 = OSTCBHighRdy->OSTCBStkPtr
0164 9868 2 294 MOV R6,[R8+]
0166 A878 1 295 MOV R7,[R8]
296
0168 DC57 297 EXTP R7,#02h ; Load this task's interrupt context on the system stac
k
016A D4160200 2 298 MOV R1,[R6+#02h] ; Get Task CSP
016E D4260400 1 299 MOV R2,[R6+#04h] ; Get Task IP
0172 DC67 300 EXTP R7,#03h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -