📄 os_cpu_a.lst
字号:
A51 MACRO ASSEMBLER OS_CPU_A 01/10/2007 09:13:35 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN .\OS_CPU_A.obj
ASSEMBLER INVOKED BY: D:\Keil\C51\BIN\A51.EXE ..\uc_51\OS_CPU_A.ASM SET(SMALL) DEBUG PRINT(.\OS_CPU_A.lst) OBJECT(.\OS_C
PU_A.obj) EP
LOC OBJ LINE SOURCE
1 ;******************************************************************************************
***************
2 ;* uC/OS-II
3 ;* The Real-Time Kernel
4 ;*
5 ;* (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
6 ;* All Rights Reserved
7 ;*
8 ;*
9 ;* KeilC51 Specific code
10 ;* SMALL MEMORY MODEL
11 ;*
12 ;* File : OS_CPU_C.C
13 ;* By : Jean J. Labrosse
14 ;* Refer to Code Written By : Yang Yi (http://www.zlgmcu.com/philips/philips-em
bedsys.asp)
15 ;* Port to KeilC51 Small Mode By : Li Zhanglin (wzzlin@nankai.edu.cn)
16 ;******************************************************************************************
***************
17
18 ; ==========================================
19 ; ------------------ NOTE -----------------
20 ; ==========================================
21
22 ; ------------ abbreviation ----------------
23
24 ; Rst: restore
25 ; Stk: stack
26 ; Smlt: simulated
27
28 ; ----- OSTCBStk stored as following format ---
29
30 ; CONTENT START POSITION IN OSTCBStk
31 ; ---------- ----------------------
32 ; AR7
33 ; AR6
34 ; AR5
35 ; AR4
36 ; AR3
37 ; AR2
38 ; AR1
39 ; AR0
40 ; PSW
41 ; DPL
42 ; DPH
43 ; B
44 ; ACC
45 ; HARDWARE STACK CONTENT 2+SmltStkSize
46 ; HARDWARE STACK SIZE(INCLUDE REGISTERS) 1+SmltStkSize
47 ; SIMULATED STACK CONTENT 1
48 ; ?C_IBP 0
49
50 ; ==========================================
51 ; ------------------ MODULE ----------------
52 ; ==========================================
53 NAME OS_CPU_A
A51 MACRO ASSEMBLER OS_CPU_A 01/10/2007 09:13:35 PAGE 2
54
55
56
57 ; ==========================================
58 ; ------------------ SEGMENT --------------
59 ; ==========================================
60
61 ?PR?OSStartHighRdy?OS_CPU_A SEGMENT CODE
62 ?PR?OSCtxSw?OS_CPU_A SEGMENT CODE
63 ?PR?OSIntCtxSw?OS_CPU_A SEGMENT CODE
64
65 ; ===========================================
66 ; ------------------ EXTRN ------------------
67 ; ===========================================
68
69 EXTRN XDATA (OSTCBHighRdy)
70 EXTRN XDATA (OSTCBCur)
71 EXTRN XDATA (OSPrioCur)
72 EXTRN XDATA (OSPrioHighRdy)
73 EXTRN XDATA (OSRunning)
74
75 EXTRN DATA (?C_IBP)
76
77 EXTRN CODE (_?OSTaskSwHook)
78
79 ; ===========================================
80 ; ------------------ PUBLIC -----------------
81 ; ===========================================
82 PUBLIC OSStartHighRdy
83 PUBLIC OSCtxSw
84 PUBLIC OSIntCtxSw
85
86 ; ===========================================
87 ; ------------------ STACK ------------------
88 ; ===========================================
89 ;The SEGMENT ?STACK will combined will stack defined in startup.asm
90 ?STACK SEGMENT IDATA
---- 91 RSEG ?STACK
0000 92 StkBottom:
93
94 ; ===========================================
95 ; ------------------ FUNCTIONS --------------
96 ; ===========================================
97
98 ; -------------------------------------------
99 ; -------------- OSStartHighRdy() -----------
100 ; -------------------------------------------
101
---- 102 RSEG ?PR?OSStartHighRdy?OS_CPU_A
0000 103 OSStartHighRdy:
104
105 ;-----------------
106 ; OSRunning = TURE
107 ;-----------------
108
109 ;because EA is not enabled. where in OSStartHighRdy set OSRunning to true is not important
0000 758300 F 110 MOV DPH,#HIGH (OSRunning)
0003 758200 F 111 MOV DPL,#LOW (OSRunning)
0006 7401 112 MOV A,#1
0008 F0 113 MOVX @DPTR,A
114
115 ;-----------------
116 ; TR0 = 1
117 ;-----------------
0009 D28C 118 SETB TR0
119
A51 MACRO ASSEMBLER OS_CPU_A 01/10/2007 09:13:35 PAGE 3
000B 120 OSCPUARstStk:
121 ;-----------------
122 ;Get OSTCBHighRdy->OSTCBStkPtr to DPTR
123 ;-----------------
124
125 ;high byte is at low address
126
127 ;Move OSTCBHighRdy to dptr
000B 758300 F 128 MOV DPH,#HIGH(OSTCBHighRdy)
000E 758200 F 129 MOV DPL,#LOW (OSTCBHighRdy)
0011 E0 130 MOVX A,@DPTR
0012 F8 131 MOV R0,A
0013 A3 132 INC DPTR
0014 E0 133 MOVX A,@DPTR
0015 8883 134 MOV DPH,R0
0017 F582 135 MOV DPL,A
136
137 ;Move OSTCBStkPtr to dptr
0019 E0 138 MOVX A,@DPTR
001A F8 139 MOV R0,A
001B A3 140 INC DPTR
001C E0 141 MOVX A,@DPTR
001D 8883 142 MOV DPH,R0
001F F582 143 MOV DPL,A
144
145 ;-----------------
146 ;restore stack
147 ;-----------------
148
149 ;restore ?C_IBP
0021 E0 150 MOVX A,@DPTR
0022 F500 F 151 MOV ?C_IBP,A
152
153 ;restore simulated stack
0024 600A 154 JZ OSCPUASmltRstOver ;simulated stack size == 0, that is ?C_IBP == 0x100
0026 14 155 DEC A ;Let R0 point to ?C_IBP - 1
0027 F8 156 MOV R0,A
0028 F4 157 CPL A ;caculate copy rotation times, store in R1
0029 F9 158 MOV R1,A
002A 159 OSCPUASmltRstStk:
002A 08 160 INC R0
002B A3 161 INC DPTR
002C E0 162 MOVX A,@DPTR
002D F6 163 MOV @R0,A
002E D9FA 164 DJNZ R1,OSCPUASmltRstStk
0030 165 OSCPUASmltRstOver:
166
167 ;restore sp, sp = #stkBottom - 1 + "Hardware stack size".
0030 A3 168 INC DPTR
0031 E0 169 MOVX A,@DPTR ;now hardware stack size is stored in A
0032 7800 F 170 MOV R0,#StkBottom - 1 ;start of hardware stack defined by keilc system
0034 F9 171 MOV R1,A ;store rotation times in R1
0035 28 172 ADD A,R0 ;sp
0036 F581 173 MOV SP,A
174
175 ;restore hardware stack
176 ;stack top is at high address
177 ;HardStk will never be empty
0038 178 OSCPUARstHardStk:
0038 08 179 INC R0
0039 A3 180 INC DPTR
003A E0 181 MOVX A,@DPTR
003B F6 182 MOV @R0,A
003C D9FA 183 DJNZ R1,OSCPUARstHardStk
184
185 ;restore registers
A51 MACRO ASSEMBLER OS_CPU_A 01/10/2007 09:13:35 PAGE 4
003E D007 186 POP 07
0040 D006 187 POP 06
0042 D005 188 POP 05
0044 D004 189 POP 04
0046 D003 190 POP 03
0048 D002 191 POP 02
004A D001 192 POP 01
004C D000 193 POP 00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -