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

📄 conf_tny.lst

📁 小型便携式温度计的源代码第三版
💻 LST
📖 第 1 页 / 共 4 页
字号:
0000                 200     ?RTX_TASKENTRY: DS      2
                     201     
                     202     ;------------------------------------------------
                     203     ; Table of Stack Pointers for each task
                     204     ;------------------------------------------------
                     205     PUBLIC  ?RTX_TASKSP
                     206     
                     207     ?RTX?TASKSP?S   SEGMENT IDATA
----                 208                     RSEG    ?RTX?TASKSP?S
0000                 209     ?RTX_TASKSP:    DS      1
                     210     
                     211     ;------------------------------------------------
                     212     ; Table of Task Timer/State Pointers
                     213     ;------------------------------------------------
                     214     PUBLIC  ?RTX_TASKSTATUS
                     215     
                     216     ?RTX?TASKSTATE?S  SEGMENT IDATA
----                 217                       RSEG    ?RTX?TASKSTATE?S
0000                 218     ?RTX_TASKSTATUS:
0000                 219     TimerVal:       DS      1       ; Task Timer (Software Timer for each task)
0001                 220     TaskState:      DS      1       ; Task Status (state of each Task)
                     221     
                     222     ; Definitions for Bits in Task State
                     223     ;  TaskState.0  = Wait for Signal
                     224     ;  TaskState.1  = Wait for TimeOut
                     225     ;  TaskState.2  = Signal Flag
                     226     ;  TaskState.3  = TimeOut Flag
                     227     ;  TaskState.4  = Task Ready (Wait for Running)
                     228     ;  TaskState.5  = Task Active (enabled with os_create)
                     229     ;  TaskState.6  = Round Robin Time Out
                     230     ;  TaskState.7  = Run Flag
                     231     
                     232     ; byte mask definitions
  0001               233     K_SIG           EQU     1
  0002               234     K_TMO           EQU     2
  0004               235     SIG_EVENT       EQU     4
  0008               236     TMO_EVENT       EQU     8
  0010               237     K_READY         EQU     16
  0020               238     K_ACTIVE        EQU     32
  0040               239     K_ROBIN         EQU     64
  0080               240     K_IVL           EQU     128  ; not a task state bit; only used in os_wait
  0080               241     RDY_EVENT       EQU     128  ; READY status flag
  0080               242     K_RDY           EQU     128
                     243     
                     244     ; bit position definitions
  0000               245     B_WAITSIG       EQU     0
  0001               246     B_WAITTIM       EQU     1
  0002               247     B_SIGNAL        EQU     2
  0003               248     B_TIMEOUT       EQU     3
  0004               249     B_READY         EQU     4
  0005               250     B_ACTIVE        EQU     5
  0006               251     B_ROBIN         EQU     6
  0007               252     B_IVL           EQU     7    ; not a task state bit; only used in os_wait
  0007               253     B_RDY           EQU     7
                     254     
                     255     
                     256     IF (TIMESHARING OR CPU_IDLE_CODE)
A51 MACRO ASSEMBLER  CONF_TNY                                                             02/14/2009 15:37:26 PAGE     5

                     257     ?RTX?BITS       SEGMENT BIT
----                 258                     RSEG    ?RTX?BITS
                     259     ENDIF
                     260     
                     261     IF (TIMESHARING)
0000                 262     ?RTX_TS_DELAY:  DBIT    1       ; Status bit set when task switch in progress
                     263     ENDIF
                     264     
                     265     IF (CPU_IDLE_CODE)
                             ?RTX_ISR_SIG:   DBIT    1       ; Status bit set when interrupt or os_set_signal
                             ENDIF
                     268     
                     269     
----                 270                     CSEG    AT      0BH
000B 020000   F      271                     JMP     TIMERINT
                     272     
                     273     ?RTX?CODE       SEGMENT CODE
----                 274                     RSEG    ?RTX?CODE
                     275                     USING   0               ; Registerbank 0 for following code
                     276     
                     277     IF (FREE_STACK <> 0)
0000                 278     ?RTX_STACKERROR:
                     279                     STACK_ERROR             ; User defined Stack Error Code
                     282     ENDIF
                     283     
0004                 284     HW_TIMER:       HW_TIMER_CODE
                     287     
0005                 288     TIMERINT:
                     289     
                     290     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
                     302     
0005 120000   F      303                     CALL    HW_TIMER        ; Enable Interrupts again.
                     304     
0008 85D00B          305                     MOV     ?RTX_SAVEPSW,PSW
000B 75D008          306                     MOV     PSW,#?RTX_REGISTERBANK
000E AAE0            307                     MOV     saveacc,ACC     ; ACC required by some Cygnal devices
                     308     ; Update 8051 Interrupt Timer
0010 C28C            309                     CLR     TR0
0012 E58A            310                     MOV     A,TL0
0014 245F            311                     ADD     A,#LOW (?RTX_CLOCK + 7)
0016 F58A            312                     MOV     TL0,A
0018 E58C            313                     MOV     A,TH0
001A 349E            314                     ADDC    A,#HIGH (?RTX_CLOCK + 7)
001C F58C            315                     MOV     TH0,A
001E D28C            316                     SETB    TR0
                     317     
                     318     IF (FREE_STACK <> 0)
                     319     ; Check if enough free stack is available
0020 EC              320                     MOV     A,currenttask
0021 2400     F      321                     ADD     A,#?RTX?TASKSP?S+1
0023 F8              322                     MOV     R0,A
0024 E6              323                     MOV     A,@R0
0025 BC0002   F      324                     CJNE    currenttask,#?RTX_MAXTASKN,checkstack
0028 747F            325                     MOV     A,#RAMTOP
002A C3              326     checkstack:     CLR     C
A51 MACRO ASSEMBLER  CONF_TNY                                                             02/14/2009 15:37:26 PAGE     6

002B 9581            327                     SUBB    A,SP
002D B41400          328                     CJNE    A,#FREE_STACK,$+3
0030 40CE            329                     JC      ?RTX_STACKERROR
                     330     ENDIF
                     331     
                     332     ; Update & Check Task Timers
0032 7900     F      333                     MOV     R1,#?RTX_MAXTASKN+1
0034 7800     F      334                     MOV     R0,#?RTX?TASKSTATE?S
0036 16              335     TIMERLOOP:      DEC     @R0          ; Decrement timer
0037 E6              336                     MOV     A,@R0
0038 08              337                     INC     R0           ; advance to TaskState
0039 700B            338                     JNZ     NoTimeout
003B C2AF            339                     CLR     EA
003D E6              340                     MOV     A,@R0
003E 30E103          341                     JNB     ACC.B_WAITTIM,NoWaitTimeout
0041 4418            342                     ORL     A,#(K_READY+TMO_EVENT)
0043 F6              343                     MOV     @R0,A
0044 D2AF            344     NoWaitTimeout:  SETB    EA
0046 08              345     NoTimeout:      INC     R0           ; advance to TaskTimer
0047 D9ED            346                     DJNZ    R1,TIMERLOOP
                     347     
0049 EA              348                     MOV     A,saveacc
004A 8BD0            349                     MOV     PSW,savepsw
                     350                     USING   0               ; Registerbank 0 for following code
                     351     
                     352     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
                     360     
                     361     IF (TIMESHARING)
                     362     ; Round Robin Task Switching required.  Check if task generates timeout
                     363     ; Check for Round Robin Timeout on the current task
004C 300001   F      364                     JNB     ?RTX_TS_DELAY,CheckRobinTime
004F                 365     NoRobinTimeout: 
004F                 366     ?RTX?SET_ISR:   
                     367     IF (CPU_IDLE_CODE)
                                             SETB    ?RTX_ISR_SIG
                             ENDIF
004F 22              370                     RET     
0050 D50DFC          371     CheckRobinTime: DJNZ     ?RTX_ROBINTIME,NoRobinTimeout
                     372     
0053                 373     ?RTX_TASKSWITCHING:
0053 C0E0            374                     PUSH    ACC
0055 C0D0            375                     PUSH    PSW
0057 C0F0            376                     PUSH    B
0059 C083            377                     PUSH    DPH
005B C082            378                     PUSH    DPL
005D C000            379                     PUSH    AR0
005F C001            380                     PUSH    AR1
0061 C002            381                     PUSH    AR2
0063 C003            382                     PUSH    AR3
0065 C004            383                     PUSH    AR4
0067 C005            384                     PUSH    AR5
0069 C006            385                     PUSH    AR6
006B C007            386                     PUSH    AR7
                     387     IF (CODE_BANKING <> 0)
                                             PUSH    ?B_CURRENTBANK
                             ENDIF
                     390     
006D E50C            391                     MOV     A,?RTX_CURRENTTASK
006F 23              392                     RL      A
A51 MACRO ASSEMBLER  CONF_TNY                                                             02/14/2009 15:37:26 PAGE     7

0070 2400     F      393                     ADD     A,#?RTX?TASKSTATE?S+1
0072 F8              394                     MOV     R0,A
0073 7440            395                     MOV     A,#K_ROBIN
0075 C2AF            396                     CLR     EA
0077 46              397                     ORL     A,@R0
0078 F6              398                     MOV     @R0,A
0079 D2AF            399                     SETB    EA
                     400     IF (CODE_BANKING <> 0)
                                             SJMP    os_switch_task1
                             ENDIF
                     403     ENDIF
                     404     
                     405     ;------------------------------------------------
                     406     ; Perform a Task-Switch
                     407     ;  void os_switch_task (void)
                     408     ;      uchar i;
                     409     ;      uchar limit;
                     410     
                     411     ;---- Variable 'current' assigned to Register 'R6' ----

⌨️ 快捷键说明

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