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

📄 os_create.lst

📁 让Keil 的 RTX51 运行在 P89C669 让Keil 的 RTX51 运行在 P89C669
💻 LST
字号:
AX51 MACRO ASSEMBLER  OS_CREATE                                                             11/21/05 17:35:21 PAGE     1


MACRO ASSEMBLER AX51 V3.01
OBJECT MODULE PLACED IN .\Keil\os_create.obj
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\AX51.EXE OS\os_create.a51 MOD_MX51 SET(SMALL) DEBUG PRINT(.\Keil\os_create.lst) OB
                      JECT(.\Keil\os_create.obj) EP

LOC    OBJ             LINE     SOURCE

                          1     ;------------------------------------------------------------------------------
                          2     ;  This file is part of the RTX-51 TINY Real-Time Operating System Package
                          3     ;  Copyright KEIL ELEKTRONIK GmbH and Keil Software, Inc.  1991 - 2002
                          4     ;------------------------------------------------------------------------------
                          5     ;
                          6     ;  OS_CREATE.A51:  This module contains the OS_CREATE_TASK function call.
                          7     ;
                          8     ;  RTX51 TINY VERSION 2
                          9     ;
                         10     ;------------------------------------------------------------------------------
  REG                    11     TASKID       EQU        R7    ; for access in interrupt service routine
  REG                    12     P1                      EQU             R1
  REG                    13     P2                      EQU             R5
                         14     NAME    ?RTX51_TINY_OS_CREATE
                         15     
                         16     ;$include (os_defines.inc)
                    +1   17     ;------------------------------------------------------------------------------
                    +1   18     ;
                    +1   19     ;  OS_DEFINES.INC:  Defines  (a)  External References for OS routines
                    +1   20     ;                            (b)  Bits in TaskState
                    +1   21     ;
                    +1   22     ;  RTX51 TINY VERSION 2.0
                    +1   23     ;
                    +1   24     ;------------------------------------------------------------------------------
                    +1   25     EXTRN   NUMBER (?RTX_RAMTOP)            ; top of RAM for stack
                    +1   26     EXTRN   DATA   (?RTX_CURRENTTASK)       ; current running task
                    +1   27     EXTRN   ECODE   (os_switch_task)         ; perform a task switch
                    +1   28     
                    +1   29     EXTRN   HCONST (TASK_ENTRY)
                    +1   30     EXTRN   NUMBER (?RTX_MAXTASKN)            ; top of RAM for stack
                    +1   31     
------              +1   32     ?RTX?TASKSTATE?S  SEGMENT IDATA         ; table of task states
------              +1   33     ?RTX?TASKSP?S     SEGMENT IDATA         ; table of task stack pointers
                    +1   34     
                    +1   35     
                    +1   36     
                    +1   37     ; Internal Status Bits of Task State
                    +1   38     ; Bits in TaskState:
                    +1   39     ;  TaskState.0  = Wait for Signal
                    +1   40     ;  TaskState.1  = Wait for TimeOut
                    +1   41     ;  TaskState.2  = Signal Flag
                    +1   42     ;  TaskState.3  = TimeOut Flag
                    +1   43     ;  TaskState.4  = Task Ready (Wait for Running)
                    +1   44     ;  TaskState.5  = Task Active (enabled with os_create)
                    +1   45     ;  TaskState.6  = Round Robin Time Out
                    +1   46     ;  TaskState.7  = Run Flag
                    +1   47     
                    +1   48     ; byte mask definitions
 0001               +1   49     K_SIG           EQU     1
 0002               +1   50     K_TMO           EQU     2
 0004               +1   51     SIG_EVENT       EQU     4
 0008               +1   52     TMO_EVENT       EQU     8
 0010               +1   53     K_READY         EQU     16
 0020               +1   54     K_ACTIVE        EQU     32
 0040               +1   55     K_ROBIN         EQU     64
 0080               +1   56     K_IVL           EQU     128  ; not a task state bit; only used in os_wait
 0080               +1   57     RDY_EVENT       EQU     128  ; READY status flag
AX51 MACRO ASSEMBLER  OS_CREATE                                                             11/21/05 17:35:21 PAGE     2

 0080               +1   58     K_RDY           EQU     128  ; READY status flag
                    +1   59     
                    +1   60     ; bit position definitions
 0000               +1   61     B_WAITSIG       EQU     0
 0001               +1   62     B_WAITTIM       EQU     1
 0002               +1   63     B_SIGNAL        EQU     2
 0003               +1   64     B_TIMEOUT       EQU     3
 0004               +1   65     B_READY         EQU     4
 0005               +1   66     B_ACTIVE        EQU     5
 0006               +1   67     B_ROBIN         EQU     6
 0007               +1   68     B_IVL           EQU     7    ; not a task state bit; only used in os_wait
 0007               +1   69     B_RDY           EQU     7    ; READY status flag
                    +1   70     
                    +1   71     
 00A8.7             +1   72     EA      BIT     0AFH
 00A8.1             +1   73     ET0     BIT     0A9H
                         74     
                         75     
                         76     PUBLIC  _os_create_task
                         77     
                         78     
------                   79     ?RTX?CODE       SEGMENT ECODE
------                   80                     RSEG    ?RTX?CODE
                         81                     USING   0               ; Registerbank 0 for following code
                         82     
                         83     
                         84     ;  uchar os_create_task (uchar no)  {
                         85     ;    uchar i;
                         86     ;    uchar p1, p2;
                         87     ;---- Variable 'p1'  assigned to Register 'R1' ----
                         88     ;---- Variable 'p2'  assigned to Register 'R5' ----
                         89     ;---- Variable 'no'  assigned to Register 'R7' ----
                         90     ;---- Variable 'i'   assigned to Register 'R6' ----
                         91     ;
                         92     ; Returns 0xFF if the task number is too large
                         93     ;         0xFF if the task is already active
                         94     ;         0x00 if the task was inserted into the task list
                         95     ;
                         96     ;
                         97     ;    if (no > MAXTASKN)  return (0xff);
000000                   98     _os_create_task:
000000 EF                99                     MOV     A,TASKID                         
000001 D3               100                     SETB    C
000002 9400       E     101                     SUBB    A,#?RTX_MAXTASKN         
000004 4004             102                     JC      ?C0010
000006                  103     RETUTN_FF:
000006 7FFF             104                     MOV     R7,#0FFH                         
000008 A522             105                     ERET
00000A                  106     ?C0010:
                        107     ;    if (STATE[no].st & K_ACTIVE)  return (0xff);
00000A 7400       F     108                     MOV             A,#?RTX?TASKSTATE?S+1   
00000C 2F               109                     ADD             A,TASKID
00000D 2F               110                     ADD             A,TASKID
00000E F8               111                     MOV     R0,A
00000F E6               112                     MOV     A,@R0                            
                        113     
                        114     
000010 20E5F3           115                     JB      ACC.B_ACTIVE, RETUTN_FF
                        116     
                        117     ;    STATE[no].st |= K_ACTIVE + K_READY;
000013 C2AF             118                     CLR             EA
000015 E6               119                     MOV             A,@R0
000016 4430             120                     ORL             A,#K_ACTIVE+K_READY      
000018 F6               121                     MOV     @R0,A
000019 D2AF             122                     SETB    EA
                        123     ;
AX51 MACRO ASSEMBLER  OS_CREATE                                                             11/21/05 17:35:21 PAGE     3

                        124     ;    i = current;
00001B AE00       E     125                     MOV             R6,?RTX_CURRENTTASK
                        126     
00001D                  127     ?C0013_:
                        128     ;    while (i < no)  {
00001D EE               129                     MOV     A,R6
00001E C3               130                     CLR             C
00001F 9F               131                     SUBB    A,TASKID                        
000020 5024             132                     JNC     ?C0014                           
                        133     ;      i++;                                                     /* 当前任务号小于创建的

⌨️ 快捷键说明

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