?? os_core.lst
字號:
362 ** 修改人: 陳明計
363 ** 日 期: 2002年12月30日
364 **------------------------------------------------------------------------------------------------------
365 ** 修改人:
366 ** 日 期:
367 **-------------------------------------------------------------------------------------------------------
368 ********************************************************************************************************/
369 void OSSched(void)
370
371 {
372 1 uint8 temp;
373 1
374 1 OS_ENTER_CRITICAL();
*** ERROR C202 IN LINE 374 OF ..\OS\OS_CORE.C: 'EA': undefined identifier
375 1 #if EN_OS_INT_ENTER > 0
376 1 if (OSIntNesting == 0) /* 是否是中斷中調(diào)用 */
377 1 {
378 2 #endif
379 2
380 2 #if OS_MAX_TASKS < 9
/* 查找處于就緒狀態(tài)的任務(wù)中優(yōu)先級最高的任務(wù) */
temp = OSTaskRuning;
for (OSNextTaskID = 0; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
{
if ((temp & 0x01) != 0)
{
break;
}
temp = temp >> 1;
}
OS_TASK_SW(); /* 進行任務(wù)調(diào)度 */
#else
393 2 /* 查找處于就緒狀態(tài)的任務(wù)中優(yōu)先級最高的任務(wù) */
394 2 temp = OSTaskRuning % 256;
395 2 for (OSNextTaskID = 0; OSNextTaskID < 8; OSNextTaskID++)
396 2 {
397 3 if ((temp & 0x01) != 0)
398 3 {
399 4 goto TaskSw;
400 4 }
401 3 temp = temp >> 1;
402 3 }
403 2
404 2 temp = OSTaskRuning / 256 ;
405 2 for (; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
406 2 {
407 3 if ((temp & 0x01) != 0)
408 3 {
409 4 break;
410 4 }
411 3 temp = temp >> 1;
412 3 }
413 2 TaskSw:
414 2 OS_TASK_SW(); /* 進行任務(wù)調(diào)度 */
415 2 #endif
416 2
C51 COMPILER V7.01 OS_CORE 03/06/2003 10:20:02 PAGE 8
417 2 #if EN_OS_INT_ENTER > 0
418 2 }
419 1 #endif
420 1 OS_EXIT_CRITICAL();
*** ERROR C202 IN LINE 420 OF ..\OS\OS_CORE.C: 'EA': undefined identifier
421 1 }
422
423 /*********************************************************************************************************
424 ** 函數(shù)名稱: OSTimeTick
425 ** 功能描述: 系統(tǒng)時鐘處理函數(shù),處理各個任務(wù)的延時
426 ** 輸 入: 無
427 ** 輸 出: 無
428 ** 全局變量: OSWaitTick
429 ** 調(diào)用模塊: OSIntSendSignal
430 **
431 ** 作 者: 陳明計
432 ** 日 期: 2002年6月20日
433 **-------------------------------------------------------------------------------------------------------
434 ** 修改人: 陳明計
435 ** 日 期: 2002年9月1日
436 **-------------------------------------------------------------------------------------------------------
437 ** 修改人: 陳明計
438 ** 日 期: 2002年9月4日
439 **------------------------------------------------------------------------------------------------------
440 ** 修改人: 陳明計
441 ** 日 期: 2002年12月30日
442 **------------------------------------------------------------------------------------------------------
443 ** 修改人:
444 ** 日 期:
445 **-------------------------------------------------------------------------------------------------------
446 ********************************************************************************************************/
447 void OSTimeTick(void)
448 {
449 1 uint8 i;
450 1
451 1 for (i = 0; i < OS_MAX_TASKS; i++)
452 1 {
453 2 if (OSWaitTick[i] != 0 )
454 2 {
455 3 OSWaitTick[i]--;
*** ERROR C187 IN LINE 455 OF ..\OS\OS_CORE.C: not an lvalue
456 3 if (OSWaitTick[i] == 0)
457 3 {
458 4 OSIntSendSignal(i);
459 4 }
460 3 }
461 2 }
462 1 }
463
464 /*********************************************************************************************************
465 ** 函數(shù)名稱: OSWait
466 ** 功能描述: 系統(tǒng)等待函數(shù),任務(wù)調(diào)用此函數(shù)可以等待一定時間或信號
467 ** 輸 入: typ: 等待事件類型,目前可以取以下值,或是其中任意個值的按位或
468 ** K_SIG: 等待信號
469 ** K_TMO: 等待超時
470 ** ticks : 等待超時時的系統(tǒng)嘀嗒數(shù)
471 ** 輸 出 : NOT_OK : 參數(shù)錯誤
472 ** TMO_EVENT : 超時到
473 ** SIG_EVENT : 有信號
474 ** 全局變量: OSWaitTick
475 ** 調(diào)用模塊: OSClearSignal
476 **
C51 COMPILER V7.01 OS_CORE 03/06/2003 10:20:02 PAGE 9
477 ** 作 者: 陳明計
478 ** 日 期: 2002年6月20日
479 **-------------------------------------------------------------------------------------------------------
480 ** 修改人: 陳明計
481 ** 日 期: 2002年9月1日
482 **-------------------------------------------------------------------------------------------------------
483 ** 修改人: 陳明計
484 ** 日 期: 2002年9月4日
485 **------------------------------------------------------------------------------------------------------
486 ** 修改人: 陳明計
487 ** 日 期: 2002年9月9日
488 **------------------------------------------------------------------------------------------------------
489 ** 修改人: 陳明計
490 ** 日 期: 2002年10月9日
491 **------------------------------------------------------------------------------------------------------
492 ** 修改人: 陳明計
493 ** 日 期: 2002年12月2日
494 **------------------------------------------------------------------------------------------------------
495 ** 修改人:
496 ** 日 期:
497 **-------------------------------------------------------------------------------------------------------
498 ********************************************************************************************************/
499 uint8 OSWait(uint8 typ, uint8 ticks)
500
501 {
502 1 OSWaitTick[OSTaskID] = ticks; /* 設(shè)置超時時間 */
503 1 /* 可以優(yōu)化寄存器的使用 */
504 1 switch(typ)
505 1 {
506 2 case K_SIG: /* 等待信號,即掛起自己 */
507 2 OSWaitTick[OSTaskID] = 0; /* 沒有超時處理 */
508 2 OSClearSignal(OSTaskID); /* 任務(wù)進入等待狀態(tài) */
509 2 OSSched(); /* 運行下一個任務(wù) */
510 2 return SIG_EVENT;
511 2 case K_TMO: /* 等待超時,即延時一段時間 */
512 2 OS_ENTER_CRITICAL();
*** ERROR C202 IN LINE 512 OF ..\OS\OS_CORE.C: 'EA': undefined identifier
513 2 while (OSWaitTick[OSTaskID] != 0) /* 判斷超時時間是否到 */
514 2 {
515 3 OSClearSignal(OSTaskID); /* 任務(wù)進入等待狀態(tài) */
516 3 OSSched(); /* 運行下一個任務(wù) */
517 3 }
518 2 OS_EXIT_CRITICAL();
*** ERROR C202 IN LINE 518 OF ..\OS\OS_CORE.C: 'EA': undefined identifier
519 2 return TMO_EVENT;
520 2 case (K_TMO | K_SIG): /* 等待信號(掛起自己)直到超時 */
521 2 /* 別的任務(wù)或中斷可以恢復(fù)它 */
522 2 OS_ENTER_CRITICAL();
*** ERROR C202 IN LINE 522 OF ..\OS\OS_CORE.C: 'EA': undefined identifier
523 2 if (OSWaitTick[OSTaskID] == 0) /* 判斷超時時間是否到 */
524 2 {
525 3 return TMO_EVENT;
526 3 }
527 2 OSClearSignal(OSTaskID); /* 任務(wù)進入等待狀態(tài) */
528 2 OS_EXIT_CRITICAL();
*** ERROR C202 IN LINE 528 OF ..\OS\OS_CORE.C: 'EA': undefined identifier
529 2 OSSched(); /* 運行下一個任務(wù) */
530 2 if (OSWaitTick[OSTaskID] != 0)
531 2 {
532 3 OSWaitTick[OSTaskID] = 0;
533 3 return SIG_EVENT;
534 3 }
C51 COMPILER V7.01 OS_CORE 03/06/2003 10:20:02 PAGE 10
535 2 return TMO_EVENT;
536 2 default:
537 2 OSWaitTick[OSTaskID] = 0;
538 2 return NOT_OK;
539 2 }
540 1 }
C51 COMPILATION COMPLETE. 0 WARNING(S), 16 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -