📄 os_cpu_c.lst
字号:
179 *cp++ = (uint16)task / 256;
180 #if EN_REENTRANT > 0
181 *cp++ = (uint16)ptos / 256;
182 *cp++ = (uint16)ptos % 256;
183 #endif
184 *cp = 0;
185 }
186 */
187
188
189 /*********************************************************************************************************
190 ** 函数名称: OSTaskStkDel
191 ** 功能描述: 任务堆栈删除
192 ** 输 入: 无
193 ** 输 出 : 无
194 ** 全局变量: OSTaskID,OSTsakStackBotton,SP
195 ** 调用模块: LoadCtx
196 **
197 ** 作 者: 陈明计
198 ** 日 期: 2003年8月17日
199 **-------------------------------------------------------------------------------------------------------
200 ** 修改人: 陈明计
201 ** 日 期: 2004年4月22日
202 **-------------------------------------------------------------------------------------------------------
203 ********************************************************************************************************/
204
205 void StkDelA(uint8 TaskID)
206 {
207 1 uint8 idata *cp;
208 1 uint8 idata *cp1;
209 1 uint8 temp, i;
210 1
211 1 cp = OSTsakStackBotton[TaskID];
212 1 cp1 = OSTsakStackBotton[TaskID + 1];
213 1 temp = cp1 - cp;
214 1 for (i = TaskID + 1; i <= OSRunningTaskID(); i++)
215 1 {
216 2 OSTsakStackBotton[i] -= temp;
217 2 }
218 1 i = SP - (uint8)(cp1) + 1;
219 1 do
220 1 {
221 2 *cp++ = *cp1++;
222 2 } while (--i != 0);
223 1 SP = SP - temp;
224 1 }
225
226
227 void StkDelB(uint8 TaskID)
228 {
229 1 uint8 idata *cp;
230 1 uint8 idata *cp1;
231 1 uint8 temp, i;
232 1
233 1 cp = OSTsakStackBotton[TaskID] - 1;
234 1 cp1 = OSTsakStackBotton[TaskID + 1] - 1;
235 1 i = OSTsakStackBotton[TaskID] - OSTsakStackBotton[OSRunningTaskID() + 1];
236 1 if (i != 0)
237 1 {
238 2 do
239 2 {
240 3 *cp1-- = *cp--;
C51 COMPILER V8.05a OS_CPU_C 03/10/2007 13:05:44 PAGE 5
241 3 } while (--i != 0);
242 2 }
243 1 temp = cp1 - cp;
244 1 for (i = OSRunningTaskID() + 1; i <= TaskID; i++)
245 1 {
246 2 OSTsakStackBotton[i] += temp;
247 2 }
248 1 }
249
250 void StkDelC(uint8 TaskID)
251 {
252 1 uint8 idata *cp;
253 1 extern void C_OSCtxSw(void);
254 1
255 1
256 1 cp = OSTsakStackBotton[TaskID];
257 1 *cp++ = (uint16)C_OSCtxSw % 256;
258 1 *cp = (uint16)C_OSCtxSw / 256;
259 1 SP = (uint8) cp;
260 1 OSFindNextRunningTask();
261 1 }
262
263 void OSTaskStkDel(uint8 TaskID) small
264 {
265 1 uint8 temp;
266 1
267 1 temp = 1;
268 1 if (TaskID == OSRunningTaskID())
269 1 {
270 2 temp = 2;
271 2 }
272 1 else if (TaskID < OSRunningTaskID())
273 1 {
274 2 temp = 0;
275 2 }
276 1 switch (temp)
277 1 {
278 2 case 0:
279 2 StkDelA(TaskID);
280 2 break;
281 2 case 1:
282 2 StkDelB(TaskID);
283 2 break;
284 2 case 2:
285 2 StkDelC(TaskID);
286 2 break;
287 2 default:
288 2 break;
289 2 }
290 1 }
291
292 /*********************************************************************************************************
293 ** 函数名称: OSTickISR
294 ** 功能描述: 系统时钟中断服务函数
295 ** 输 入: 无
296 ** 输 出 : 无
297 ** 全局变量: 无
298 ** 调用模块: OS_IBT_ENTER,(UserTickTimer),OSTimeTick,OSIntExit
299 **
300 ** 作 者: 陈明计
301 ** 日 期: 2002年2月22日
302 **-------------------------------------------------------------------------------------------------------
C51 COMPILER V8.05a OS_CPU_C 03/10/2007 13:05:44 PAGE 6
303 ** 修改人: 陈明计
304 ** 日 期: 2002年10月23日
305 **-------------------------------------------------------------------------------------------------------
306 ** 修改人:
307 ** 日 期:
308 **-------------------------------------------------------------------------------------------------------
309 ********************************************************************************************************/
310 #pragma disable /* 除非最高优先级中断,否则,必须加上这一句
- */
311
312 void OSTickISR(void) interrupt OS_TIME_ISR
313
314 {
315 1 #if TICK_TIMER_SHARING >1
static uint8 TickSum = 0;
#endif
318 1
319 1 #if EN_USER_TICK_TIMER > 0
320 1 UserTickTimer(); /* 用户函数
- */
321 1 #endif
322 1
323 1 #if TICK_TIMER_SHARING >1
TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
if (TickSum != 0)
{
return;
}
#endif
330 1
331 1 OS_INT_ENTER(); /* 中断开始处理
- */
332 1
333 1 #if EN_TIMER_SHARING > 0
334 1 OSTimeTick(); /* 调用系统时钟处理函数
- */
335 1 #else
OSIntSendSignal(TIME_ISR_TASK_ID); /* 唤醒ID为TIME_ISR_TASK_ID的任务
-*/
#endif
338 1
339 1 OSIntExit(); /* 中断结束处理
- */
340 1 }
341
342 /*********************************************************************************************************
343 ** End Of File
344 ********************************************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 279 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -