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

📄 conf_tny.lst

📁 程序为监测报警
💻 LST
📖 第 1 页 / 共 4 页
字号:
                     404     
                     405     ;------------------------------------------------
                     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     
004D                 418     os_switch_task:
                     419     
                     420     IF (CODE_BANKING <> 0)
                                             PUSH    ?B_CURRENTBANK
                             ENDIF
                     423     
004D                 424     os_switch_task1:
                     425     
                     426     ;      next = current;
                     427     IF (TIMESHARING <> 0)
                                             SETB    ?RTX_TS_DELAY           ; Delay Task Switching
                             ENDIF
004D E50C            430                     MOV     A,?RTX_CURRENTTASK
004F FF              431                     MOV     R7,A
                     432     ;      while (1)  {
0050 23              433                     RL      A
0051 2400     F      434                     ADD     A,#?RTX?TASKSTATE?S+1
0053 F8              435                     MOV     R0,A
0054                 436     ?C0001:
                     437     ;        if (++next == MAXTASKN+1)  next = 0;
0054 0F              438                     INC     R7
0055 08              439                     INC     R0
0056 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
0057 BF0004   F      448                     CJNE    R7,#?RTX_MAXTASKN+1,?C0003
005A 7F00            449                     MOV     R7,#0
005C 7800     F      450                     MOV     R0,#?RTX?TASKSTATE?S+1
005E                 451     ?C0003:
                     452     ;        if (STATE[next].st & K_READY)  break;
005E E6              453                     MOV     A,@R0
005F 30E4F2          454                     JNB     ACC.B_READY,?C0001
                     455     ;      }
                     456     ;
                     457     
                     458     PUBLIC  ?RTX_NEXTID
A51 MACRO ASSEMBLER  CONF_TNY                                                             01/29/2007 19:51:11 PAGE     8

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

                     525     ;        limit = STKP[current];
009D 18              526                     DEC     R0
009E E6              527                     MOV     A,@R0
009F CD              528                     XCH     A,R5
00A0 F8              529                     MOV     R0,A
                     530     ;
                     531     ;        while (SP != limit)  {
00A1                 532     ?C0015:
00A1 E581            533                     MOV     A,SP
00A3 6D              534                     XRL     A,R5
00A4 6006            535                     JZ      ?C0016
                     536     ;          STACK[i] = STACK[SP];
                     537     ;          i--;
                     538     ;          SP--;
00A6 D0E0            539                     POP     ACC
00A8 F6              540                     MOV     @R0,A
00A9 18              541                     DEC     R0
                     542     
00AA 80F5            543                     SJMP    ?C0015
00AC                 544     ?C0016:
                     545     ;        }
                     546     ;        STKP[current] = i;
00AC E50C            547                     MOV     A,?RTX_CURRENTTASK
00AE 2400     F      548                     ADD     A,#?RTX?TASKSP?S
00B0 C8              549                     XCH     A,R0
00B1 F6              550                     MOV     @R0,A
                     551     ;        current--;
00B2 150C            552                     DEC     ?RTX_CURRENTTASK
00B4 80D3            553                     SJMP    ?C0011
00B6                 554     ?C0012:
                     555     ;      }
                     556     
                     557     ;      RoundRobinTime = ?RTX_TIMESHARING
                     558     IF (TIMESHARING)
                                             MOV     ?RTX_ROBINTIME,#TIMESHARING
                             ENDIF
                     561              
                     562     ;       if (STATE[current].st & K_ROBIN)  goto RobinOn;
00B6 E50C            563                     MOV     A,?RTX_CURRENTTASK
00B8 23              564                     RL      A
00B9 2400     F      565                     ADD     A,#?RTX?TASKSTATE?S+1
00BB F8              566                     MOV     R0,A
00BC 7F04            567                     MOV     R7,#SIG_EVENT
00BE C2AF            568                     CLR     EA
00C0 E6              569                     MOV     A,@R0
                     570     IF (TIMESHARING)
                                             JBC     ACC.B_ROBIN,RobinOn
                             ENDIF
                     573     ;       if ((STATE[current].st & K_SIG) && (STATE[current].st & SIG_EVENT)
                     574     ;          goto SignalOn;
00C1 30E003          575                     JNB     ACC.B_WAITSIG,SignalOff
00C4 10E20C          576                     JBC     ACC.B_SIGNAL,SignalOn
00C7                 577     SignalOff:
                     578     ;       if ((STATE[current].st & K_TMO) && (STATE[current].st & TMO_EVENT)
                     579     ;          goto TimeOutOn;
00C7 7F00            580                     MOV     R7,#0           ; No Event
00C9 30E107          581                     JNB     ACC.B_WAITTIM,NoEvent
00CC 30E304          582                     JNB     ACC.B_TIMEOUT,NoEvent
00CF                 583     TimeOutOn:      
00CF 7F08            584                     MOV     R7,#TMO_EVENT
00D1 54F4            585                     ANL     A,#0F4H
00D3                 586     SignalOn:
00D3 547C            587     NoEvent:        ANL     A,#NOT (K_RDY + K_TMO + K_SIG)  ; Clear RDY + Wait bits
00D5 C6              588                     XCH     A,@R0
00D6 D2AF            589                     SETB    EA
                     590     
A51 MACRO ASSEMBLER  CONF_TNY                                                             01/29/2007 19:51:11 PAGE    10

00D8 5480            591                     ANL     A,#K_RDY
00DA 4207            592                     ORL     AR7,A
                     593     IF (TIMESHARING <> 0)
                               IF (CODE_BANKING)
                                             POP     ACC
                                             CALL    ?B_RESTORE_BANK
                               ENDIF
                                             CLR     ?RTX_TS_DELAY
                                             RET
                             ELSE
                     601       IF (CODE_BANKING)
                                             POP     ACC
                                             JMP     ?B_RESTORE_BANK
                               ENDIF
00DC 22              605                     RET
                     606     ENDIF
                     607                     

⌨️ 快捷键说明

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