📄 ggt_kernel.lst
字号:
266
267 **------------------修改记录------------------------------------------------------------------------
268 ** 修改人:
269 ** 日 期:
270 ** 说 明:
271 ** 原代码:
272 **--------------------------------------------------------------------------------------------------
273 ****************************************************************************************************/
274 BOOL Resume(OS_ID TaskID)
275 {
276 1 _pOSTask pTask;
277 1 BOOL R;
278 1
279 1 R = FALSE;
280 1 OSIRQLock();
281 1
282 1 pTask = &(pOSTask[TaskID - 1]);
283 1 if(OS_STATE_TSK_SUSPEND & pTask->State)
284 1 {
285 2 pTask->State &= (~OS_STATE_TSK_SUSPEND);
286 2 //如果原来是延迟状态,则继续延迟
287 2 if(pTask->State & OS_STATE_TSK_DELAY)
288 2 ListAppend((void *)(&pOSTskDelay), (void *)pTask);
289 2 else
290 2 //如果原来是就绪状态,则进入就绪队列
291 2 if(pTask->State & OS_STATE_TSK_READY)
292 2 ListAppend((void *)(&pOSTskReady), (void *)pTask);
293 2 R = TRUE;
294 2 }
295 1 OSIRQUnlock();
296 1
297 1 return(R);
298 1 }
299
300 /****************************************************************************************************
301 ** 函数名: Suspend
302 ** 描 述: 挂起任务
303 ** 输 入: TaskID:任务ID号
304 ** 输 出: 无
305 ** 创建人: 卢益贵
306 ** 日 期: 2007年12月8日
307
308 **------------------修改记录------------------------------------------------------------------------
309 ** 修改人:
310 ** 日 期:
311 ** 说 明:
312 ** 原代码:
313 **--------------------------------------------------------------------------------------------------
314 ****************************************************************************************************/
315 void Suspend(OS_ID TaskID)
316 {
317 1 _pOSTask pTask;
318 1
319 1 OSIRQLock();
320 1
321 1 pTask = &(pOSTask[TaskID - 1]);
322 1 pTask->State |= OS_STATE_TSK_SUSPEND;
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 6
323 1 ListDelete((void *)(&pOSTskReady), (void *)pTask);
324 1 ListDelete((void *)(&pOSTskDelay), (void *)pTask);
325 1
326 1 if(pOSTskNow->ID == TaskID)
327 1 {
328 2 OSTaskIsNULLLoadDef();
329 2 OSTaskSW();
330 2 }
331 1
332 1 OSIRQUnlock();
333 1 }
334
335 /****************************************************************************************************
336 ** 函数名: OSTaskPushDelay
337 ** 描 述: 将任务放进迟延队列,并设相应标志
338 ** 输 入: pTask:指向任务空间的指针
339 ** 输 出: 无
340 ** 创建人: 卢益贵
341 ** 日 期: 2007年12月8日
342
343 **------------------修改记录------------------------------------------------------------------------
344 ** 修改人:
345 ** 日 期:
346 ** 说 明:
347 ** 原代码:
348 **--------------------------------------------------------------------------------------------------
349 ****************************************************************************************************/
350 void OSTaskPushDelay(_pOSTask pTask)
351 {
352 1 pTask->State = OS_STATE_TSK_DELAY;
353 1 pTask->StateValue = pTask->PrioTick;
354 1 ListAppend((void *)(&pOSTskDelay), (void *)pTask);
355 1 }
356
357 /****************************************************************************************************
358 ** 函数名: OSTaskPushReady
359 ** 描 述: 将任务放进就绪队列,并设相应标志
360 ** 输 入: pTask:指向任务空间的指针
361 ** 输 出: 无
362 ** 创建人: 卢益贵
363 ** 日 期: 2007年12月8日
364
365 **------------------修改记录------------------------------------------------------------------------
366 ** 修改人:
367 ** 日 期:
368 ** 说 明:
369 ** 原代码:
370 **--------------------------------------------------------------------------------------------------
371 ****************************************************************************************************/
372 void OSTaskPushReady(_pOSTask pTask)
373 {
374 1 pTask->State = OS_STATE_TSK_READY;
375 1 ListAppend((void *)(&pOSTskReady), (void *)pTask);
376 1 }
377
378 /****************************************************************************************************
379 ** 函数名: OSTaskDelay
380 ** 描 述: 将任务迟延指定的时间
381 ** 输 入: Time:迟延时长,单位:毫秒
382 ** 输 出: 无
383 ** 创建人: 卢益贵
384 ** 日 期: 2007年12月8日
385
386 **------------------修改记录------------------------------------------------------------------------
387 ** 修改人:
388 ** 日 期:
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 7
389 ** 说 明:
390 ** 原代码:
391 **--------------------------------------------------------------------------------------------------
392 ****************************************************************************************************/
393 void OSTaskDelay(UINT32 Time)
394 {
395 1 OSIRQLock();
396 1
397 1 OSTaskPushDelay(pOSTskNow);
398 1 pOSTskNow->StateValue = (Time * OSGetTick()) / 1000;
399 1 OSTaskIsNULLLoadDef();
400 1 OSTaskSW();
401 1
402 1 OSIRQUnlock();
403 1 }
404
405 /****************************************************************************************************
406 ** 函数名: OSTaskDispatch
407 ** 描 述: 进行任务调度,函数始终保持就绪队列有任务
408 ** 输 入: 无
409 ** 输 出: 无
410 ** 创建人: 卢益贵
411 ** 日 期: 2007年12月8日
412
413 **------------------修改记录------------------------------------------------------------------------
414 ** 修改人:
415 ** 日 期:
416 ** 说 明:
417 ** 原代码:
418 **--------------------------------------------------------------------------------------------------
419 ****************************************************************************************************/
420 void OSTaskDispatch(void)
421 {
422 1 _pOSTask pTask, p;
423 1
424 1 pTask = pOSTskDelay;
425 1 while(pTask)
426 1 {
427 2 pTask->StateValue--;
428 2 if(pTask->StateValue <= 0)
429 2 {
430 3 p = pTask;
431 3 pTask = pTask->pNext;
432 3 ListDelete((void *)(&pOSTskDelay), (void *)p);
433 3 OSTaskPushReady(p);
434 3 }else
435 2 pTask = pTask->pNext;
436 2 }
437 1
438 1 //如果有新任务,则让贤,否则还是我当王
439 1 if(pOSTskReady)
440 1 OSTaskPushDelay(pOSTskNow);
441 1 else
442 1 OSTaskPushReady(pOSTskNow);
443 1 }
444
445 /****************************************************************************************************
446 ** 函数名: OSTaskIsNULLLoadDef
447 ** 描 述: 当要立即进行任务切换时,判断就绪队列是否为空,是则加载默认任务
448 ** 输 入: 无
449 ** 输 出: 无
450 ** 创建人: 卢益贵
451 ** 日 期: 2007年12月8日
452
453 **------------------修改记录------------------------------------------------------------------------
454 ** 修改人:
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 8
455 ** 日 期:
456 ** 说 明:
457 ** 原代码:
458 **--------------------------------------------------------------------------------------------------
459 ****************************************************************************************************/
460 void OSTaskIsNULLLoadDef(void)
461 {
462 1 if(!pOSTskReady)
463 1 {
464 2 ListDelete((void *)(&pOSTskDelay), (void *)pOSTskMain);
465 2 OSTaskPushReady(pOSTskMain);
466 2 }
467 1 }
468
469 /****************************************************************************************************
470 ** 函数名: OSTaskInit
471 ** 描 述: 在进入用户初始化之前,必须调用本函数初始化任务空间
472 ** 输 入: 无
473 ** 输 出: 无
474 ** 创建人: 卢益贵
475 ** 日 期: 2007年12月8日
476
477 **------------------修改记录------------------------------------------------------------------------
478 ** 修改人:
479 ** 日 期:
480 ** 说 明:
481 ** 原代码:
482 **--------------------------------------------------------------------------------------------------
483 ****************************************************************************************************/
484 void OSTaskInit(void)
485 {
486 1 INT32 i;
487 1
488 1 pOSBoxMsg = (UINT32 *)OSGetBoxMsg();
489 1 BoxInit(pOSBoxMsg, sizeof(_BoxHead) + OSGetSumMsg() * sizeof(_OSMsg), sizeof(_OSMsg));
490 1
491 1 pOSTask = &(((_pOSBoxTask)OSGetBoxTask())->Task[0]);
492 1
493 1 for(i = 0; i < OSGetSumTask(); i++)
494 1 pOSTask[i].ID = i + 1;
495 1
496 1 BoxInit(OSGetBoxTask(), sizeof(_BoxHead) + OSGetSumTask() * sizeof(_OSTask), sizeof(_OSTask));
497 1 BoxInit(OSGetBoxStack(), sizeof(_BoxHead) + OSGetSumTask() * OSGetSizeStack(), OSGetSizeStack());
498 1
499 1
500 1 pOSTskMain = &(pOSTask[OSGetSumTask()]);
501 1 OSTaskDataInit(pOSTskMain);
502 1 pOSTskMain->PrioTick = OSTaskGetPrioTick(255);
503 1 pOSTskMain->pStack = OSStackAlloc();
504 1 pOSTskMain->pTskStack = pOSTskMain->pStack;
505 1 //设置当前任务为默认任务
506 1 pOSTskNow = pOSTskMain;
507 1 }
508
509 /****************************************************************************************************
510 ** 函数名: OSInit
511 ** 描 述: 系统初始化函数
512 ** 输 入: 无
513 ** 输 出: 无
514 ** 创建人: 卢益贵
515 ** 日 期: 2008年1月12日
516
517 **------------------修改记录------------------------------------------------------------------------
518 ** 修改人:
519 ** 日 期:
520 ** 说 明:
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 9
521 ** 原代码:
522 **--------------------------------------------------------------------------------------------------
523 ****************************************************************************************************/
524 void OSInit(void)
525 {
526 1 OSTaskInit();
527 1 OSTimerInit();
528 1 }
529
530 /****************************************************************************************************
531 ** 函数名: OSTaskMsgPost
532 ** 描 述: 消息发送函数,不等待目标处理,不管收到与否
533 ** 输 入: TaskID:目标任务的ID,
534 Msg:消息内容,
535 wParam:消息参数
536 lParam:消息参数
537 ** 输 出: 返回0表示失败,1:表示成功,2:表示对方进入处理队列
538 ** 创建人: 卢益贵
539 ** 日 期: 2007年12月8日
540
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -