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

📄 conf_tny.lst

📁 基于C8051F310的485集线器
💻 LST
📖 第 1 页 / 共 4 页
字号:
                             ENDIF
                     205     
                     206     
                     207     ;------------------------------------------------
                     208     ; Table of Task Entry Pointers
                     209     ;------------------------------------------------
                     210     PUBLIC  ?RTX_TASKENTRY
                     211     
                     212     ?RTX?TASKENT?S  SEGMENT CODE
----                 213                     RSEG    ?RTX?TASKENT?S
0000                 214     ?RTX_TASKENTRY: DS      2
                     215     
                     216     ;------------------------------------------------
                     217     ; Table of Stack Pointers for each task
                     218     ;------------------------------------------------
                     219     PUBLIC  ?RTX_TASKSP
                     220     
                     221     ?RTX?TASKSP?S   SEGMENT IDATA
----                 222                     RSEG    ?RTX?TASKSP?S
0000                 223     ?RTX_TASKSP:    DS      1
                     224     
                     225     ;------------------------------------------------
                     226     ; Table of Task Timer/State Pointers
                     227     ;------------------------------------------------
                     228     PUBLIC  ?RTX_TASKSTATUS
                     229     
                     230     ?RTX?TASKSTATE?S  SEGMENT IDATA
----                 231                       RSEG    ?RTX?TASKSTATE?S
0000                 232     ?RTX_TASKSTATUS:
0000                 233     TimerVal:       DS      1       ; Task Timer (Software Timer for each task)
0001                 234     TaskState:      DS      1       ; Task Status (state of each Task)
                     235     
                     236     ; Definitions for Bits in Task State
                     237     ;  TaskState.0  = Wait for Signal
                     238     ;  TaskState.1  = Wait for TimeOut
                     239     ;  TaskState.2  = Signal Flag
                     240     ;  TaskState.3  = TimeOut Flag
                     241     ;  TaskState.4  = Task Ready (Wait for Running)
                     242     ;  TaskState.5  = Task Active (enabled with os_create)
                     243     ;  TaskState.6  = Round Robin Time Out
                     244     ;  TaskState.7  = Run Flag
                     245     
                     246     ; byte mask definitions
  0001               247     K_SIG           EQU     1
  0002               248     K_TMO           EQU     2
  0004               249     SIG_EVENT       EQU     4
  0008               250     TMO_EVENT       EQU     8
  0010               251     K_READY         EQU     16
  0020               252     K_ACTIVE        EQU     32
  0040               253     K_ROBIN         EQU     64
  0080               254     K_IVL           EQU     128  ; not a task state bit; only used in os_wait
  0080               255     RDY_EVENT       EQU     128  ; READY status flag
  0080               256     K_RDY           EQU     128  ; READY status flag
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/27/2008 15:34:43 PAGE     5

                     257     
                     258     ; bit position definitions
  0000               259     B_WAITSIG       EQU     0
  0001               260     B_WAITTIM       EQU     1
  0002               261     B_SIGNAL        EQU     2
  0003               262     B_TIMEOUT       EQU     3
  0004               263     B_READY         EQU     4
  0005               264     B_ACTIVE        EQU     5
  0006               265     B_ROBIN         EQU     6
  0007               266     B_IVL           EQU     7    ; not a task state bit; only used in os_wait
  0007               267     B_RDY           EQU     7
                     268     
                     269     
                     270     IF (TIMESHARING OR CPU_IDLE_CODE)
                     271     ?RTX?BITS       SEGMENT BIT
----                 272                     RSEG    ?RTX?BITS
                     273     ENDIF
                     274     
                     275     IF (TIMESHARING)
0000                 276     ?RTX_TS_DELAY:  DBIT    1       ; Status bit set when task switch in progress
                     277     ENDIF
                     278     
                     279     IF (CPU_IDLE_CODE)
0001                 280     ?RTX_ISR_SIG:   DBIT    1       ; Status bit set when interrupt or os_set_signal
                     281     ENDIF
                     282     
                     283     
----                 284                     CSEG    AT      0BH
000B 020000   F      285                     JMP     TIMERINT
                     286     
                     287     ?RTX?CODE       SEGMENT CODE
----                 288                     RSEG    ?RTX?CODE
                     289                     USING   0               ; Registerbank 0 for following code
                     290     
                     291     IF (FREE_STACK <> 0)
0000                 292     ?RTX_STACKERROR:
                     293                     STACK_ERROR             ; User defined Stack Error Code
                     296     ENDIF
                     297     
0004                 298     HW_TIMER:       HW_TIMER_CODE
                     301     
0005                 302     TIMERINT:
                     303     
                     304     IF (LONG_USR_INTR)
                                             PUSH    ACC
                                             MOV     A,PSW
                                             ANL     A,#018H
                                             XRL     A,#?RTX_REGISTERBANK
                                             JNZ     CONT_TIMINT
                             ; avoid recursive timer interrupt
                                             POP     ACC
                                             RETI            ; Return from Recursive Timer Interrupt
                             CONT_TIMINT:    POP     ACC
                             
                             ENDIF
                     316     
0005 120000   F      317                     CALL    HW_TIMER        ; Enable Interrupts again.
                     318     
0008 85D00B          319                     MOV     ?RTX_SAVEPSW,PSW
000B 75D008          320                     MOV     PSW,#?RTX_REGISTERBANK
000E FA              321                     MOV     saveacc,A
                     322     ; Update 8051 Interrupt Timer
000F C28C            323                     CLR     TR0
0011 E58A            324                     MOV     A,TL0
0013 240D            325                     ADD     A,#LOW (?RTX_CLOCK + 7)
0015 F58A            326                     MOV     TL0,A
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/27/2008 15:34:43 PAGE     6

0017 E58C            327                     MOV     A,TH0
0019 34F4            328                     ADDC    A,#HIGH (?RTX_CLOCK + 7)
001B F58C            329                     MOV     TH0,A
001D D28C            330                     SETB    TR0
                     331     
                     332     IF (FREE_STACK <> 0)
                     333     ; Check if enough free stack is available
001F EC              334                     MOV     A,currenttask
0020 2400     F      335                     ADD     A,#?RTX?TASKSP?S+1
0022 F8              336                     MOV     R0,A
0023 E6              337                     MOV     A,@R0
0024 BC0002   F      338                     CJNE    currenttask,#?RTX_MAXTASKN,checkstack
0027 74FF            339                     MOV     A,#RAMTOP
0029 C3              340     checkstack:     CLR     C
002A 9581            341                     SUBB    A,SP
002C B41400          342                     CJNE    A,#FREE_STACK,$+3
002F 40CF            343                     JC      ?RTX_STACKERROR
                     344     ENDIF
                     345     
                     346     ; Update & Check Task Timers
0031 7900     F      347                     MOV     R1,#?RTX_MAXTASKN+1
0033 7800     F      348                     MOV     R0,#?RTX?TASKSTATE?S
0035 16              349     TIMERLOOP:      DEC     @R0          ; Decrement timer
0036 E6              350                     MOV     A,@R0
0037 08              351                     INC     R0           ; advance to TaskState
0038 700B            352                     JNZ     NoTimeout
003A C2AF            353                     CLR     EA
003C E6              354                     MOV     A,@R0
003D 30E103          355                     JNB     ACC.B_WAITTIM,NoWaitTimeout
0040 4418            356                     ORL     A,#(K_READY+TMO_EVENT)
0042 F6              357                     MOV     @R0,A
0043 D2AF            358     NoWaitTimeout:  SETB    EA
0045 08              359     NoTimeout:      INC     R0           ; advance to TaskTimer
0046 D9ED            360                     DJNZ    R1,TIMERLOOP
                     361     
0048 EA              362                     MOV     A,saveacc
0049 8BD0            363                     MOV     PSW,savepsw
                     364                     USING   0               ; Registerbank 0 for following code
                     365     
                     366     IF (TIMESHARING == 0)
                             ; Round Robin Task Switching not required.  System Interrupt ends here
                             ?RTX?SET_ISR:   
                             IF (CPU_IDLE_CODE)
                                             SETB    ?RTX_ISR_SIG
                             ENDIF
                                             RET     
                             ENDIF
                     374     
                     375     IF (TIMESHARING)
                     376     ; Round Robin Task Switching required.  Check if task generates timeout
                     377     ; Check for Round Robin Timeout on the current task
004B 300003   F      378                     JNB     ?RTX_TS_DELAY,CheckRobinTime
004E                 379     NoRobinTimeout: 
004E                 380     ?RTX?SET_ISR:   
                     381     IF (CPU_IDLE_CODE)
004E D200     F      382                     SETB    ?RTX_ISR_SIG
                     383     ENDIF
0050 22              384                     RET     
0051 D50DFA          385     CheckRobinTime: DJNZ     ?RTX_ROBINTIME,NoRobinTimeout
                     386     
0054                 387     ?RTX_TASKSWITCHING:
0054 C0E0            388                     PUSH    ACC
0056 C0D0            389                     PUSH    PSW
0058 C0F0            390                     PUSH    B
005A C083            391                     PUSH    DPH
005C C082            392                     PUSH    DPL
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/27/2008 15:34:43 PAGE     7

005E C000            393                     PUSH    AR0
0060 C001            394                     PUSH    AR1
0062 C002            395                     PUSH    AR2
0064 C003            396                     PUSH    AR3
0066 C004            397                     PUSH    AR4
0068 C005            398                     PUSH    AR5
006A C006            399                     PUSH    AR6
006C C007            400                     PUSH    AR7
                     401     IF (CODE_BANKING <> 0)
                                             PUSH    ?B_CURRENTBANK
                             ENDIF
                     404     
006E E50C            405                     MOV     A,?RTX_CURRENTTASK
0070 23              406                     RL      A
0071 2400     F      407                     ADD     A,#?RTX?TASKSTATE?S+1
0073 F8              408                     MOV     R0,A
0074 7440            409                     MOV     A,#K_ROBIN
0076 C2AF            410                     CLR     EA
0078 46              411                     ORL     A,@R0
0079 F6              412                     MOV     @R0,A
007A D2AF            413                     SETB    EA
                     414     IF (CODE_BANKING <> 0)
                                             SJMP    os_switch_task1
                             ENDIF
                     417     ENDIF
                     418     
                     419     ;------------------------------------------------

⌨️ 快捷键说明

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