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

📄 conf_tny.lst

📁 基于C8051F310的485集线器
💻 LST
📖 第 1 页 / 共 4 页
字号:
                     420     ; Perform a Task-Switch
                     421     ;  void os_switch_task (void)
                     422     ;      uchar i;
                     423     ;      uchar limit;
                     424     
                     425     ;---- Variable 'current' assigned to Register 'R6' ----
                     426     ;---- Variable 'next' assigned to Register 'R7' ----
                     427     ;---- Variable 'i' assigned to Register 'R0' ----
                     428     ;---- Variable 'limit' assigned to Register 'R5' ----
                     429     ;
                     430     ;------------------------------------------------
                     431     
007C                 432     os_switch_task:
                     433     
                     434     IF (CODE_BANKING <> 0)
                                             PUSH    ?B_CURRENTBANK
                             ENDIF
                     437     
007C                 438     os_switch_task1:
                     439     
                     440     ;      next = current;
                     441     IF (TIMESHARING <> 0)
007C D200     F      442                     SETB    ?RTX_TS_DELAY           ; Delay Task Switching
                     443     ENDIF
007E E50C            444                     MOV     A,?RTX_CURRENTTASK
0080 FF              445                     MOV     R7,A
                     446     ;      while (1)  {
0081 23              447                     RL      A
0082 2400     F      448                     ADD     A,#?RTX?TASKSTATE?S+1
0084 F8              449                     MOV     R0,A
0085                 450     ?C0001:
                     451     ;        if (++next == MAXTASKN+1)  next = 0;
0085 0F              452                     INC     R7
0086 08              453                     INC     R0
0087 08              454                     INC     R0
                     455     IF (CPU_IDLE_CODE)
0088 EF              456                     MOV     A,R7
0089 B50C06          457                     CJNE    A,?RTX_CURRENTTASK,NoIDLE
008C 100003   F      458                     JBC     ?RTX_ISR_SIG,NoIDLE
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/27/2008 15:34:43 PAGE     8

                     459                     CPU_IDLE          ; CPU sleep
0092                 461     NoIDLE:
                     462     ENDIF
0092 BF0004   F      463                     CJNE    R7,#?RTX_MAXTASKN+1,?C0003
0095 7F00            464                     MOV     R7,#0
0097 7800     F      465                     MOV     R0,#?RTX?TASKSTATE?S+1
0099                 466     ?C0003:
                     467     ;        if (STATE[next].st & K_READY)  break;
0099 E6              468                     MOV     A,@R0
009A 30E4E8          469                     JNB     ACC.B_READY,?C0001
                     470     ;      }
                     471     ;
                     472     
                     473     PUBLIC  ?RTX_NEXTID
                     474     PUBLIC  ?RTX_NEXTTASK
                     475     
  0007               476     ?RTX_NEXTID     EQU     AR7
009D 00              477     ?RTX_NEXTTASK:  NOP             ; for Debugging
                     478     
                     479     ;      while (current < next)  {
009E                 480     ?C0005:
009E E50C            481                     MOV     A,?RTX_CURRENTTASK
00A0 C3              482                     CLR     C
00A1 9F              483                     SUBB    A,R7
00A2 5020            484                     JNC     ?C0011
                     485     
                     486     ;        current++;
00A4 050C            487                     INC     ?RTX_CURRENTTASK
                     488     ;        i = STKP[current];
00A6 7400     F      489                     MOV     A,#?RTX?TASKSP?S
00A8 250C            490                     ADD     A,?RTX_CURRENTTASK
00AA F8              491                     MOV     R0,A
00AB E6              492                     MOV     A,@R0
00AC FD              493                     MOV     R5,A
                     494     ;        STKP[current] = SP;
00AD A681            495                     MOV     @R0,SP
                     496     ;        if (current == MAXTASKN) limit = RAMTOP;
00AF 08              497                     INC     R0
00B0 E6              498                     MOV     A,@R0
00B1 AE0C            499                     MOV     R6,?RTX_CURRENTTASK
00B3 BE0002   F      500                     CJNE    R6,#?RTX_MAXTASKN,?C0007
00B6 74FF            501                     MOV     A,#RAMTOP
00B8                 502     ?C0007:
00B8 CD              503                     XCH     A,R5
00B9 F8              504                     MOV     R0,A
                     505     ;        else                       limit = STKP[current+1];
                     506     ;
                     507     ;        while (i != limit)  {
00BA                 508     ?C0009:
00BA E8              509                     MOV     A,R0
00BB 6D              510                     XRL     A,R5
00BC 60E0            511                     JZ      ?C0005
                     512     ;          SP++;
                     513     ;          i++;
                     514     ;          STACK[SP] = STACK[i];
00BE 08              515                     INC     R0
00BF E6              516                     MOV     A,@R0
00C0 C0E0            517                     PUSH    ACC
00C2 80F6            518                     SJMP    ?C0009
                     519     ;        }
                     520     ;      }
00C4                 521     ?C0011:
                     522     ;
                     523     ;      while (current > next)  {
00C4 E50C            524                     MOV     A,?RTX_CURRENTTASK
00C6 D3              525                     SETB    C
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/27/2008 15:34:43 PAGE     9

00C7 9F              526                     SUBB    A,R7
00C8 4027            527                     JC      ?C0012
                     528             
00CA E50C            529                     MOV     A,?RTX_CURRENTTASK
00CC 2400     F      530                     ADD     A,#?RTX?TASKSP?S+1
00CE F8              531                     MOV     R0,A
00CF E6              532                     MOV     A,@R0
                     533     ;        if (current == (MAXTASKN)) i = RAMTOP;
                     534     ;        else                       i = STKP[current+1];
00D0 AE0C            535                     MOV     R6,?RTX_CURRENTTASK
00D2 BE0002   F      536                     CJNE    R6,#?RTX_MAXTASKN,?C0013
00D5 74FF            537                     MOV     A,#RAMTOP
00D7                 538     ?C0013:
00D7 FD              539                     MOV     R5,A
                     540     ;        limit = STKP[current];
00D8 18              541                     DEC     R0
00D9 E6              542                     MOV     A,@R0
00DA CD              543                     XCH     A,R5
00DB F8              544                     MOV     R0,A
                     545     ;
                     546     ;        while (SP != limit)  {
00DC                 547     ?C0015:
00DC E581            548                     MOV     A,SP
00DE 6D              549                     XRL     A,R5
00DF 6006            550                     JZ      ?C0016
                     551     ;          STACK[i] = STACK[SP];
                     552     ;          i--;
                     553     ;          SP--;
00E1 D0E0            554                     POP     ACC
00E3 F6              555                     MOV     @R0,A
00E4 18              556                     DEC     R0
                     557     
00E5 80F5            558                     SJMP    ?C0015
00E7                 559     ?C0016:
                     560     ;        }
                     561     ;        STKP[current] = i;
00E7 E50C            562                     MOV     A,?RTX_CURRENTTASK
00E9 2400     F      563                     ADD     A,#?RTX?TASKSP?S
00EB C8              564                     XCH     A,R0
00EC F6              565                     MOV     @R0,A
                     566     ;        current--;
00ED 150C            567                     DEC     ?RTX_CURRENTTASK
00EF 80D3            568                     SJMP    ?C0011
00F1                 569     ?C0012:
                     570     ;      }
                     571     
                     572     ;      RoundRobinTime = ?RTX_TIMESHARING
                     573     IF (TIMESHARING)
00F1 750D05          574                     MOV     ?RTX_ROBINTIME,#TIMESHARING
                     575     ENDIF
                     576              
                     577     ;       if (STATE[current].st & K_ROBIN)  goto RobinOn;
00F4 E50C            578                     MOV     A,?RTX_CURRENTTASK
00F6 23              579                     RL      A
00F7 2400     F      580                     ADD     A,#?RTX?TASKSTATE?S+1
00F9 F8              581                     MOV     R0,A
00FA 7F04            582                     MOV     R7,#SIG_EVENT
00FC C2AF            583                     CLR     EA
00FE E6              584                     MOV     A,@R0
                     585     IF (TIMESHARING)
00FF 10E61E          586                     JBC     ACC.B_ROBIN,RobinOn
                     587     ENDIF
                     588     ;       if ((STATE[current].st & K_SIG) && (STATE[current].st & SIG_EVENT)
                     589     ;          goto SignalOn;
0102 30E003          590                     JNB     ACC.B_WAITSIG,SignalOff
0105 10E20C          591                     JBC     ACC.B_SIGNAL,SignalOn
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/27/2008 15:34:43 PAGE    10

0108                 592     SignalOff:
                     593     ;       if ((STATE[current].st & K_TMO) && (STATE[current].st & TMO_EVENT)
                     594     ;          goto TimeOutOn;
0108 7F00            595                     MOV     R7,#0           ; No Event
010A 30E107          596                     JNB     ACC.B_WAITTIM,NoEvent
010D 30E304          597                     JNB     ACC.B_TIMEOUT,NoEvent
0110                 598     TimeOutOn:      
0110 7F08            599                     MOV     R7,#TMO_EVENT
0112 54F4            600                     ANL     A,#0F4H
0114                 601     SignalOn:
0114 C2E7            602     NoEvent:        CLR     ACC.B_RDY       ; Clear RDY bit
0116 C6              603                     XCH     A,@R0
0117 D2AF            604                     SETB    EA
                     605     
0119 5480            606                     ANL     A,#K_RDY
011B 4207            607                     ORL     AR7,A
                     608     IF (TIMESHARING <> 0)
                     609       IF (CODE_BANKING)
                                             POP     ACC
                                             CALL    ?B_RESTORE_BANK
                               ENDIF
011D C200     F      613                     CLR     ?RTX_TS_DELAY
011F 22              614                     RET
                     615     ELSE
                               IF (CODE_BANKING)
                                             POP     ACC
                                             JMP     ?B_RESTORE_BANK
                               ENDIF
                                             RET
                             ENDIF
                     622                     
                     623                     
                     624     
                     625     ;------------------------------------------------
                     626     IF (TIMESHARING <> 0)
0120 F6              627     RobinOn:        MOV     @R0,A
0121 D2AF            628                     SETB    EA
                     629     IF (CODE_BANKING)
                                             POP     ACC
                                             CALL    ?B_RESTORE_BANK
                             ENDIF

⌨️ 快捷键说明

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