📄 os_send_signal.lst
字号:
AX51 MACRO ASSEMBLER OS_SEND_SIGNAL 11/21/05 17:35:22 PAGE 1
MACRO ASSEMBLER AX51 V3.01
OBJECT MODULE PLACED IN .\Keil\os_send_signal.obj
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\AX51.EXE OS\os_send_signal.a51 MOD_MX51 SET(SMALL) DEBUG PRINT(.\Keil\os_send_sign
al.lst) OBJECT(.\Keil\os_send_signal.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_SEND_SIGNAL.A51: This module contains the OS_SEND_SIGNAL function
7 ;
8 ; RTX51 TINY VERSION 2
9 ;
10 ;------------------------------------------------------------------------------
11
12 NAME ?RTX51_TINY_OS_SEND_SIGNAL
13
14 ;$include (os_defines.inc)
+1 15 ;------------------------------------------------------------------------------
+1 16 ;
+1 17 ; OS_DEFINES.INC: Defines (a) External References for OS routines
+1 18 ; (b) Bits in TaskState
+1 19 ;
+1 20 ; RTX51 TINY VERSION 2.0
+1 21 ;
+1 22 ;------------------------------------------------------------------------------
+1 23 EXTRN NUMBER (?RTX_RAMTOP) ; top of RAM for stack
+1 24 EXTRN DATA (?RTX_CURRENTTASK) ; current running task
+1 25 EXTRN ECODE (os_switch_task) ; perform a task switch
+1 26
+1 27 EXTRN HCONST (TASK_ENTRY)
+1 28 EXTRN NUMBER (?RTX_MAXTASKN) ; top of RAM for stack
+1 29
------ +1 30 ?RTX?TASKSTATE?S SEGMENT IDATA ; table of task states
------ +1 31 ?RTX?TASKSP?S SEGMENT IDATA ; table of task stack pointers
+1 32
+1 33
+1 34
+1 35 ; Internal Status Bits of Task State
+1 36 ; Bits in TaskState:
+1 37 ; TaskState.0 = Wait for Signal
+1 38 ; TaskState.1 = Wait for TimeOut
+1 39 ; TaskState.2 = Signal Flag
+1 40 ; TaskState.3 = TimeOut Flag
+1 41 ; TaskState.4 = Task Ready (Wait for Running)
+1 42 ; TaskState.5 = Task Active (enabled with os_create)
+1 43 ; TaskState.6 = Round Robin Time Out
+1 44 ; TaskState.7 = Run Flag
+1 45
+1 46 ; byte mask definitions
0001 +1 47 K_SIG EQU 1
0002 +1 48 K_TMO EQU 2
0004 +1 49 SIG_EVENT EQU 4
0008 +1 50 TMO_EVENT EQU 8
0010 +1 51 K_READY EQU 16
0020 +1 52 K_ACTIVE EQU 32
0040 +1 53 K_ROBIN EQU 64
0080 +1 54 K_IVL EQU 128 ; not a task state bit; only used in os_wait
0080 +1 55 RDY_EVENT EQU 128 ; READY status flag
0080 +1 56 K_RDY EQU 128 ; READY status flag
+1 57
AX51 MACRO ASSEMBLER OS_SEND_SIGNAL 11/21/05 17:35:22 PAGE 2
+1 58 ; bit position definitions
0000 +1 59 B_WAITSIG EQU 0
0001 +1 60 B_WAITTIM EQU 1
0002 +1 61 B_SIGNAL EQU 2
0003 +1 62 B_TIMEOUT EQU 3
0004 +1 63 B_READY EQU 4
0005 +1 64 B_ACTIVE EQU 5
0006 +1 65 B_ROBIN EQU 6
0007 +1 66 B_IVL EQU 7 ; not a task state bit; only used in os_wait
0007 +1 67 B_RDY EQU 7 ; READY status flag
+1 68
+1 69
00A8.7 +1 70 EA BIT 0AFH
00A8.1 +1 71 ET0 BIT 0A9H
72
73
74 PUBLIC _os_send_signal
75 PUBLIC _isr_send_signal
76 EXTRN ECODE (?RTX?SET_ISR)
77
------ 78 ?RTX?CODE SEGMENT ECODE
------ 79 RSEG ?RTX?CODE
80 USING 0 ; Registerbank 0 for following code
81
82
000000 83 _os_send_signal:
000000 84 _isr_send_signal:
85 ; os_send_signal (uchar taskid) {
86 ; uchar data *p;
87 ;---- Variable 'taskid' assigned to Register 'R7' ----
88 ;---- Variable 'p' assigned to Register 'R0' ----
89 ; if (no > MAXTASKN) return (0xff);
000000 EF 90 MOV A,R7
000001 D3 91 SETB C
000002 9400 E 92 SUBB A,#?RTX_MAXTASKN
000004 4004 93 JC ??C0010
000006 7FFF 94 MOV R7,#0FFH
000008 A522 95 ERET
00000A 96 ??C0010:
97
98 ; p = &STATE[taskid].st;
00000A EF 99 MOV A,R7
00000B 23 100 RL A
00000C 2400 F 101 ADD A,#?RTX?TASKSTATE?S+1
00000E F8 102 MOV R0,A
00000F C2AF 103 CLR EA
000011 E6 104 MOV A,@R0
105 ;
106 ; if (*p & K_ACTIVE) {
000012 30E505 107 JNB ACC.B_ACTIVE,?C0026
108 ; if (*p & K_SIG) *p |= K_READY;
000015 30E002 109 JNB ACC.B_WAITSIG,?C0026
000018 D2E4 110 SETB ACC.B_READY
111 ; }
00001A 112 ?C0026:
113 ; *p |= SIG_EVENT;
00001A D2E2 114 SETB ACC.B_SIGNAL
00001C C6 115 XCH A,@R0
00001D D2AF 116 SETB EA
00001F 7F00 117 MOV R7,#0
000021 30E201 118 JNB ACC.B_SIGNAL,NO_SIG_PENDING
000024 0F 119 INC R7
000025 A502000000 E 120 NO_SIG_PENDING: EJMP ?RTX?SET_ISR
121
122 END
AX51 MACRO ASSEMBLER OS_SEND_SIGNAL 11/21/05 17:35:22 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
??C0010. . . . . . . . . . EC ADDR 000AH R SEG=?RTX?CODE
?C0026 . . . . . . . . . . EC ADDR 001AH R SEG=?RTX?CODE
?RTX51_TINY_OS_SEND_SIGNAL -- ---- -------
?RTX?CODE. . . . . . . . . EC SEG 00002AH REL=UNIT, ALN=BYTE
?RTX?SET_ISR . . . . . . . EC ADDR ------- EXT
?RTX?TASKSP?S. . . . . . . I SEG 000000H REL=UNIT, ALN=BYTE
?RTX?TASKSTATE?S . . . . . I SEG 000000H REL=UNIT, ALN=BYTE
?RTX_CURRENTTASK . . . . . D ADDR ------- EXT
?RTX_MAXTASKN. . . . . . . N NUMB ------- EXT
?RTX_RAMTOP. . . . . . . . N NUMB ------- EXT
_ISR_SEND_SIGNAL . . . . . EC ADDR 0000H R SEG=?RTX?CODE
_OS_SEND_SIGNAL. . . . . . EC ADDR 0000H R SEG=?RTX?CODE
ACC. . . . . . . . . . . . D ADDR 00E0H A
B_ACTIVE . . . . . . . . . N NUMB 0005H A
B_IVL. . . . . . . . . . . N NUMB 0007H A
B_RDY. . . . . . . . . . . N NUMB 0007H A
B_READY. . . . . . . . . . N NUMB 0004H A
B_ROBIN. . . . . . . . . . N NUMB 0006H A
B_SIGNAL . . . . . . . . . N NUMB 0002H A
B_TIMEOUT. . . . . . . . . N NUMB 0003H A
B_WAITSIG. . . . . . . . . N NUMB 0000H A
B_WAITTIM. . . . . . . . . N NUMB 0001H A
EA . . . . . . . . . . . . B ADDR 00A8H.7 A
ET0. . . . . . . . . . . . B ADDR 00A8H.1 A
K_ACTIVE . . . . . . . . . N NUMB 0020H A
K_IVL. . . . . . . . . . . N NUMB 0080H A
K_RDY. . . . . . . . . . . N NUMB 0080H A
K_READY. . . . . . . . . . N NUMB 0010H A
K_ROBIN. . . . . . . . . . N NUMB 0040H A
K_SIG. . . . . . . . . . . N NUMB 0001H A
K_TMO. . . . . . . . . . . N NUMB 0002H A
NO_SIG_PENDING . . . . . . EC ADDR 0025H R SEG=?RTX?CODE
OS_SWITCH_TASK . . . . . . EC ADDR ------- EXT
RDY_EVENT. . . . . . . . . N NUMB 0080H A
SIG_EVENT. . . . . . . . . N NUMB 0004H A
TASK_ENTRY . . . . . . . . HC ADDR ------- EXT
TMO_EVENT. . . . . . . . . N NUMB 0008H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -