?? os_core.lst
字號(hào):
C51 COMPILER V8.05a OS_CORE 03/10/2007 13:05:45 PAGE 1
C51 COMPILER V8.05a, 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 ROM(SMALL) DEBUG OBJECTEXTEND PRINT(.\Os_core.lst) OBJECT(.
-\Os_core.obj)
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.20.1
9 **
10 **
11 **--------------文件信息--------------------------------------------------------------------------------
12 **文 件 名: OS_CORE.C
13 **創(chuàng) 建 人: 陳明計(jì)
14 **最后修改日期: 2004年2月4日
15 **描 述: Small RTOS(51)與CPU無(wú)關(guān)的核心代碼
16 **
17 **--------------歷史版本信息----------------------------------------------------------------------------
18 ** 創(chuàng)建人: 陳明計(jì)
19 ** 版 本: V0.50~V1.00
20 ** 日 期: 2002年2月22日~2002年6月20日
21 ** 描 述: 基本完成Small RTOS核
22 **
23 **------------------------------------------------------------------------------------------------------
24 ** 修改人: 陳明計(jì)
25 ** 版 本: V1.10~V1.21
26 ** 日 期: 2002年9月1日~2003年1月23日
27 ** 描 述: 完善Small RTOS
28 **
29 **------------------------------------------------------------------------------------------------------
30 ** 修改人: 陳明計(jì)
31 ** 版 本: V1.20.0
32 ** 日 期: 2003年8月17日
33 ** 描 述: 增加支持任務(wù)動(dòng)態(tài)建立和刪除,函數(shù)功能向一般的RTOS靠齊
34 **
35 **------------------------------------------------------------------------------------------------------
36 ** 修改人: 陳明計(jì)
37 ** 版 本: V1.20.1
38 ** 日 期: 2004年2月4日
39 ** 描 述: 修改OSWait(K_SIG | K_TMO, x) 只能通過(guò)信號(hào)喚醒的bug。
40 **
41 **--------------當(dāng)前版本修訂------------------------------------------------------------------------------
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 V8.05a OS_CORE 03/10/2007 13:05:45 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 ** 函數(shù)名稱: OSInit
74 ** 功能描述: 系統(tǒng)變量初始化
75 ** 輸 入: 無(wú)
76 ** 輸 出: 無(wú)
77 ** 全局變量:
78 ** 調(diào)用模塊: 無(wú)
79 **
80 ** 作 者: 陳明計(jì)
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 ** 函數(shù)名稱: _OSTaskCreate
104 ** 功能描述: 創(chuàng)建任務(wù)
105 ** 輸 入: TaskID:任務(wù)ID
106 ** task :任務(wù)地址
107 ** ptos :任務(wù)堆棧,在51中為重入棧
108 ** 輸 出: 無(wú)
109 ** 全局變量:
110 ** 調(diào)用模塊: 無(wú)
111 **
112 ** 作 者: 陳明計(jì)
113 ** 日 期: 2003年8月3日
114 **-------------------------------------------------------------------------------------------------------
115 ** 修改人:
116 ** 日 期:
C51 COMPILER V8.05a OS_CORE 03/10/2007 13:05:45 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 ** 函數(shù)名稱: OSTaskDel
161 ** 功能描述: 刪除任務(wù)
162 ** 輸 入: TaskID:任務(wù)ID
163 ** 輸 出: 無(wú)
164 ** 全局變量:
165 ** 調(diào)用模塊: 無(wú)
166 **
167 ** 作 者: 陳明計(jì)
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 V8.05a OS_CORE 03/10/2007 13:05:45 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 ** 函數(shù)名稱: OSTaskResume
204 ** 功能描述: 恢復(fù)任務(wù)
205 ** 輸 入: TaskID : 任務(wù)ID
206 ** 輸 出: 無(wú)
207 ** 全局變量: OSTaskRuning
208 ** 調(diào)用模塊: 無(wú)
209 **
210 ** 作 者: 陳明計(jì)
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(); //開(kāi)始任務(wù)切換
237 1 }
238
239 /*********************************************************************************************************
240 ** 函數(shù)名稱: OS_TaskSuspend
C51 COMPILER V8.05a OS_CORE 03/10/2007 13:05:45 PAGE 5
241 ** 功能描述: 使指定任務(wù)休眠,但不進(jìn)行任務(wù)切換
242 ** 輸 入: TaskID : 任務(wù)ID
243 ** 輸 出: 無(wú)
244 ** 全局變量: OSWaitTick
245 ** 調(diào)用模塊: 無(wú)
246 **
247 ** 作 者: 陳明計(jì)
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 ** 函數(shù)名稱: OSTaskSuspend
278 ** 功能描述: 使指定任務(wù)休眠
279 ** 輸 入: TaskID : 任務(wù)ID
280 ** 輸 出: 無(wú)
281 ** 全局變量: OSWaitTick
282 ** 調(diào)用模塊: OS_TaskSuspend,OSSched
283 **
284 ** 作 者: 陳明計(jì)
285 ** 日 期: 2003年8月3日
286 **-------------------------------------------------------------------------------------------------------
287 ** 修改人:
288 ** 日 期:
289 **-------------------------------------------------------------------------------------------------------
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -