📄 os_core.lst
字号:
C51 COMPILER V6.23a OS_CORE 01/01/2001 02:30:55 PAGE 1
C51 COMPILER V6.23a, 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 BROWSE DEBUG OBJECTEXTEND PRINT(.\OS_CORE.lst) OBJECT(.\OS_
-CORE.obj)
stmt 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.20.1
9 **
10 **
11 **--------------文件信息--------------------------------------------------------------------------------
12 **文 件 名: OS_CORE.C
13 **创 建 人: 陈明计
14 **最后修改日期: 2004年2月4日
15 **描 述: Small RTOS(51)与CPU无关的核心代码
16 **
17 **--------------历史版本信息----------------------------------------------------------------------------
18 ** 创建人: 陈明计
19 ** 版 本: V0.50~V1.00
20 ** 日 期: 2002年2月22日~2002年6月20日
21 ** 描 述: 基本完成Small RTOS核
22 **
23 **------------------------------------------------------------------------------------------------------
24 ** 修改人: 陈明计
25 ** 版 本: V1.10~V1.21
26 ** 日 期: 2002年9月1日~2003年1月23日
27 ** 描 述: 完善Small RTOS
28 **
29 **------------------------------------------------------------------------------------------------------
30 ** 修改人: 陈明计
31 ** 版 本: V1.20.0
32 ** 日 期: 2003年8月17日
33 ** 描 述: 增加支持任务动态建立和删除,函数功能向一般的RTOS靠齐
34 **
35 **------------------------------------------------------------------------------------------------------
36 ** 修改人: 陈明计
37 ** 版 本: V1.20.1
38 ** 日 期: 2004年2月4日
39 ** 描 述: 修改OSWait(K_SIG | K_TMO, x) 只能通过信号唤醒的bug。
40 **
41 **--------------当前版本修订------------------------------------------------------------------------------
42 ** 修改人:
43 ** 日 期:
44 ** 描 述:
45 **
46 **------------------------------------------------------------------------------------------------------
47 ********************************************************************************************************/
48
49 #define IN_OS_CORE
50 #include "config.h"
51
52 uint8 data OSIntNesting;
53
54 uint8 data OSTaskID;
C51 COMPILER V6.23a OS_CORE 01/01/2001 02:30:55 PAGE 2
55 uint8 data OSNextTaskID;
56
57 uint8 data OSWaitTick[OS_MAX_TASKS];
58 #if OS_MAX_TASKS < 9
59 uint8 data OSTaskRuning[1];
60 uint8 data OSTaskCreated[1];
61 #else
uint8 data OSTaskRuning[2];
uint8 data OSTaskCreated[2];
#endif
65
66 uint8 const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00};
67 uint8 data Os_Enter_Sum;
68
69
70 void OSSched(void) small;
71
72 /*********************************************************************************************************
73 ** 函数名称: OSInit
74 ** 功能描述: 系统变量初始化
75 ** 输 入: 无
76 ** 输 出: 无
77 ** 全局变量:
78 ** 调用模块: 无
79 **
80 ** 作 者: 陈明计
81 ** 日 期: 2003年8月3日
82 **-------------------------------------------------------------------------------------------------------
83 ** 修改人:
84 ** 日 期:
85 **------------------------------------------------------------------------------------------------------
86 ********************************************************************************************************/
87 void OSInit(void) small
88 {
89 1 OSTaskRuning[0] = 0;
90 1 OSTaskCreated[0] = 0;
91 1 #if OS_MAX_TASKS > 8
OSTaskRuning[1] = 0;
OSTaskCreated[1] = 0;
#endif
95 1 Os_Enter_Sum = 0;
96 1 OSTaskID = OS_MAX_TASKS;
97 1 OSNextTaskID = 0;
98 1 OSIntNesting = 0;
99 1 OSCPUInit();
100 1 }
101
102 /*********************************************************************************************************
103 ** 函数名称: _OSTaskCreate
104 ** 功能描述: 创建任务
105 ** 输 入: TaskID:任务ID
106 ** task :任务地址
107 ** ptos :任务堆栈,在51中为重入栈
108 ** 输 出: 无
109 ** 全局变量:
110 ** 调用模块: 无
111 **
112 ** 作 者: 陈明计
113 ** 日 期: 2003年8月3日
114 **-------------------------------------------------------------------------------------------------------
115 ** 修改人:
116 ** 日 期:
C51 COMPILER V6.23a OS_CORE 01/01/2001 02:30:55 PAGE 3
117 **------------------------------------------------------------------------------------------------------
118 ********************************************************************************************************/
119 uint8 _OSTaskCreate(uint8 TaskID, void (code * task)(void), void xdata *ptos) small
120 {
121 1 if (TaskID < OS_MAX_TASKS)
122 1 {
123 2 OS_ENTER_CRITICAL();
124 2 #if OS_MAX_TASKS < 9
125 2 if ((OSTaskCreated[0] & OSMapTbl[TaskID]) != 0)
126 2 {
127 3 return FALSE;
128 3 }
129 2 OSTaskCreated[0] |= OSMapTbl[TaskID];
130 2 OSTaskRuning[0] |= OSMapTbl[TaskID];
131 2 #else
if (TaskID < 8)
{
if ((OSTaskCreated[0] & OSMapTbl[TaskID]) != 0)
{
return FALSE;
}
OSTaskCreated[0] |= OSMapTbl[TaskID];
OSTaskRuning[0] |= OSMapTbl[TaskID];
}
else
{
if ((OSTaskCreated[1] & OSMapTbl[TaskID & 0x07]) != 0)
{
return FALSE;
}
OSTaskCreated[1] |= OSMapTbl[TaskID & 0x07];
OSTaskRuning[1] |= OSMapTbl[TaskID & 0x07];
}
#endif
151 2 OSTaskStkInit(task, ptos, TaskID);
152 2 OSSched();
153 2 OS_EXIT_CRITICAL();
154 2 return TRUE;
155 2 }
156 1 return FALSE;
157 1 }
158
159 /*********************************************************************************************************
160 ** 函数名称: OSTaskDel
161 ** 功能描述: 删除任务
162 ** 输 入: TaskID:任务ID
163 ** 输 出: 无
164 ** 全局变量:
165 ** 调用模块: 无
166 **
167 ** 作 者: 陈明计
168 ** 日 期: 2003年8月3日
169 **-------------------------------------------------------------------------------------------------------
170 ** 修改人:
171 ** 日 期:
172 **------------------------------------------------------------------------------------------------------
173 ********************************************************************************************************/
174 uint8 OSTaskDel(uint8 TaskID) small
175 {
176 1 if (TaskID < OS_MAX_TASKS)
177 1 {
178 2 OS_ENTER_CRITICAL();
C51 COMPILER V6.23a OS_CORE 01/01/2001 02:30:55 PAGE 4
179 2 #if OS_MAX_TASKS < 9
180 2 OSTaskCreated[0] &= ~OSMapTbl[TaskID];
181 2 #else
if (TaskID < 8)
{
OSTaskCreated[0] &= ~OSMapTbl[TaskID];
}
else
{
OSTaskCreated[1] &= ~OSMapTbl[TaskID & 0x07];
}
#endif
191 2 OSTaskStkDel(TaskID);
192 2 OSSched();
193 2 OS_EXIT_CRITICAL();
194 2 return TRUE;
195 2 }
196 1 else
197 1 {
198 2 return FALSE;
199 2 }
200 1 }
201
202 /*********************************************************************************************************
203 ** 函数名称: OSTaskResume
204 ** 功能描述: 恢复任务
205 ** 输 入: TaskID : 任务ID
206 ** 输 出: 无
207 ** 全局变量: OSTaskRuning
208 ** 调用模块: 无
209 **
210 ** 作 者: 陈明计
211 ** 日 期: 2003年8月3日
212 **-------------------------------------------------------------------------------------------------------
213 ** 修改人:
214 ** 日 期:
215 **------------------------------------------------------------------------------------------------------
216 ********************************************************************************************************/
217 void OSTaskResume(uint8 TaskID) small
218 {
219 1 if (TaskID < OS_MAX_TASKS)
220 1 {
221 2 OS_ENTER_CRITICAL();
222 2 #if OS_MAX_TASKS < 9
223 2 OSTaskRuning[0] |= OSMapTbl[TaskID];
224 2 #else
if (TaskID < 8)
{
OSTaskRuning[0] |= OSMapTbl[TaskID];
}
else
{
OSTaskRuning[1] |= OSMapTbl[TaskID & 0x07];
}
#endif
234 2 OS_EXIT_CRITICAL();
235 2 }
236 1 OSSched(); //开始任务切换
237 1 }
238
239 /*********************************************************************************************************
240 ** 函数名称: OS_TaskSuspend
C51 COMPILER V6.23a OS_CORE 01/01/2001 02:30:55 PAGE 5
241 ** 功能描述: 使指定任务休眠,但不进行任务切换
242 ** 输 入: TaskID : 任务ID
243 ** 输 出: 无
244 ** 全局变量: OSWaitTick
245 ** 调用模块: 无
246 **
247 ** 作 者: 陈明计
248 ** 日 期: 2003年8月3日
249 **-------------------------------------------------------------------------------------------------------
250 ** 修改人:
251 ** 日 期:
252 **-------------------------------------------------------------------------------------------------------
253 ********************************************************************************************************/
254 void OS_TaskSuspend(uint8 TaskID) small
255 {
256 1 if (TaskID < OS_MAX_TASKS)
257 1 {
258 2 OS_ENTER_CRITICAL();
259 2 #if OS_MAX_TASKS < 9
260 2 OSTaskRuning[0] &= ~OSMapTbl[TaskID];
261 2 #else
if (TaskID < 8)
{
OSTaskRuning[0] &= ~OSMapTbl[TaskID];
}
else
{
OSTaskRuning[1] &= ~OSMapTbl[TaskID & 0x07];
}
#endif
271 2 OS_EXIT_CRITICAL();
272 2 }
273 1 }
274
275
276 /*********************************************************************************************************
277 ** 函数名称: OSTaskSuspend
278 ** 功能描述: 使指定任务休眠
279 ** 输 入: TaskID : 任务ID
280 ** 输 出: 无
281 ** 全局变量: OSWaitTick
282 ** 调用模块: OS_TaskSuspend,OSSched
283 **
284 ** 作 者: 陈明计
285 ** 日 期: 2003年8月3日
286 **-------------------------------------------------------------------------------------------------------
287 ** 修改人:
288 ** 日 期:
289 **-------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -