📄 ggt_kernel.lst
字号:
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 1
ARM COMPILER V2.32a, COMPILATION OF MODULE GGT_Kernel
OBJECT MODULE PLACED IN .\Output\GGT_Kernel.obj
COMPILER INVOKED BY: D:\Program Files\Keil\ARM\BIN\CA.exe Source\Kernel\GGT_Kernel.c ARM BROWSE DEBUG PRINT(.\LIST\GGT_K
-ERNEL.LST) TABS(4) OBJECT(.\Output\GGT_Kernel.obj)
stmt level source
1 /****************************************************************************************************
2 ** Gogoto OS
3 ** (c) Copyright 2007-2008, luyigui(卢益贵)
4 ** All Rights Reserved
5 ** V1.00.0
6 **
7 ** 狗狗兔嵌入式多任务系统(基于消息机制)
8 ** 绿城代码、GGT-OS、Gogoto OS、狗狗兔嵌入式、狗狗兔系统
9 ** QQ:48092788
10 **
11 **------------------文件信息------------------------------------------------------------------------
12 ** 文件名: GGT_Kernel.c
13 ** 创建人: 卢益贵
14 ** 日 期: 2007年12月8日
15 ** 版 本: V1.00.0
16 ** 描 述: Gogoto OS 与CPU无关的核心代码部分
17 **
18
19 **------------------修改记录------------------------------------------------------------------------
20 ** 修改人: 卢益贵
21 ** 版 本: V1.20.0
22 ** 日 期: 2008年1月30日
23 ** 描 述:
24 **
25
26 ****************************************************************************************************/
27
28 #include "GGT_OS.h"
29 #include "GGT_CPU.h"
30 #include "GGT_Func.h"
31 #include "GGT_Kernel.h"
32
33 _pOSTask
34 //系统默认任务变量,指向默认任务的数据区,默认任务在系统出世化时,具有最高优先级别,
35 //初始化完了以后,默认任务进行永久的休眠(挂起),直到用户任务都挂起后,担当工作的角色
36 pOSTskMain = NULL,
37 //当前任务变量
38 pOSTskNow = NULL,
39 //就绪任务队列变量
40 pOSTskReady = NULL,
41 //迟延等待任务队列变量
42 pOSTskDelay = NULL;
43
44 //指向任务数据机构数据的变量
45 _pOSTask pOSTask;
46
47 UINT32 *pOSBoxMsg;
48
49 /****************************************************************************************************
50 ** 函数名: OSTaskGetPrioTick
51 ** 描 述: 根据任务权限,计算任务权限节拍
52 ** 输 入: Prio:任务权限
53 ** 输 出: 任务权限节拍
54 ** 创建人: 卢益贵
55 ** 日 期: 2008年1月5日
56
57 **------------------修改记录------------------------------------------------------------------------
58 ** 修改人:
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 2
59 ** 日 期:
60 ** 说 明:
61 ** 原代码:
62 **--------------------------------------------------------------------------------------------------
63 ****************************************************************************************************/
64 UINT32 OSTaskGetPrioTick(UINT32 Prio)
65 {
66 1 if(0 == Prio)
67 1 return(255);
68 1 else
69 1 if(255 < Prio)
70 1 return(1);
71 1 else
72 1 return(256 - Prio);
73 1 }
74
75 /****************************************************************************************************
76 ** 函数名: OSTaskOrderByPrio
77 ** 描 述: 根据任务权限,告诉ListInsert函数是否在此处插入。
78 ** 输 入: pNode:当前节点
79 pNodeIns:欲插入的节点
80 ** 输 出: 1:允许在此处插入,其他不定义
81 ** 创建人: 卢益贵
82 ** 日 期: 2008年1月7日
83
84 **------------------修改记录------------------------------------------------------------------------
85 ** 修改人:
86 ** 日 期:
87 ** 说 明:
88 ** 原代码:
89 **--------------------------------------------------------------------------------------------------
90 ****************************************************************************************************/
91 BOOL OSTaskOrderByPrio(void *pNode, void *pNodeIns)
92 {
93 1 if(((_pOSTask)pNodeIns)->PrioTick < ((_pOSTask)pNode)->PrioTick)
94 1 return(1);
95 1 else
96 1 return(0);
97 1 }
98
99 /****************************************************************************************************
100 ** 函数名: OSTaskDataInit
101 ** 描 述: 执行新建任务的任务数据初始化
102 ** 输 入: pTask:任务数据区指针
103 ** 输 出: 无
104 ** 创建人: 卢益贵
105 ** 日 期: 2007年12月8日
106
107 **------------------修改记录------------------------------------------------------------------------
108 ** 修改人:
109 ** 日 期:
110 ** 说 明:
111 ** 原代码:
112 **--------------------------------------------------------------------------------------------------
113 ****************************************************************************************************/
114 void OSTaskDataInit(_pOSTask pTask)
115 {
116 1 pTask->pNext = NULL;
117 1 pTask->pTskStack = NULL;
118 1 pTask->pStack = NULL;
119 1 pTask->PrioTick = 0;
120 1 pTask->State = OS_STATE_TSK_NULL;
121 1 pTask->StateValue = 0;
122 1 pTask->pMsg = NULL;
123 1 }
124
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 3
125 /****************************************************************************************************
126 ** 函数名: OSTaskCreate
127 ** 描 述: 任务创建函数
128 ** 输 入: pTaskBody:带UINT32类型参数的任务主函数体
129 Prio:任务权限,必须在1~255之间,数值越大,权限越大
130 Mode:任务运行模式,取决于CPU提供的模式
131
132 ** 输 出: 任务ID号
133 ** 创建人: 卢益贵
134 ** 日 期: 2007年12月8日
135
136 **------------------修改记录------------------------------------------------------------------------
137 ** 修改人:
138 ** 日 期:
139 ** 说 明:
140 ** 原代码:
141 **--------------------------------------------------------------------------------------------------
142 ****************************************************************************************************/
143 UINT32 OSTaskUserCreate(void *pTaskBody, const UINT32 Prio, const UINT32 Mode, const UINT32 TaskParam)
144 {
145 1 _pOSTask pTask;
146 1
147 1 //独占CPU
148 1 OSIRQLock();
149 1
150 1 //分配任务空间
151 1 pTask = BoxAlloc(OSGetBoxTask());
152 1 OSTaskDataInit(pTask);
153 1 pTask->PrioTick = OSTaskGetPrioTick(Prio);
154 1 //分配堆栈空间
155 1 pTask->pStack = OSStackAlloc();
156 1 //初始化堆栈空间
157 1 pTask->pTskStack = OSStackInit(pTaskBody, pTask->pStack, Mode, TaskParam);
158 1 //初始化任务空间
159 1
160 1
161 1 //挂入就绪队列
162 1 ListAppend((void *)(&pOSTskReady), (void *)pTask);
163 1
164 1 //释放独占权
165 1 OSIRQUnlock();
166 1
167 1 return(pTask->ID);
168 1 }
169
170 /****************************************************************************************************
171 ** 函数名: OSTaskSelf
172 ** 描 述: 获取当前任务的ID
173 ** 输 入: 无
174 ** 输 出: 任务ID号
175 ** 创建人: 卢益贵
176 ** 日 期: 2007年12月8日
177
178 **------------------修改记录------------------------------------------------------------------------
179 ** 修改人:
180 ** 日 期:
181 ** 说 明:
182 ** 原代码:
183 **--------------------------------------------------------------------------------------------------
184 ****************************************************************************************************/
185 UINT32 OSTaskSelf(void)
186 {
187 1 return(pOSTskNow->ID);
188 1 }
189
190 /****************************************************************************************************
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 4
191 ** 函数名: OSTaskKill
192 ** 描 述: 摧毁指定ID的任务
193 ** 输 入: 任务ID号
194 ** 输 出: 无
195 ** 创建人: 卢益贵
196 ** 日 期: 2007年12月8日
197
198 **------------------修改记录------------------------------------------------------------------------
199 ** 修改人:
200 ** 日 期:
201 ** 说 明:
202 ** 原代码:
203 **--------------------------------------------------------------------------------------------------
204 ****************************************************************************************************/
205 void OSTaskKill(OS_ID TaskID)
206 {
207 1 _pOSTask pTask;
208 1
209 1 OSIRQLock();
210 1
211 1 pTask = &(pOSTask[TaskID - 1]);
212 1 //从队列中删除改任务
213 1 ListDelete((void *)(&pOSTskReady), (void *)pTask);
214 1 ListDelete((void *)(&pOSTskDelay), (void *)pTask);
215 1
216 1 //释放改任务占有的所有空间
217 1 BoxFree(OSGetBoxStack(), pTask->pStack);
218 1 BoxFree(OSGetBoxTask(), pTask);
219 1
220 1 //如果是当前任务
221 1 if(pOSTskNow->ID == TaskID)
222 1 {
223 2 //如果就绪任务空,则运行默认任务
224 2 OSTaskIsNULLLoadDef();
225 2 //进行任务切换
226 2 OSTaskSW();
227 2 }
228 1
229 1 OSIRQUnlock();
230 1 }
231
232 /****************************************************************************************************
233 ** 函数名: OSTaskSetPrio
234 ** 描 述: 修改指定任务的权限
235 ** 输 入: TaskID:任务ID号
236 Prio:新权限,必须在1-255之间
237 ** 输 出: 无
238 ** 创建人: 卢益贵
239 ** 日 期: 2007年12月8日
240
241 **------------------修改记录------------------------------------------------------------------------
242 ** 修改人:
243 ** 日 期:
244 ** 说 明:
245 ** 原代码:
246 **--------------------------------------------------------------------------------------------------
247 ****************************************************************************************************/
248 void OSTaskSetPrio(OS_ID TaskID, UINT32 Prio)
249 {
250 1 if(0 == Prio)
251 1 Prio = 1;
252 1 if(255 < Prio)
253 1 Prio = 255;
254 1 OSIRQLock();
255 1 pOSTask[TaskID -1].PrioTick = 256 - Prio;
256 1 OSIRQUnlock();
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 5
257 1 }
258
259 /****************************************************************************************************
260 ** 函数名: Resume
261 ** 描 述: 将挂起的任务继续
262 ** 输 入: TaskID:任务ID号
263 ** 输 出: 布尔型,TRUE表示成功
264 ** 创建人: 卢益贵
265 ** 日 期: 2007年12月8日
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -