📄 os_cpu_a.lst
字号:
C51 COMPILER V7.06 OS_CPU_A 07/29/2003 20:45:13 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE OS_CPU_A
OBJECT MODULE PLACED IN ..\keilc51\os_cpu_a.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE ..\keilc51\os_cpu_a.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\os_cpu_a.lst)
- SRC(.\os_cpu_a.SRC)
stmt level source
1 //=======================================================================================================
2 /*
3 * uC/OS-II
4 * The Real-Time Kernel
5 *
6 * (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
7 * All Rights Reserved
8 *
9 *
10 * 80x51 Specific code
11 * LARGE MEMORY MODEL
12 *
13 * Keil C51 V7.06a
14 *
15 * File : OS_CPU_a.C
16 * By : Lin FengGe
17 */
18 //=======================================================================================================
19
20 //=======================================================================================================
21 //#Lin@保护堆栈
22 /*
23 用户仿真堆栈:
24
25 -------------
26 | High Addr | <--使用xdata空间
27 -------------
28 | |
29 ----> | Stick | <--保护堆栈内容
30 | | |
31 | -------------
32 | | Count | <--用户仿真堆栈基地址,存放堆栈使用计数<-----
33 | ------------- |
34 | |
35 */
36 //==========|=====================================================================|======================
37 /* | |
38 系统堆栈: | |
39 | ------------- |
40 | | High Addr | <--idata |
41 | ------------- ----------------------
42 | | | <--当前任务SP ---->--| SP - UserSysSP_Start |
43 | | | | |
44 <---- | Stick | <--当前任务堆栈 ----------------------
45 | | |
46 | | |
47 ------------- |
48 | | <--UserSysSP_Start ---->-------->-----
49 | |
50 | System | <--系统使用
51 | |
52 -------------
53
54 */
C51 COMPILER V7.06 OS_CPU_A 07/29/2003 20:45:13 PAGE 2
55 //=======================================================================================================
56 //#Lin@恢复堆栈
57 /*
58 用户仿真堆栈:
59
60 -------------
61 | High Addr | <--使用xdata空间
62 -------------
63 | |
64 <---- | Stick | <--保护堆栈内容
65 | | |
66 | -------------
67 | | Count | <--用户仿真堆栈基地址,存放堆栈使用计数 ---->
68 | ------------- |
69 | |
70 */
71 //==========|=====================================================================|======================
72 /* | |
73 系统堆栈: | |
74 | ------------- |
75 | | High Addr | <--idata |
76 | ------------- -----------------
77 | | | <--高优任务SP <---<---- | UserSysSP_Start |
78 | | | | + Count |
79 ----> | Stick | <--高优任务堆栈 -----------------
80 | | |
81 | | |
82 ------------- |
83 | | <--UserSysSP_Start ---->-------->-----
84 | |
85 | System | <--系统使用
86 | |
87 -------------
88
89 */
90 //=======================================================================================================
91
92
93
94 //#define OS_CPU_GLOBALS
95 #include "includes.h"
96
97 //=======================================================================================================
98 //=======================================================================================================
99 #pragma asm
100
101 //#Lin@仿真keil c51中断生成入栈代码,参看.src文件
102
103 USERPUSHALL MACRO
104
105 PUSH ACC
106 PUSH B
107 PUSH DPH
108 PUSH DPL
109 PUSH PSW
110 MOV PSW,#00H
111 PUSH AR0
112 PUSH AR1
113 PUSH AR2
114 PUSH AR3
115 PUSH AR4
116 PUSH AR5
C51 COMPILER V7.06 OS_CPU_A 07/29/2003 20:45:13 PAGE 3
117 PUSH AR6
118 PUSH AR7
119
120 ENDM
121 #pragma endasm
122
123 #pragma asm
124
125 //#Lin@仿真keil c51中断生成出栈代码,参看.src文件
126
127 USERPOPALL MACRO
128
129 POP AR7
130 POP AR6
131 POP AR5
132 POP AR4
133 POP AR3
134 POP AR2
135 POP AR1
136 POP AR0
137 POP PSW
138 POP DPL
139 POP DPH
140 POP B
141 POP ACC
142
143 ENDM
144 #pragma endasm
145
146 //=======================================================================================================
147 //=======================================================================================================
148 //=======================================================================================================
149
150 //#Lin@任务级切换
151 //#Lin@其他子程序参看此处注释
152
153 void OSCtxSw(void) //using 3
154 {
155 1
156 1 OS_STK idata *UserSysStkSP; //#Lin@系统堆栈指针
157 1 OS_STK *UserUsrStkSP; //#Lin@用户仿真堆栈指针
158 1 INT8U UserStkCount; //#Lin@堆栈使用计数
159 1
160 1
161 1 #pragma asm
162 1
163 1 USERPUSHALL
164 1
165 1 #pragma endasm
166 1
167 1 // OSTCBCur ->OSTCBStkPtr = UsrStkSP;
168 1 //#Lin@指针操作,用户仿真堆栈填入内容
169 1
170 1 UserSysStkSP = UserSysSP_Start; //#Lin@获取系统堆栈基地址
171 1 UserStkCount = SP - UserSysSP_Start; //#Lin@获取堆栈使用范围
172 1 UserUsrStkSP = OSTCBCur ->OSTCBStkPtr; //#Lin@获取用户仿真堆栈基地址
173 1
174 1 // SP = UserSysSP_Start;//?
175 1
176 1 // UserUsrStkSP += UserStkCount;
177 1 *UserUsrStkSP = UserStkCount; //#Lin@存储计数
178 1
C51 COMPILER V7.06 OS_CPU_A 07/29/2003 20:45:13 PAGE 4
179 1 // OSTCBCur ->OSTCBStkPtr = UserUsrStkSP;
180 1 //#Lin@数据传输
181 1
182 1 do
183 1 {
184 2 UserUsrStkSP ++;
185 2 UserSysStkSP ++;
186 2 *UserUsrStkSP = *UserSysStkSP;
187 2 UserStkCount --;
188 2 }
189 1 while(UserStkCount != 0);
190 1
191 1
192 1 OSTaskSwHook();
193 1
194 1 OSTCBCur = OSTCBHighRdy;
195 1 OSPrioCur = OSPrioHighRdy;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -