📄 os_core.lst
字号:
C51 COMPILER V8.08 OS_CORE 10/17/2008 09:11:32 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE OS_CORE
OBJECT MODULE PLACED IN .\OS_CORE.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\OS\OS_CORE.C DEBUG OBJECTEXTEND PRINT(.\OS_CORE.lst) OBJECT(.\OS_CORE.ob
-j)
line level source
1 /*********************************************************************************************************
2 ** Small RTOS(51)
3 ** The Real-Time Kernel(For Keil c51)
4 **
5 ** (c) Copyright 2002-2003, chenmingji
6 ** All Rights Reserved
7 **
8 ** V1.12.1
9 **
10 **
11 **--------------文件信息--------------------------------------------------------------------------------
12 **文 件 名: OS_CORE.C
13 **创 建 人: 陈明计
14 **最后修改日期: 2003年2月5日
15 **描 述: Small RTOS(51)与CPU无关的核心代码
16 **
17 **--------------历史版本信息----------------------------------------------------------------------------
18 ** 创建人: 陈明计
19 ** 版 本: V0.50
20 ** 日 期: 2002年2月22日
21 ** 描 述: 原始版本
22 **
23 **------------------------------------------------------------------------------------------------------
24 ** 修改人: 陈明计
25 ** 版 本: V0.51
26 ** 日 期: 2002年3月10日
27 ** 描 述: 修改函数OSWait使其占用资源更少,兼容性更好
28 **
29 **------------------------------------------------------------------------------------------------------
30 ** 修改人: 陈明计
31 ** 版 本: V0.52
32 ** 日 期: 2002年5月9日
33 ** 描 述: 更正函数OSWait的返回值错误
34 **
35 **------------------------------------------------------------------------------------------------------
36 ** 修改人: 陈明计
37 ** 版 本: V0.60
38 ** 日 期: 2002年5月10日
39 ** 描 述: 使所有函数在keil c51可以重入
40 **
41 **------------------------------------------------------------------------------------------------------
42 ** 修改人: 陈明计
43 ** 版 本: V1.00
44 ** 日 期: 2002年6月20日
45 ** 描 述: 使用户可以进行更多的配置
46 **
47 **------------------------------------------------------------------------------------------------------
48 ** 修改人: 陈明计
49 ** 版 本: V1.10
50 ** 日 期: 2002年9月1日
51 ** 描 述: 根据当前版本进行一些必要改变
52 **
53 **------------------------------------------------------------------------------------------------------
54 ** 修改人: 陈明计
C51 COMPILER V8.08 OS_CORE 10/17/2008 09:11:32 PAGE 2
55 ** 日 期: 2002年9月4日
56 ** 版 本: V1.10.1
57 ** 描 述: 更正OSTimeTick的Bug,它在keil c51中不会有问题,但移植的其它系统可能出错。
58 ** 统一了一下格式。
59 **------------------------------------------------------------------------------------------------------
60 ** 修改人: 陈明计
61 ** 版 本: V1.10.2
62 ** 日 期: 2002年9月9日
63 ** 描 述: 更正OSWait()的Bug,这个Bug造成在OSWait()以K_TMO为参数时,在极端情况下
64 ** 可能锁死任务。
65 **------------------------------------------------------------------------------------------------------
66 ** 修改人: 陈明计
67 ** 版 本: V1.10.4
68 ** 日 期: 2002年10月5日
69 ** 描 述: 显示初始化变量OSTaskID和OSNextTaskID
70 **
71 **------------------------------------------------------------------------------------------------------
72 ** 修改人: 陈明计
73 ** 版 本: V1.10.5
74 ** 日 期: 2002年10月19日
75 ** 描 述: 修改函数OSIntExit()和OSSched()在允许中断管理代码的BUG,它在用户
76 ** 程序逻辑不太正常时可能引起系统崩溃。更正2002年9月9日修订带来的
77 ** 新Bug。
78 **------------------------------------------------------------------------------------------------------
79 ** 修改人: 陈明计
80 ** 版 本: V1.11.0
81 ** 日 期: 2002年12月2日
82 ** 描 述: 根据新版本需求更改开、关中断代码,增加注释;更正OSWait()的Bug,
83 ** 这个Bug造成在OSWait()以(K_TMO|K_SIG)为参数时,在极端情况下
84 ** 可能锁死任务。
85 **
86 **------------------------------------------------------------------------------------------------------
87 ** 修改人: 陈明计
88 ** 版 本: V1.12.0
89 ** 日 期: 2003年1月23日
90 ** 描 述: 用户可以使用全部16个任务,增加代码可靠性
91 **
92 **------------------------------------------------------------------------------------------------------
93 ** 修改人: 陈明计
94 ** 版 本: V1.12.1
95 ** 日 期: 2003年1月23日
96 ** 描 述: 修正OSIntSendSignal()的bug
97 **
98 **--------------当前版本修订------------------------------------------------------------------------------
99 ** 修改人:
100 ** 日 期:
101 ** 描 述:
102 **
103 **------------------------------------------------------------------------------------------------------
104 ********************************************************************************************************/
105
106 #define IN_OS_CORE
107 #include "config.h"
108
109 #if EN_OS_INT_ENTER > 0
110 uint8 OSIntNesting;
111 #endif
112
113 uint8 data OSTaskID = 0;
114 uint8 data OSNextTaskID = 0;
115
116 uint8 OSWaitTick[OS_MAX_TASKS];
C51 COMPILER V8.08 OS_CORE 10/17/2008 09:11:32 PAGE 3
117 #if OS_MAX_TASKS < 9
118 uint8 OSTaskRuning = 0xff;
119 #else
uint16 OSTaskRuning = 0xffff;
#endif
122
123 uint8 const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00};
124 uint8 data Os_Enter_Sum = 0;
125
126
127 void OSSched(void);
128
129 /*********************************************************************************************************
130 ** 函数名称: OSIntSendSignal
131 ** 功能描述: 中断中给指定任务发送信号,既使指定任务就绪
132 ** 输 入: TaskId : 任务ID
133 ** 输 出: 无
134 ** 全局变量: OSTaskRuning
135 ** 调用模块: 无
136 **
137 ** 作 者: 陈明计
138 ** 日 期: 2002年6月20日
139 **-------------------------------------------------------------------------------------------------------
140 ** 修改人: 陈明计
141 ** 日 期: 2002年9月1日
142 **-------------------------------------------------------------------------------------------------------
143 ** 修改人: 陈明计
144 ** 日 期: 2002年9月4日
145 **-------------------------------------------------------------------------------------------------------
146 ** 修改人: 陈明计
147 ** 日 期: 2002年12月30日
148 **------------------------------------------------------------------------------------------------------
149 ** 修改人: 陈明计
150 ** 日 期: 2002年2月5日
151 **------------------------------------------------------------------------------------------------------
152 ** 修改人:
153 ** 日 期:
154 **------------------------------------------------------------------------------------------------------
155 ********************************************************************************************************/
156 void OSIntSendSignal(uint8 TaskId)
157
158 {
159 1 if (TaskId < OS_MAX_TASKS)
160 1 {
161 2 OS_ENTER_CRITICAL();
162 2 #if OS_MAX_TASKS < 9
163 2 OSTaskRuning |= OSMapTbl[TaskId];
164 2 #else
if (TaskId < 8)
{
((uint8 *)(&OSTaskRuning))[LOW_BYTE] |= OSMapTbl[TaskId];
}
else
{
((uint8 *)(&OSTaskRuning))[HIGH_BYTE] |= OSMapTbl[TaskId & 0x07];
}
#endif
174 2 OS_EXIT_CRITICAL();
175 2 }
176 1 }
177
178 /*********************************************************************************************************
C51 COMPILER V8.08 OS_CORE 10/17/2008 09:11:32 PAGE 4
179 ** 函数名称: OSSendSignal
180 ** 功能描述: 任务中给指定任务发送信号,既使指定任务就绪
181 ** 输 入: TaskId : 任务ID
182 ** 输 出: 无
183 ** 全局变量: 无
184 ** 调用模块: OSSched,OSIntSendSignal
185 **
186 ** 作 者: 陈明计
187 ** 日 期: 2002年6月20日
188 **-------------------------------------------------------------------------------------------------------
189 ** 修改人: 陈明计
190 ** 日 期: 2002年9月1日
191 **-------------------------------------------------------------------------------------------------------
192 ** 修改人:
193 ** 日 期:
194 **-------------------------------------------------------------------------------------------------------
195 ********************************************************************************************************/
196 void OSSendSignal(uint8 TaskId)
197
198 {
199 1 OSIntSendSignal(TaskId);
200 1 OSSched(); //开始任务切换
201 1 }
202
203 /*********************************************************************************************************
204 ** 函数名称: OSClearSignal
205 ** 功能描述: 清除指定任务信号,既使指定任务休眠
206 ** 输 入: TaskId : 任务ID
207 ** 输 出: 无
208 ** 全局变量: OSTaskRuning
209 ** 调用模块: 无
210 **
211 ** 作 者: 陈明计
212 ** 日 期: 2002年6月20日
213 **-------------------------------------------------------------------------------------------------------
214 ** 修改人: 陈明计
215 ** 日 期: 2002年9月1日
216 **-------------------------------------------------------------------------------------------------------
217 ** 修改人: 陈明计
218 ** 日 期: 2002年9月4日
219 **------------------------------------------------------------------------------------------------------
220 ** 修改人: 陈明计
221 ** 日 期: 2002年12月30日
222 **------------------------------------------------------------------------------------------------------
223 ** 修改人:
224 ** 日 期:
225 **-------------------------------------------------------------------------------------------------------
226 ********************************************************************************************************/
227
228 void OSClearSignal(uint8 TaskId)
229 {
230 1 if (TaskId < OS_MAX_TASKS)
231 1 {
232 2 OS_ENTER_CRITICAL();
233 2 #if OS_MAX_TASKS < 9
234 2 OSTaskRuning &= ~OSMapTbl[TaskId];
235 2 #else
if (TaskId < 8)
{
((uint8 *)(&OSTaskRuning))[LOW_BYTE] &= ~OSMapTbl[TaskId];
}
else
C51 COMPILER V8.08 OS_CORE 10/17/2008 09:11:32 PAGE 5
{
((uint8 *)(&OSTaskRuning))[HIGH_BYTE] &= ~OSMapTbl[TaskId & 0x07];
}
#endif
245 2 OS_EXIT_CRITICAL();
246 2 }
247 1 }
248
249 /*********************************************************************************************************
250 ** 函数名称: OSIntExit
251 ** 功能描述: 中断退出处理函数,在此进行中断后的任务切换
252 ** 输 入: 无
253 ** 输 出: 无
254 ** 全局变量: OSIntNesting,OSNextTaskID
255 ** 调用模块: OSIntCtxSw
256 **
257 ** 作 者: 陈明计
258 ** 日 期: 2002年6月20日
259 **-------------------------------------------------------------------------------------------------------
260 ** 修改人: 陈明计
261 ** 日 期: 2002年9月1日
262 **-------------------------------------------------------------------------------------------------------
263 ** 修改人: 陈明计
264 ** 日 期: 2002年9月4日
265 **------------------------------------------------------------------------------------------------------
266 ** 修改人: 陈明计
267 ** 日 期: 2002年10月19日
268 **------------------------------------------------------------------------------------------------------
269 ** 修改人: 陈明计
270 ** 日 期: 2002年12月2日
271 **------------------------------------------------------------------------------------------------------
272 ** 修改人: 陈明计
273 ** 日 期: 2002年12月30日
274 **------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -