📄 os_wait.lst
字号:
AX51 MACRO ASSEMBLER OS_WAIT 11/21/05 17:35:21 PAGE 1
MACRO ASSEMBLER AX51 V3.01
OBJECT MODULE PLACED IN .\Keil\os_wait.obj
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\AX51.EXE OS\os_wait.A51 MOD_MX51 SET(SMALL) DEBUG PRINT(.\Keil\os_wait.lst) OBJECT
(.\Keil\os_wait.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_WAIT.A51: This module contains the OS_WAIT function call.
7 ;
8 ; RTX51 TINY VERSION 2
9 ;
10 ;------------------------------------------------------------------------------
11
12 NAME ?RTX51_TINY_OS_WAIT
13
14
15 ;$include (os_defines.inc)
+1 16 ;------------------------------------------------------------------------------
+1 17 ;
+1 18 ; OS_DEFINES.INC: Defines (a) External References for OS routines
+1 19 ; (b) Bits in TaskState
+1 20 ;
+1 21 ; RTX51 TINY VERSION 2.0
+1 22 ;
+1 23 ;------------------------------------------------------------------------------
+1 24 EXTRN NUMBER (?RTX_RAMTOP) ; top of RAM for stack
+1 25 EXTRN DATA (?RTX_CURRENTTASK) ; current running task
+1 26 EXTRN ECODE (os_switch_task) ; perform a task switch
+1 27
+1 28 EXTRN HCONST (TASK_ENTRY)
+1 29 EXTRN NUMBER (?RTX_MAXTASKN) ; top of RAM for stack
+1 30
------ +1 31 ?RTX?TASKSTATE?S SEGMENT IDATA ; table of task states
------ +1 32 ?RTX?TASKSP?S SEGMENT IDATA ; table of task stack pointers
+1 33
+1 34
+1 35
+1 36 ; Internal Status Bits of Task State
+1 37 ; Bits in TaskState:
+1 38 ; TaskState.0 = Wait for Signal
+1 39 ; TaskState.1 = Wait for TimeOut
+1 40 ; TaskState.2 = Signal Flag
+1 41 ; TaskState.3 = TimeOut Flag
+1 42 ; TaskState.4 = Task Ready (Wait for Running)
+1 43 ; TaskState.5 = Task Active (enabled with os_create)
+1 44 ; TaskState.6 = Round Robin Time Out
+1 45 ; TaskState.7 = Run Flag
+1 46
+1 47 ; byte mask definitions
0001 +1 48 K_SIG EQU 1
0002 +1 49 K_TMO EQU 2
0004 +1 50 SIG_EVENT EQU 4
0008 +1 51 TMO_EVENT EQU 8
0010 +1 52 K_READY EQU 16
0020 +1 53 K_ACTIVE EQU 32
0040 +1 54 K_ROBIN EQU 64
0080 +1 55 K_IVL EQU 128 ; not a task state bit; only used in os_wait
0080 +1 56 RDY_EVENT EQU 128 ; READY status flag
0080 +1 57 K_RDY EQU 128 ; READY status flag
AX51 MACRO ASSEMBLER OS_WAIT 11/21/05 17:35:21 PAGE 2
+1 58
+1 59 ; bit position definitions
0000 +1 60 B_WAITSIG EQU 0
0001 +1 61 B_WAITTIM EQU 1
0002 +1 62 B_SIGNAL EQU 2
0003 +1 63 B_TIMEOUT EQU 3
0004 +1 64 B_READY EQU 4
0005 +1 65 B_ACTIVE EQU 5
0006 +1 66 B_ROBIN EQU 6
0007 +1 67 B_IVL EQU 7 ; not a task state bit; only used in os_wait
0007 +1 68 B_RDY EQU 7 ; READY status flag
+1 69
+1 70
00A8.7 +1 71 EA BIT 0AFH
00A8.1 +1 72 ET0 BIT 0A9H
73
74
75 PUBLIC _os_wait, _os_wait1, _os_wait2
76
------ 77 ?RTX?CODE SEGMENT ECODE
------ 78 RSEG ?RTX?CODE
79 USING 0 ; Registerbank 0 for following code
80 ;
81 ;------------------------------------------------
82 ; os_wait function
83 ;
84 ; os_wait (uchar typ, uchar timeout) {
000000 85 _os_wait:
000000 86 _os_wait1: ; entry point for 1 parameter
000000 87 _os_wait2: ; entry point for 2 parameters
88 ;---- Variable 'typ' assigned to Register 'B' ----
89 ;---- Variable 'timeout' assigned to Register 'R5' ----
90 ;---- Variable 'st' assigned to Register 'R7' ----
91 ;---- Variable 'twait' assigned to Register 'R6' ----
000000 8FF0 92 MOV B,R7
000002 E4 93 CLR A
94 ; st = 0;
000003 FF 95 MOV R7,A
96 ; twait = 0;
000004 FE 97 MOV R6,A
98 ;
000005 E500 E 99 MOV A,?RTX_CURRENTTASK
000007 23 100 RL A
000008 2400 F 101 ADD A,#?RTX?TASKSTATE?S
00000A F8 102 MOV R0,A
103
00000B C2A9 104 CLR ET0
105 ; if (typ & K_IVL) {
00000D 30F70D 106 JNB B.B_IVL,??C0005
107 ; st = TMO_EVENT;
000010 7F08 108 MOV R7,#TMO_EVENT
109 ; STATE[current].timer += timeout;
000012 E6 110 MOV A,@R0
000013 600B 111 JZ SetTimeout
000015 2D 112 ADD A,R5
000016 F6 113 MOV @R0,A
114 ; if (!CY) {
000017 6034 115 JZ no_wait1 ; zero means no wait
000019 5032 116 JNC no_wait1 ; no overflow (6.12.2002)
00001B 8007 117 SJMP wait ; overflow (6.12.2002)
118
00001D 30F106 119 ??C0005: JNB B.B_WAITTIM,??C0007
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -