📄 conf_tny.lst
字号:
412 ;---- Variable 'next' assigned to Register 'R7' ----
413 ;---- Variable 'i' assigned to Register 'R0' ----
414 ;---- Variable 'limit' assigned to Register 'R5' ----
415 ;
416 ;------------------------------------------------
417
007B 418 os_switch_task:
419
420 IF (CODE_BANKING <> 0)
PUSH ?B_CURRENTBANK
ENDIF
423
007B 424 os_switch_task1:
425
426 ; next = current;
427 IF (TIMESHARING <> 0)
007B D200 F 428 SETB ?RTX_TS_DELAY ; Delay Task Switching
429 ENDIF
007D E50C 430 MOV A,?RTX_CURRENTTASK
007F FF 431 MOV R7,A
432 ; while (1) {
0080 23 433 RL A
0081 2400 F 434 ADD A,#?RTX?TASKSTATE?S+1
0083 F8 435 MOV R0,A
0084 436 ?C0001:
437 ; if (++next == MAXTASKN+1) next = 0;
0084 0F 438 INC R7
0085 08 439 INC R0
0086 08 440 INC R0
441 IF (CPU_IDLE_CODE)
MOV A,R7
CJNE A,?RTX_CURRENTTASK,NoIDLE
JBC ?RTX_ISR_SIG,NoIDLE
CPU_IDLE ; CPU sleep
NoIDLE:
ENDIF
0087 BF0004 F 448 CJNE R7,#?RTX_MAXTASKN+1,?C0003
008A 7F00 449 MOV R7,#0
008C 7800 F 450 MOV R0,#?RTX?TASKSTATE?S+1
008E 451 ?C0003:
452 ; if (STATE[next].st & K_READY) break;
008E E6 453 MOV A,@R0
008F 30E4F2 454 JNB ACC.B_READY,?C0001
455 ; }
456 ;
457
458 PUBLIC ?RTX_NEXTID
A51 MACRO ASSEMBLER CONF_TNY 02/14/2009 15:37:26 PAGE 8
459 PUBLIC ?RTX_NEXTTASK
460
0007 461 ?RTX_NEXTID EQU AR7
0092 00 462 ?RTX_NEXTTASK: NOP ; for Debugging
463
464 ; while (current < next) {
0093 465 ?C0005:
0093 E50C 466 MOV A,?RTX_CURRENTTASK
0095 C3 467 CLR C
0096 9F 468 SUBB A,R7
0097 5020 469 JNC ?C0011
470
471 ; current++;
0099 050C 472 INC ?RTX_CURRENTTASK
473 ; i = STKP[current];
009B 7400 F 474 MOV A,#?RTX?TASKSP?S
009D 250C 475 ADD A,?RTX_CURRENTTASK
009F F8 476 MOV R0,A
00A0 E6 477 MOV A,@R0
00A1 FD 478 MOV R5,A
479 ; STKP[current] = SP;
00A2 A681 480 MOV @R0,SP
481 ; if (current == MAXTASKN) limit = RAMTOP;
00A4 08 482 INC R0
00A5 E6 483 MOV A,@R0
00A6 AE0C 484 MOV R6,?RTX_CURRENTTASK
00A8 BE0002 F 485 CJNE R6,#?RTX_MAXTASKN,?C0007
00AB 747F 486 MOV A,#RAMTOP
00AD 487 ?C0007:
00AD CD 488 XCH A,R5
00AE F8 489 MOV R0,A
490 ; else limit = STKP[current+1];
491 ;
492 ; while (i != limit) {
00AF 493 ?C0009:
00AF E8 494 MOV A,R0
00B0 6D 495 XRL A,R5
00B1 60E0 496 JZ ?C0005
497 ; SP++;
498 ; i++;
499 ; STACK[SP] = STACK[i];
00B3 08 500 INC R0
00B4 E6 501 MOV A,@R0
00B5 C0E0 502 PUSH ACC
00B7 80F6 503 SJMP ?C0009
504 ; }
505 ; }
00B9 506 ?C0011:
507 ;
508 ; while (current > next) {
00B9 E50C 509 MOV A,?RTX_CURRENTTASK
00BB D3 510 SETB C
00BC 9F 511 SUBB A,R7
00BD 4027 512 JC ?C0012
513
00BF E50C 514 MOV A,?RTX_CURRENTTASK
00C1 2400 F 515 ADD A,#?RTX?TASKSP?S+1
00C3 F8 516 MOV R0,A
00C4 E6 517 MOV A,@R0
518 ; if (current == (MAXTASKN)) i = RAMTOP;
519 ; else i = STKP[current+1];
00C5 AE0C 520 MOV R6,?RTX_CURRENTTASK
00C7 BE0002 F 521 CJNE R6,#?RTX_MAXTASKN,?C0013
00CA 747F 522 MOV A,#RAMTOP
00CC 523 ?C0013:
00CC FD 524 MOV R5,A
A51 MACRO ASSEMBLER CONF_TNY 02/14/2009 15:37:26 PAGE 9
525 ; limit = STKP[current];
00CD 18 526 DEC R0
00CE E6 527 MOV A,@R0
00CF CD 528 XCH A,R5
00D0 F8 529 MOV R0,A
530 ;
531 ; while (SP != limit) {
00D1 532 ?C0015:
00D1 E581 533 MOV A,SP
00D3 6D 534 XRL A,R5
00D4 6006 535 JZ ?C0016
536 ; STACK[i] = STACK[SP];
537 ; i--;
538 ; SP--;
00D6 D0E0 539 POP ACC
00D8 F6 540 MOV @R0,A
00D9 18 541 DEC R0
542
00DA 80F5 543 SJMP ?C0015
00DC 544 ?C0016:
545 ; }
546 ; STKP[current] = i;
00DC E50C 547 MOV A,?RTX_CURRENTTASK
00DE 2400 F 548 ADD A,#?RTX?TASKSP?S
00E0 C8 549 XCH A,R0
00E1 F6 550 MOV @R0,A
551 ; current--;
00E2 150C 552 DEC ?RTX_CURRENTTASK
00E4 80D3 553 SJMP ?C0011
00E6 554 ?C0012:
555 ; }
556
557 ; RoundRobinTime = ?RTX_TIMESHARING
558 IF (TIMESHARING)
00E6 750D05 559 MOV ?RTX_ROBINTIME,#TIMESHARING
560 ENDIF
561
562 ; if (STATE[current].st & K_ROBIN) goto RobinOn;
00E9 E50C 563 MOV A,?RTX_CURRENTTASK
00EB 23 564 RL A
00EC 2400 F 565 ADD A,#?RTX?TASKSTATE?S+1
00EE F8 566 MOV R0,A
00EF 7F04 567 MOV R7,#SIG_EVENT
00F1 C2AF 568 CLR EA
00F3 E6 569 MOV A,@R0
570 IF (TIMESHARING)
00F4 10E61E 571 JBC ACC.B_ROBIN,RobinOn
572 ENDIF
573 ; if ((STATE[current].st & K_SIG) && (STATE[current].st & SIG_EVENT)
574 ; goto SignalOn;
00F7 30E003 575 JNB ACC.B_WAITSIG,SignalOff
00FA 10E20C 576 JBC ACC.B_SIGNAL,SignalOn
00FD 577 SignalOff:
578 ; if ((STATE[current].st & K_TMO) && (STATE[current].st & TMO_EVENT)
579 ; goto TimeOutOn;
00FD 7F00 580 MOV R7,#0 ; No Event
00FF 30E107 581 JNB ACC.B_WAITTIM,NoEvent
0102 30E304 582 JNB ACC.B_TIMEOUT,NoEvent
0105 583 TimeOutOn:
0105 7F08 584 MOV R7,#TMO_EVENT
0107 54F4 585 ANL A,#0F4H
0109 586 SignalOn:
0109 547C 587 NoEvent: ANL A,#NOT (K_RDY + K_TMO + K_SIG) ; Clear RDY + Wait bits
010B C6 588 XCH A,@R0
010C D2AF 589 SETB EA
590
A51 MACRO ASSEMBLER CONF_TNY 02/14/2009 15:37:26 PAGE 10
010E 5480 591 ANL A,#K_RDY
0110 4207 592 ORL AR7,A
593 IF (TIMESHARING <> 0)
594 IF (CODE_BANKING)
POP ACC
CALL ?B_RESTORE_BANK
ENDIF
0112 C200 F 598 CLR ?RTX_TS_DELAY
0114 22 599 RET
600 ELSE
IF (CODE_BANKING)
POP ACC
JMP ?B_RESTORE_BANK
ENDIF
RET
ENDIF
607
608
609
610 ;------------------------------------------------
611 IF (TIMESHARING <> 0)
0115 F6 612 RobinOn: MOV @R0,A
0116 D2AF 613 SETB EA
614 IF (CODE_BANKING)
POP ACC
CALL ?B_RESTORE_BANK
ENDIF
0118 D007 618 POP AR7
011A D006 619 POP AR6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -