📄 rtx51tny.lst
字号:
0094 FF 215 MOV R7,A
216 ; while (1) {
0095 23 217 RL A
0096 2400 F 218 ADD A,#?RTX?TASKSTATE?S+1
0098 F8 219 MOV R0,A
0099 220 ?C0001:
221 ; if (++next == MAXTASKN+1) next = 0;
0099 0F 222 INC R7
009A 08 223 INC R0
009B 08 224 INC R0
009C BF0004 F 225 CJNE R7,#?RTX_MAXTASKN+1,?C0003
009F 7F00 226 MOV R7,#0
00A1 7800 F 227 MOV R0,#?RTX?TASKSTATE?S+1
00A3 228 ?C0003:
229 ; if (STATE[next].st & K_READY) break;
00A3 E6 230 MOV A,@R0
00A4 30E4F2 231 JNB ACC.B_READY,?C0001
232 ; }
233 ;
234
0007 235 ?RTX_NEXTID EQU AR7
00A7 00 236 ?RTX_NEXTTASK: NOP ; for Debugging
237
238 ; while (current < next) {
00A8 239 ?C0005:
00A8 E500 F 240 MOV A,?RTX_CURRENTTASK
00AA C3 241 CLR C
00AB 9F 242 SUBB A,R7
00AC 5020 243 JNC ?C0011
244
245 ; current++;
00AE 0500 F 246 INC ?RTX_CURRENTTASK
247 ; i = STKP[current];
00B0 7400 F 248 MOV A,#?RTX?TASKSP?S
00B2 2500 F 249 ADD A,?RTX_CURRENTTASK
00B4 F8 250 MOV R0,A
00B5 E6 251 MOV A,@R0
00B6 FD 252 MOV R5,A
253 ; STKP[current] = SP;
00B7 A681 254 MOV @R0,SP
255 ; if (current == MAXTASKN) limit = RAMTOP;
A51 MACRO ASSEMBLER RTX51TNY 05/20/2007 16:49:11 PAGE 5
00B9 08 256 INC R0
00BA E6 257 MOV A,@R0
00BB AE00 F 258 MOV R6,?RTX_CURRENTTASK
00BD BE0002 F 259 CJNE R6,#?RTX_MAXTASKN,?C0007
00C0 7400 F 260 MOV A,#?RTX_RAMTOP
00C2 261 ?C0007:
00C2 CD 262 XCH A,R5
00C3 F8 263 MOV R0,A
264 ; else limit = STKP[current+1];
265 ;
266 ; while (i != limit) {
00C4 267 ?C0009:
00C4 E8 268 MOV A,R0
00C5 6D 269 XRL A,R5
00C6 60E0 270 JZ ?C0005
271 ; SP++;
272 ; i++;
273 ; STACK[SP] = STACK[i];
00C8 08 274 INC R0
00C9 E6 275 MOV A,@R0
00CA C0E0 276 PUSH ACC
00CC 80F6 277 SJMP ?C0009
278 ; }
279 ; }
00CE 280 ?C0011:
281 ;
282 ; while (current > next) {
00CE E500 F 283 MOV A,?RTX_CURRENTTASK
00D0 D3 284 SETB C
00D1 9F 285 SUBB A,R7
00D2 4027 286 JC ?C0012
287
00D4 E500 F 288 MOV A,?RTX_CURRENTTASK
00D6 2400 F 289 ADD A,#?RTX?TASKSP?S+1
00D8 F8 290 MOV R0,A
00D9 E6 291 MOV A,@R0
292 ; if (current == (MAXTASKN)) i = RAMTOP;
293 ; else i = STKP[current+1];
00DA AE00 F 294 MOV R6,?RTX_CURRENTTASK
00DC BE0002 F 295 CJNE R6,#?RTX_MAXTASKN,?C0013
00DF 7400 F 296 MOV A,#?RTX_RAMTOP
00E1 297 ?C0013:
00E1 FD 298 MOV R5,A
299 ; limit = STKP[current];
00E2 18 300 DEC R0
00E3 E6 301 MOV A,@R0
00E4 CD 302 XCH A,R5
00E5 F8 303 MOV R0,A
304 ;
305 ; while (SP != limit) {
00E6 306 ?C0015:
00E6 E581 307 MOV A,SP
00E8 6D 308 XRL A,R5
00E9 6006 309 JZ ?C0016
310 ; STACK[i] = STACK[SP];
311 ; i--;
312 ; SP--;
00EB D0E0 313 POP ACC
00ED F6 314 MOV @R0,A
00EE 18 315 DEC R0
316
00EF 80F5 317 SJMP ?C0015
00F1 318 ?C0016:
319 ; }
320 ; STKP[current] = i;
00F1 E500 F 321 MOV A,?RTX_CURRENTTASK
A51 MACRO ASSEMBLER RTX51TNY 05/20/2007 16:49:11 PAGE 6
00F3 2400 F 322 ADD A,#?RTX?TASKSP?S
00F5 C8 323 XCH A,R0
00F6 F6 324 MOV @R0,A
325 ; current--;
00F7 1500 F 326 DEC ?RTX_CURRENTTASK
00F9 80D3 327 SJMP ?C0011
00FB 328 ?C0012:
329 ; }
330
331 ; RoundRobinTime = STATE[current].timer + ?RTX_TIMESHARING
00FB E500 F 332 MOV A,?RTX_CURRENTTASK
00FD 23 333 RL A
00FE 2400 F 334 ADD A,#?RTX?TASKSTATE?S
0100 F8 335 MOV R0,A
0101 E6 336 MOV A,@R0
0102 2400 F 337 ADD A,#LOW ?RTX_TIMESHARING
0104 F500 F 338 MOV ?RTX_ROBINTIME,A
0106 08 339 INC R0
340 ; if (STATE[current].st & K_ROBIN) goto RobinOn;
0107 C2AF 341 CLR EA
0109 E6 342 MOV A,@R0
010A 10E62D 343 JBC ACC.B_ROBIN,RobinOn
344 ; if ((STATE[current].st & K_SIG) && (STATE[current].st & SIG_EVENT)
345 ; goto SignalOn;
010D 30E003 346 JNB ACC.B_WAITSIG,SignalOff
0110 20E21B 347 JB ACC.B_SIGNAL,SignalOn
0113 348 SignalOff:
349 ; if ((STATE[current].st & K_TMO) && (STATE[current].st & TMO_EVENT)
350 ; goto TimeOutOn;
0113 30E10F 351 JNB ACC.B_WAITTIM,NoSwitch
0116 30E30C 352 JNB ACC.B_TIMEOUT,NoSwitch
0119 353 TimeOutOn:
0119 54F4 354 ANL A,#0F4H
011B F6 355 MOV @R0,A
011C D2AF 356 SETB EA
011E 7F08 357 MOV R7,#TMO_EVENT
0120 C200 F 358 CLR ?RTX_TS_DELAY
0122 C200 F 359 CLR ?RTX_TS_REQ
0124 22 360 RET
361
0125 D2AF 362 NoSwitch: SETB EA
0127 7F00 363 MOV R7,#0
0129 C200 F 364 CLR ?RTX_TS_DELAY
012B C200 F 365 CLR ?RTX_TS_REQ
012D 22 366 RET
367
012E 54F0 368 SignalOn: ANL A,#0F0H
0130 F6 369 MOV @R0,A
0131 D2AF 370 SETB EA
0133 7F04 371 MOV R7,#SIG_EVENT
0135 C200 F 372 CLR ?RTX_TS_DELAY
0137 C200 F 373 CLR ?RTX_TS_REQ
0139 22 374 RET ; Start Task
375
013A F6 376 RobinOn: MOV @R0,A
013B D2AF 377 SETB EA
013D D007 378 POP AR7
013F D006 379 POP AR6
0141 D005 380 POP AR5
0143 D004 381 POP AR4
0145 D003 382 POP AR3
0147 D002 383 POP AR2
0149 D001 384 POP AR1
014B D000 385 POP AR0
014D D082 386 POP DPL
014F D083 387 POP DPH
A51 MACRO ASSEMBLER RTX51TNY 05/20/2007 16:49:11 PAGE 7
0151 D0F0 388 POP B
0153 D0D0 389 POP PSW
0155 D0E0 390 POP ACC
0157 C200 F 391 CLR ?RTX_TS_DELAY
0159 C200 F 392 CLR ?RTX_TS_REQ
015B 22 393 RET ; Restart Task
394 ; }
395 ; }
396
397
398 ; uchar os_create (uchar no) {
399 ; uchar i;
400 ; uchar p1, p2;
401 ;---- Variable 'p1' assigned to Register 'R1' ----
402 ;---- Variable 'p2' assigned to Register 'R5' ----
403 ;---- Variable 'no' assigned to Register 'R7' ----
404 ;---- Variable 'i' assigned to Register 'R6' ----
405 ;
406 ; if (no > MAXTASKN) return (0xff);
015C 407 _OS_create_task:
015C EF 408 MOV A,R7
015D D3 409 SETB C
015E 9400 F 410 SUBB A,#?RTX_MAXTASKN
0160 4003 411 JC ?C0010
0162 7FFF 412 ?C0012_: MOV R7,#0FFH
0164 22 413 RET
0165 414 ?C0010:
415 ; if (STATE[no].st & K_ACTIVE) return (0xff);
0165 7400 F 416 MOV A,#?RTX?TASKSTATE?S+1
0167 2F 417 ADD A,R7
0168 2F 418 ADD A,R7
0169 F8 419 MOV R0,A
016A E6 420 MOV A,@R0
016B 20E5F4 421 JB ACC.B_ACTIVE,?C0012_
422 ; STATE[no].st |= K_ACTIVE + K_READY;
016E C2AF 423 CLR EA
0170 E6 424 MOV A,@R0
0171 4430 425 ORL A,#K_ACTIVE+K_READY
0173 F6 426 MOV @R0,A
0174 D2AF 427 SETB EA
428 ;
429 ; i = current;
0176 AE00 F 430 MOV R6,?RTX_CURRENTTASK
0178 431 ?C0013_:
432 ; while (i < no) {
0178 EE 433 MOV A,R6
0179 C3 434 CLR C
017A 9F 435 SUBB A,R7
017B 5021 436 JNC ?C0014
437 ; i++;
017D 0E 438 INC R6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -