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

📄 conf_tny.lst

📁 简单Shell命令调试系统开发的程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
                     406     ; Perform a Task-Switch
                     407     ;  void os_switch_task (void)
                     408     ;      uchar i;
                     409     ;      uchar limit;
                     410     
                     411     ;---- Variable 'current' assigned to Register 'R6' ----
                     412     ;---- Variable 'next' assigned to Register 'R7' ----
                     413     ;---- Variable 'i' assigned to Register 'R0' ----
                     414     ;---- Variable 'limit' assigned to Register 'R5' ----
                     415     ;
                     416     ;------------------------------------------------
                     417     
004E                 418     os_switch_task:
                     419     
                     420     IF (CODE_BANKING <> 0)
                                             PUSH    ?B_CURRENTBANK
                             ENDIF
                     423     
004E                 424     os_switch_task1:
                     425     
                     426     ;      next = current;
                     427     IF (TIMESHARING <> 0)
                                             SETB    ?RTX_TS_DELAY           ; Delay Task Switching
                             ENDIF
004E E50C            430                     MOV     A,?RTX_CURRENTTASK
0050 FF              431                     MOV     R7,A
                     432     ;      while (1)  {
0051 23              433                     RL      A
0052 2400     F      434                     ADD     A,#?RTX?TASKSTATE?S+1
0054 F8              435                     MOV     R0,A
0055                 436     ?C0001:
                     437     ;        if (++next == MAXTASKN+1)  next = 0;
0055 0F              438                     INC     R7
0056 08              439                     INC     R0
0057 08              440                     INC     R0
                     441     IF (CPU_IDLE_CODE)
0058 EF              442                     MOV     A,R7
0059 B50C06          443                     CJNE    A,?RTX_CURRENTTASK,NoIDLE
005C 100003   F      444                     JBC     ?RTX_ISR_SIG,NoIDLE
                     445                     CPU_IDLE          ; CPU sleep
0062                 447     NoIDLE:
                     448     ENDIF
0062 BF0004   F      449                     CJNE    R7,#?RTX_MAXTASKN+1,?C0003
0065 7F00            450                     MOV     R7,#0
0067 7800     F      451                     MOV     R0,#?RTX?TASKSTATE?S+1
0069                 452     ?C0003:
                     453     ;        if (STATE[next].st & K_READY)  break;
0069 E6              454                     MOV     A,@R0
006A 30E4E8          455                     JNB     ACC.B_READY,?C0001
                     456     ;      }
                     457     ;
                     458     
                     459     PUBLIC  ?RTX_NEXTID
A51 MACRO ASSEMBLER  CONF_TNY                                                             01/18/2005 19:37:33 PAGE     8

                     460     PUBLIC  ?RTX_NEXTTASK
                     461     
  0007               462     ?RTX_NEXTID     EQU     AR7
006D 00              463     ?RTX_NEXTTASK:  NOP             ; for Debugging
                     464     
                     465     ;      while (current < next)  {
006E                 466     ?C0005:
006E E50C            467                     MOV     A,?RTX_CURRENTTASK
0070 C3              468                     CLR     C
0071 9F              469                     SUBB    A,R7
0072 5020            470                     JNC     ?C0011
                     471     
                     472     ;        current++;
0074 050C            473                     INC     ?RTX_CURRENTTASK
                     474     ;        i = STKP[current];
0076 7400     F      475                     MOV     A,#?RTX?TASKSP?S
0078 250C            476                     ADD     A,?RTX_CURRENTTASK
007A F8              477                     MOV     R0,A
007B E6              478                     MOV     A,@R0
007C FD              479                     MOV     R5,A
                     480     ;        STKP[current] = SP;
007D A681            481                     MOV     @R0,SP
                     482     ;        if (current == MAXTASKN) limit = RAMTOP;
007F 08              483                     INC     R0
0080 E6              484                     MOV     A,@R0
0081 AE0C            485                     MOV     R6,?RTX_CURRENTTASK
0083 BE0002   F      486                     CJNE    R6,#?RTX_MAXTASKN,?C0007
0086 74FF            487                     MOV     A,#RAMTOP
0088                 488     ?C0007:
0088 CD              489                     XCH     A,R5
0089 F8              490                     MOV     R0,A
                     491     ;        else                       limit = STKP[current+1];
                     492     ;
                     493     ;        while (i != limit)  {
008A                 494     ?C0009:
008A E8              495                     MOV     A,R0
008B 6D              496                     XRL     A,R5
008C 60E0            497                     JZ      ?C0005
                     498     ;          SP++;
                     499     ;          i++;
                     500     ;          STACK[SP] = STACK[i];
008E 08              501                     INC     R0
008F E6              502                     MOV     A,@R0
0090 C0E0            503                     PUSH    ACC
0092 80F6            504                     SJMP    ?C0009
                     505     ;        }
                     506     ;      }
0094                 507     ?C0011:
                     508     ;
                     509     ;      while (current > next)  {
0094 E50C            510                     MOV     A,?RTX_CURRENTTASK
0096 D3              511                     SETB    C
0097 9F              512                     SUBB    A,R7
0098 4027            513                     JC      ?C0012
                     514             
009A E50C            515                     MOV     A,?RTX_CURRENTTASK
009C 2400     F      516                     ADD     A,#?RTX?TASKSP?S+1
009E F8              517                     MOV     R0,A
009F E6              518                     MOV     A,@R0
                     519     ;        if (current == (MAXTASKN)) i = RAMTOP;
                     520     ;        else                       i = STKP[current+1];
00A0 AE0C            521                     MOV     R6,?RTX_CURRENTTASK
00A2 BE0002   F      522                     CJNE    R6,#?RTX_MAXTASKN,?C0013
00A5 74FF            523                     MOV     A,#RAMTOP
00A7                 524     ?C0013:
00A7 FD              525                     MOV     R5,A
A51 MACRO ASSEMBLER  CONF_TNY                                                             01/18/2005 19:37:33 PAGE     9

                     526     ;        limit = STKP[current];
00A8 18              527                     DEC     R0
00A9 E6              528                     MOV     A,@R0
00AA CD              529                     XCH     A,R5
00AB F8              530                     MOV     R0,A
                     531     ;
                     532     ;        while (SP != limit)  {
00AC                 533     ?C0015:
00AC E581            534                     MOV     A,SP
00AE 6D              535                     XRL     A,R5
00AF 6006            536                     JZ      ?C0016
                     537     ;          STACK[i] = STACK[SP];
                     538     ;          i--;
                     539     ;          SP--;
00B1 D0E0            540                     POP     ACC
00B3 F6              541                     MOV     @R0,A
00B4 18              542                     DEC     R0
                     543     
00B5 80F5            544                     SJMP    ?C0015
00B7                 545     ?C0016:
                     546     ;        }
                     547     ;        STKP[current] = i;
00B7 E50C            548                     MOV     A,?RTX_CURRENTTASK
00B9 2400     F      549                     ADD     A,#?RTX?TASKSP?S
00BB C8              550                     XCH     A,R0
00BC F6              551                     MOV     @R0,A
                     552     ;        current--;
00BD 150C            553                     DEC     ?RTX_CURRENTTASK
00BF 80D3            554                     SJMP    ?C0011
00C1                 555     ?C0012:
                     556     ;      }
                     557     
                     558     ;      RoundRobinTime = ?RTX_TIMESHARING
                     559     IF (TIMESHARING)
                                             MOV     ?RTX_ROBINTIME,#TIMESHARING
                             ENDIF
                     562              
                     563     ;       if (STATE[current].st & K_ROBIN)  goto RobinOn;
00C1 E50C            564                     MOV     A,?RTX_CURRENTTASK
00C3 23              565                     RL      A
00C4 2400     F      566                     ADD     A,#?RTX?TASKSTATE?S+1
00C6 F8              567                     MOV     R0,A
00C7 7F04            568                     MOV     R7,#SIG_EVENT
00C9 C2AF            569                     CLR     EA
00CB E6              570                     MOV     A,@R0
                     571     IF (TIMESHARING)
                                             JBC     ACC.B_ROBIN,RobinOn
                             ENDIF
                     574     ;       if ((STATE[current].st & K_SIG) && (STATE[current].st & SIG_EVENT)
                     575     ;          goto SignalOn;
00CC 30E003          576                     JNB     ACC.B_WAITSIG,SignalOff
00CF 10E20C          577                     JBC     ACC.B_SIGNAL,SignalOn
00D2                 578     SignalOff:
                     579     ;       if ((STATE[current].st & K_TMO) && (STATE[current].st & TMO_EVENT)
                     580     ;          goto TimeOutOn;
00D2 7F00            581                     MOV     R7,#0           ; No Event
00D4 30E107          582                     JNB     ACC.B_WAITTIM,NoEvent
00D7 30E304          583                     JNB     ACC.B_TIMEOUT,NoEvent
00DA                 584     TimeOutOn:      
00DA 7F08            585                     MOV     R7,#TMO_EVENT
00DC 54F4            586                     ANL     A,#0F4H
00DE                 587     SignalOn:
00DE C2E7            588     NoEvent:        CLR     ACC.B_RDY       ; Clear RDY bit
00E0 C6              589                     XCH     A,@R0
00E1 D2AF            590                     SETB    EA
                     591     
A51 MACRO ASSEMBLER  CONF_TNY                                                             01/18/2005 19:37:33 PAGE    10

00E3 5480            592                     ANL     A,#K_RDY
00E5 4207            593                     ORL     AR7,A
                     594     IF (TIMESHARING <> 0)
                               IF (CODE_BANKING)
                                             POP     ACC
                                             CALL    ?B_RESTORE_BANK
                               ENDIF
                                             CLR     ?RTX_TS_DELAY
                                             RET
                             ELSE
                     602       IF (CODE_BANKING)
                                             POP     ACC
                                             JMP     ?B_RESTORE_BANK
                               ENDIF
00E7 22              606                     RET
                     607     ENDIF
                     608                     
                     609                     
                     610     
                     611     ;------------------------------------------------

⌨️ 快捷键说明

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