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

📄 conf_tny.lst

📁 STC12C5410AD模拟串口再现多串口通讯
💻 LST
📖 第 1 页 / 共 4 页
字号:
                             ENDIF
                     407     
                     408     ;------------------------------------------------
                     409     ; Perform a Task-Switch
                     410     ;  void os_switch_task (void)
                     411     ;      uchar i;
                     412     ;      uchar limit;
                     413     
                     414     ;---- Variable 'current' assigned to Register 'R6' ----
                     415     ;---- Variable 'next' assigned to Register 'R7' ----
                     416     ;---- Variable 'i' assigned to Register 'R0' ----
                     417     ;---- Variable 'limit' assigned to Register 'R5' ----
                     418     ;
                     419     ;------------------------------------------------
                     420     
004C                 421     os_switch_task:
                     422     
                     423     IF (CODE_BANKING <> 0)
                                             PUSH    ?B_CURRENTBANK
                             ENDIF
                     426     
004C                 427     os_switch_task1:
                     428     
                     429     ;      next = current;
                     430     IF (TIMESHARING <> 0)
                                             SETB    ?RTX_TS_DELAY           ; Delay Task Switching
                             ENDIF
004C E50C            433                     MOV     A,?RTX_CURRENTTASK
004E FF              434                     MOV     R7,A
                     435     ;      while (1)  {
004F 23              436                     RL      A
0050 2400     F      437                     ADD     A,#?RTX?TASKSTATE?S+1
0052 F8              438                     MOV     R0,A
0053                 439     ?C0001:
                     440     ;        if (++next == MAXTASKN+1)  next = 0;
0053 0F              441                     INC     R7
0054 08              442                     INC     R0
0055 08              443                     INC     R0
                     444     IF (CPU_IDLE_CODE)
                                             MOV     A,R7
                                             CJNE    A,?RTX_CURRENTTASK,NoIDLE
                                             JBC     ?RTX_ISR_SIG,NoIDLE
                                             CPU_IDLE          ; CPU sleep
                             NoIDLE:
                             ENDIF
0056 BF0004   F      451                     CJNE    R7,#?RTX_MAXTASKN+1,?C0003
0059 7F00            452                     MOV     R7,#0
005B 7800     F      453                     MOV     R0,#?RTX?TASKSTATE?S+1
005D                 454     ?C0003:
                     455     ;        if (STATE[next].st & K_READY)  break;
005D E6              456                     MOV     A,@R0
005E 30E4F2          457                     JNB     ACC.B_READY,?C0001
                     458     ;      }
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/09/2008 16:32:51 PAGE     8

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

0099 74FF            525                     MOV     A,#RAMTOP
009B                 526     ?C0013:
009B FD              527                     MOV     R5,A
                     528     ;        limit = STKP[current];
009C 18              529                     DEC     R0
009D E6              530                     MOV     A,@R0
009E CD              531                     XCH     A,R5
009F F8              532                     MOV     R0,A
                     533     ;
                     534     ;        while (SP != limit)  {
00A0                 535     ?C0015:
00A0 E581            536                     MOV     A,SP
00A2 6D              537                     XRL     A,R5
00A3 6006            538                     JZ      ?C0016
                     539     ;          STACK[i] = STACK[SP];
                     540     ;          i--;
                     541     ;          SP--;
00A5 D0E0            542                     POP     ACC
00A7 F6              543                     MOV     @R0,A
00A8 18              544                     DEC     R0
                     545     
00A9 80F5            546                     SJMP    ?C0015
00AB                 547     ?C0016:
                     548     ;        }
                     549     ;        STKP[current] = i;
00AB E50C            550                     MOV     A,?RTX_CURRENTTASK
00AD 2400     F      551                     ADD     A,#?RTX?TASKSP?S
00AF C8              552                     XCH     A,R0
00B0 F6              553                     MOV     @R0,A
                     554     ;        current--;
00B1 150C            555                     DEC     ?RTX_CURRENTTASK
00B3 80D3            556                     SJMP    ?C0011
00B5                 557     ?C0012:
                     558     ;      }
                     559     
                     560     ;      RoundRobinTime = ?RTX_TIMESHARING
                     561     IF (TIMESHARING)
                                             MOV     ?RTX_ROBINTIME,#TIMESHARING
                             ENDIF
                     564              
                     565     ;       if (STATE[current].st & K_ROBIN)  goto RobinOn;
00B5 E50C            566                     MOV     A,?RTX_CURRENTTASK
00B7 23              567                     RL      A
00B8 2400     F      568                     ADD     A,#?RTX?TASKSTATE?S+1
00BA F8              569                     MOV     R0,A
00BB 7F04            570                     MOV     R7,#SIG_EVENT
00BD C2AF            571                     CLR     EA
00BF E6              572                     MOV     A,@R0
                     573     IF (TIMESHARING)
                                             JBC     ACC.B_ROBIN,RobinOn
                             ENDIF
                     576     ;       if ((STATE[current].st & K_SIG) && (STATE[current].st & SIG_EVENT)
                     577     ;          goto SignalOn;
00C0 30E003          578                     JNB     ACC.B_WAITSIG,SignalOff
00C3 10E20C          579                     JBC     ACC.B_SIGNAL,SignalOn
00C6                 580     SignalOff:
                     581     ;       if ((STATE[current].st & K_TMO) && (STATE[current].st & TMO_EVENT)
                     582     ;          goto TimeOutOn;
00C6 7F00            583                     MOV     R7,#0           ; No Event
00C8 30E107          584                     JNB     ACC.B_WAITTIM,NoEvent
00CB 30E304          585                     JNB     ACC.B_TIMEOUT,NoEvent
00CE                 586     TimeOutOn:      
00CE 7F08            587                     MOV     R7,#TMO_EVENT
00D0 54F4            588                     ANL     A,#0F4H
00D2                 589     SignalOn:
00D2 C2E7            590     NoEvent:        CLR     ACC.B_RDY       ; Clear RDY bit
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/09/2008 16:32:51 PAGE    10

00D4 C6              591                     XCH     A,@R0
00D5 D2AF            592                     SETB    EA
                     593     
00D7 5480            594                     ANL     A,#K_RDY
00D9 4207            595                     ORL     AR7,A
                     596     IF (TIMESHARING <> 0)
                               IF (CODE_BANKING)
                                             POP     ACC
                                             CALL    ?B_RESTORE_BANK
                               ENDIF
                                             CLR     ?RTX_TS_DELAY
                                             RET
                             ELSE
                     604       IF (CODE_BANKING)
                                             POP     ACC
                                             JMP     ?B_RESTORE_BANK
                               ENDIF
00DB 22              608                     RET
                     609     ENDIF
                     610                     

⌨️ 快捷键说明

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