📄 os_cpu_a.lst
字号:
A51 MACRO ASSEMBLER OS_CPU_A 10/16/2006 15:27:52 PAGE 1
MACRO ASSEMBLER A51 V7.02
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 10/16/2006 15:27:52 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
000B D28E 119 SETB TR1
A51 MACRO ASSEMBLER OS_CPU_A 10/16/2006 15:27:52 PAGE 3
000D D2AF 120 SETB EA
121
000F 122 OSCPUARstStk:
123 ;-----------------
124 ;Get OSTCBHighRdy->OSTCBStkPtr to DPTR
125 ;-----------------
126
127 ;high byte is at low address
128
129 ;Move OSTCBHighRdy to dptr
000F 758300 F 130 MOV DPH,#HIGH(OSTCBHighRdy)
0012 758200 F 131 MOV DPL,#LOW (OSTCBHighRdy)
0015 E0 132 MOVX A,@DPTR
0016 F8 133 MOV R0,A
0017 A3 134 INC DPTR
0018 E0 135 MOVX A,@DPTR
0019 8883 136 MOV DPH,R0
001B F582 137 MOV DPL,A
138
139 ;Move OSTCBStkPtr to dptr
001D E0 140 MOVX A,@DPTR
001E F8 141 MOV R0,A
001F A3 142 INC DPTR
0020 E0 143 MOVX A,@DPTR
0021 8883 144 MOV DPH,R0
0023 F582 145 MOV DPL,A
146
147 ;-----------------
148 ;restore stack
149 ;-----------------
150
151 ;restore ?C_IBP
0025 E0 152 MOVX A,@DPTR
0026 F500 F 153 MOV ?C_IBP,A
154
155 ;restore simulated stack
0028 600A 156 JZ OSCPUASmltRstOver ;simulated stack size == 0, that is ?C_IBP == 0x100
002A 14 157 DEC A ;Let R0 point to ?C_IBP - 1
002B F8 158 MOV R0,A
002C F4 159 CPL A ;caculate copy rotation times, store in R1
002D F9 160 MOV R1,A
002E 161 OSCPUASmltRstStk:
002E 08 162 INC R0
002F A3 163 INC DPTR
0030 E0 164 MOVX A,@DPTR
0031 F6 165 MOV @R0,A
0032 D9FA 166 DJNZ R1,OSCPUASmltRstStk
0034 167 OSCPUASmltRstOver:
168
169 ;restore sp, sp = #stkBottom - 1 + "Hardware stack size".
0034 A3 170 INC DPTR
0035 E0 171 MOVX A,@DPTR ;now hardware stack size is stored in A
0036 7800 F 172 MOV R0,#StkBottom - 1 ;start of hardware stack defined by keilc system
0038 F9 173 MOV R1,A ;store rotation times in R1
0039 28 174 ADD A,R0 ;sp
003A F581 175 MOV SP,A
176
177 ;restore hardware stack
178 ;stack top is at high address
179 ;HardStk will never be empty
003C 180 OSCPUARstHardStk:
003C 08 181 INC R0
003D A3 182 INC DPTR
003E E0 183 MOVX A,@DPTR
003F F6 184 MOV @R0,A
0040 D9FA 185 DJNZ R1,OSCPUARstHardStk
A51 MACRO ASSEMBLER OS_CPU_A 10/16/2006 15:27:52 PAGE 4
186
187 ;restore registers
0042 D007 188 POP 07
0044 D006 189 POP 06
0046 D005 190 POP 05
0048 D004 191 POP 04
004A D003 192 POP 03
004C D002 193 POP 02
004E D001 194 POP 01
0050 D000 195 POP 00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -