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

📄 conf_tny.lst

📁 Keil单片机软件开发平台下的一个51系列单片机工程
💻 LST
📖 第 1 页 / 共 4 页
字号:
                     197     ; Table of Task Entry Pointers
                     198     ;------------------------------------------------
                     199     PUBLIC  ?RTX_TASKENTRY
                     200     
                     201     ?RTX?TASKENT?S  SEGMENT CODE
----                 202                     RSEG    ?RTX?TASKENT?S
0000                 203     ?RTX_TASKENTRY: DS      2
                     204     
                     205     ;------------------------------------------------
                     206     ; Table of Stack Pointers for each task
                     207     ;------------------------------------------------
                     208     PUBLIC  ?RTX_TASKSP
                     209     
                     210     ?RTX?TASKSP?S   SEGMENT IDATA
----                 211                     RSEG    ?RTX?TASKSP?S
0000                 212     ?RTX_TASKSP:    DS      1
                     213     
                     214     ;------------------------------------------------
                     215     ; Table of Task Timer/State Pointers
                     216     ;------------------------------------------------
                     217     PUBLIC  ?RTX_TASKSTATUS
                     218     
                     219     ?RTX?TASKSTATE?S  SEGMENT IDATA
----                 220                       RSEG    ?RTX?TASKSTATE?S
0000                 221     ?RTX_TASKSTATUS:
0000                 222     TimerVal:       DS      1       ; Task Timer (Software Timer for each task)
0001                 223     TaskState:      DS      1       ; Task Status (state of each Task)
                     224     
                     225     ; Definitions for Bits in Task State
                     226     ;  TaskState.0  = Wait for Signal
                     227     ;  TaskState.1  = Wait for TimeOut
                     228     ;  TaskState.2  = Signal Flag
                     229     ;  TaskState.3  = TimeOut Flag
                     230     ;  TaskState.4  = Task Ready (Wait for Running)
                     231     ;  TaskState.5  = Task Active (enabled with os_create)
                     232     ;  TaskState.6  = Round Robin Time Out
                     233     ;  TaskState.7  = Run Flag
                     234     
                     235     ; byte mask definitions
  0001               236     K_SIG           EQU     1
  0002               237     K_TMO           EQU     2
  0004               238     SIG_EVENT       EQU     4
  0008               239     TMO_EVENT       EQU     8
  0010               240     K_READY         EQU     16
  0020               241     K_ACTIVE        EQU     32
  0040               242     K_ROBIN         EQU     64
  0080               243     K_IVL           EQU     128  ; not a task state bit; only used in os_wait
  0080               244     RDY_EVENT       EQU     128  ; READY status flag
  0080               245     K_RDY           EQU     128  ; READY status flag
                     246     
                     247     ; bit position definitions
  0000               248     B_WAITSIG       EQU     0
  0001               249     B_WAITTIM       EQU     1
  0002               250     B_SIGNAL        EQU     2
  0003               251     B_TIMEOUT       EQU     3
  0004               252     B_READY         EQU     4
  0005               253     B_ACTIVE        EQU     5
  0006               254     B_ROBIN         EQU     6
  0007               255     B_IVL           EQU     7    ; not a task state bit; only used in os_wait
  0007               256     B_RDY           EQU     7
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/12/2006 14:23:47 PAGE     5

                     257     
                     258     
                     259     IF (TIMESHARING OR CPU_IDLE_CODE)
                             ?RTX?BITS       SEGMENT BIT
                                             RSEG    ?RTX?BITS
                             ENDIF
                     263     
                     264     IF (TIMESHARING)
                             ?RTX_TS_DELAY:  DBIT    1       ; Status bit set when task switch in progress
                             ENDIF
                     267     
                     268     IF (CPU_IDLE_CODE)
                             ?RTX_ISR_SIG:   DBIT    1       ; Status bit set when interrupt or os_set_signal
                             ENDIF
                     271     
                     272     
----                 273                     CSEG    AT      0BH
000B 020000   F      274                     JMP     TIMERINT
                     275     
                     276     ?RTX?CODE       SEGMENT CODE
----                 277                     RSEG    ?RTX?CODE
                     278                     USING   0               ; Registerbank 0 for following code
                     279     
                     280     IF (FREE_STACK <> 0)
0000                 281     ?RTX_STACKERROR:
                     282                     STACK_ERROR             ; User defined Stack Error Code
                     285     ENDIF
                     286     
0004                 287     HW_TIMER:       HW_TIMER_CODE
                     290     
0005                 291     TIMERINT:
                     292     
                     293     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
                     305     
0005 120000   F      306                     CALL    HW_TIMER        ; Enable Interrupts again.
                     307     
0008 85D00B          308                     MOV     ?RTX_SAVEPSW,PSW
000B 75D008          309                     MOV     PSW,#?RTX_REGISTERBANK
000E FA              310                     MOV     saveacc,A
                     311     ; Update 8051 Interrupt Timer
000F C28C            312                     CLR     TR0
0011 E58A            313                     MOV     A,TL0
0013 24FC            314                     ADD     A,#LOW (?RTX_CLOCK + 7)
0015 F58A            315                     MOV     TL0,A
0017 E58C            316                     MOV     A,TH0
0019 34E5            317                     ADDC    A,#HIGH (?RTX_CLOCK + 7)
001B F58C            318                     MOV     TH0,A
001D D28C            319                     SETB    TR0
                     320     
                     321     IF (FREE_STACK <> 0)
                     322     ; Check if enough free stack is available
001F EC              323                     MOV     A,currenttask
0020 2400     F      324                     ADD     A,#?RTX?TASKSP?S+1
0022 F8              325                     MOV     R0,A
0023 E6              326                     MOV     A,@R0
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/12/2006 14:23:47 PAGE     6

0024 BC0002   F      327                     CJNE    currenttask,#?RTX_MAXTASKN,checkstack
0027 74FF            328                     MOV     A,#RAMTOP
0029 C3              329     checkstack:     CLR     C
002A 9581            330                     SUBB    A,SP
002C B41400          331                     CJNE    A,#FREE_STACK,$+3
002F 40CF            332                     JC      ?RTX_STACKERROR
                     333     ENDIF
                     334     
                     335     ; Update & Check Task Timers
0031 7900     F      336                     MOV     R1,#?RTX_MAXTASKN+1
0033 7800     F      337                     MOV     R0,#?RTX?TASKSTATE?S
0035 16              338     TIMERLOOP:      DEC     @R0          ; Decrement timer
0036 E6              339                     MOV     A,@R0
0037 08              340                     INC     R0           ; advance to TaskState
0038 700B            341                     JNZ     NoTimeout
003A C2AF            342                     CLR     EA
003C E6              343                     MOV     A,@R0
003D 30E103          344                     JNB     ACC.B_WAITTIM,NoWaitTimeout
0040 4418            345                     ORL     A,#(K_READY+TMO_EVENT)
0042 F6              346                     MOV     @R0,A
0043 D2AF            347     NoWaitTimeout:  SETB    EA
0045 08              348     NoTimeout:      INC     R0           ; advance to TaskTimer
0046 D9ED            349                     DJNZ    R1,TIMERLOOP
                     350     
0048 EA              351                     MOV     A,saveacc
0049 8BD0            352                     MOV     PSW,savepsw
                     353                     USING   0               ; Registerbank 0 for following code
                     354     
                     355     IF (TIMESHARING == 0)
                     356     ; Round Robin Task Switching not required.  System Interrupt ends here
004B                 357     ?RTX?SET_ISR:   
                     358     IF (CPU_IDLE_CODE)
                                             SETB    ?RTX_ISR_SIG
                             ENDIF
004B 22              361                     RET     
                     362     ENDIF
                     363     
                     364     IF (TIMESHARING)
                             ; Round Robin Task Switching required.  Check if task generates timeout
                             ; Check for Round Robin Timeout on the current task
                                             JNB     ?RTX_TS_DELAY,CheckRobinTime
                             NoRobinTimeout: 
                             ?RTX?SET_ISR:   
                             IF (CPU_IDLE_CODE)
                                             SETB    ?RTX_ISR_SIG
                             ENDIF
                                             RET     
                             CheckRobinTime: DJNZ     ?RTX_ROBINTIME,NoRobinTimeout
                             
                             ?RTX_TASKSWITCHING:
                                             PUSH    ACC
                                             PUSH    PSW
                                             PUSH    B
                                             PUSH    DPH
                                             PUSH    DPL
                                             PUSH    AR0
                                             PUSH    AR1
                                             PUSH    AR2
                                             PUSH    AR3
                                             PUSH    AR4
                                             PUSH    AR5
                                             PUSH    AR6
                                             PUSH    AR7
                             IF (CODE_BANKING <> 0)
                                             PUSH    ?B_CURRENTBANK
                             ENDIF
A51 MACRO ASSEMBLER  CONF_TNY                                                             12/12/2006 14:23:47 PAGE     7

                             
                                             MOV     A,?RTX_CURRENTTASK
                                             RL      A
                                             ADD     A,#?RTX?TASKSTATE?S+1
                                             MOV     R0,A
                                             MOV     A,#K_ROBIN
                                             CLR     EA
                                             ORL     A,@R0
                                             MOV     @R0,A
                                             SETB    EA
                             IF (CODE_BANKING <> 0)
                                             SJMP    os_switch_task1
                             ENDIF

⌨️ 快捷键说明

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