📄 os_cpu_a.lst
字号:
A51 MACRO ASSEMBLER OS_CPU_A 11/20/2008 19:25:22 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN .\OS_CPU_A.obj
ASSEMBLER INVOKED BY: f:\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 11/20/2008 19:25:22 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
103
0000 104 OSStartHighRdy:
105
106 ;-----------------
107 ; OSRunning = TURE
108 ;-----------------
109
110 ;because EA is not enabled. where in OSStartHighRdy set OSRunning to true is not important
0000 758300 F 111 MOV DPH,#HIGH (OSRunning)
0003 758200 F 112 MOV DPL,#LOW (OSRunning)
0006 7401 113 MOV A,#1
0008 F0 114 MOVX @DPTR,A
115
116 ;-----------------
117 ; TR0 = 1
118 ;-----------------
0009 D28C 119 SETB TR0
A51 MACRO ASSEMBLER OS_CPU_A 11/20/2008 19:25:22 PAGE 3
120
000B 121 OSCPUARstStk:
122 ;-----------------
123 ;Get OSTCBHighRdy->OSTCBStkPtr to DPTR
124 ;-----------------
125
126 ;high byte is at low address
127
128 ;Move OSTCBHighRdy to dptr
000B 758300 F 129 MOV DPH,#HIGH(OSTCBHighRdy)
000E 758200 F 130 MOV DPL,#LOW (OSTCBHighRdy)
0011 E0 131 MOVX A,@DPTR
0012 F8 132 MOV R0,A
0013 A3 133 INC DPTR
0014 E0 134 MOVX A,@DPTR
0015 8883 135 MOV DPH,R0
0017 F582 136 MOV DPL,A
137
138 ;Move OSTCBStkPtr to dptr
0019 E0 139 MOVX A,@DPTR
001A F8 140 MOV R0,A
001B A3 141 INC DPTR
001C E0 142 MOVX A,@DPTR
001D 8883 143 MOV DPH,R0
001F F582 144 MOV DPL,A
145
146 ;-----------------
147 ;restore stack
148 ;-----------------
149
150 ;restore ?C_IBP
0021 E0 151 MOVX A,@DPTR
0022 F500 F 152 MOV ?C_IBP,A
153
154 ;restore simulated stack
0024 600A 155 JZ OSCPUASmltRstOver ;simulated stack size == 0, that is ?C_IBP == 0x100
0026 14 156 DEC A ;Let R0 point to ?C_IBP - 1
0027 F8 157 MOV R0,A
0028 F4 158 CPL A ;caculate copy rotation times, store in R1
0029 F9 159 MOV R1,A
002A 160 OSCPUASmltRstStk:
002A 08 161 INC R0
002B A3 162 INC DPTR
002C E0 163 MOVX A,@DPTR
002D F6 164 MOV @R0,A
002E D9FA 165 DJNZ R1,OSCPUASmltRstStk
0030 166 OSCPUASmltRstOver:
167
168 ;restore sp, sp = #stkBottom - 1 + "Hardware stack size".
0030 A3 169 INC DPTR
0031 E0 170 MOVX A,@DPTR ;now hardware stack size is stored in A
0032 7800 F 171 MOV R0,#StkBottom - 1 ;start of hardware stack defined by keilc system
0034 F9 172 MOV R1,A ;store rotation times in R1
0035 28 173 ADD A,R0 ;sp
0036 F581 174 MOV SP,A
175
176 ;restore hardware stack
177 ;stack top is at high address
178 ;HardStk will never be empty
0038 179 OSCPUARstHardStk:
0038 08 180 INC R0
0039 A3 181 INC DPTR
003A E0 182 MOVX A,@DPTR
003B F6 183 MOV @R0,A
003C D9FA 184 DJNZ R1,OSCPUARstHardStk
185
A51 MACRO ASSEMBLER OS_CPU_A 11/20/2008 19:25:22 PAGE 4
186 ;restore registers
003E D007 187 POP 07
0040 D006 188 POP 06
0042 D005 189 POP 05
0044 D004 190 POP 04
0046 D003 191 POP 03
0048 D002 192 POP 02
004A D001 193 POP 01
004C D000 194 POP 00
004E D0D0 195 POP PSW
0050 D082 196 POP DPL
0052 D083 197 POP DPH
0054 D0F0 198 POP B
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -