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

📄 conf_tny.lst

📁 小型便携式温度计的源代码第三版
💻 LST
📖 第 1 页 / 共 4 页
字号:
                     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 + -