📄 os_core.lst
字号:
375:OSsrc/os_core.c **** y = pgm_read_byte(OSUnMapTbl+OSRdyGrp);
376:OSsrc/os_core.c **** OSPrioHighRdy = (INT8U)((y << 3) + pgm_read_byte(OSUnMapTbl+OSRdyTbl[y]));
377:OSsrc/os_core.c **** #endif
378:OSsrc/os_core.c **** if (OSPrioHighRdy != OSPrioCur) { /* No Ctx Sw if current task is highest
379:OSsrc/os_core.c **** OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
380:OSsrc/os_core.c **** #if OS_TASK_PROFILE_EN > 0
381:OSsrc/os_core.c **** OSTCBHighRdy->OSTCBCtxSwCtr++; /* Inc. # of context switches to this ta
382:OSsrc/os_core.c **** #endif
383:OSsrc/os_core.c **** OSCtxSwCtr++; /* Keep track of the number of ctx switc
384:OSsrc/os_core.c **** OSIntCtxSw(); /* Perform interrupt level ctx switch
385:OSsrc/os_core.c **** }
386:OSsrc/os_core.c **** }
387:OSsrc/os_core.c **** }
388:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
389:OSsrc/os_core.c **** }
390:OSsrc/os_core.c **** }
391:OSsrc/os_core.c **** /*$PAGE*/
392:OSsrc/os_core.c **** /*
393:OSsrc/os_core.c **** ***************************************************************************************************
394:OSsrc/os_core.c **** * PREVENT SCHEDULING
395:OSsrc/os_core.c **** *
396:OSsrc/os_core.c **** * Description: This function is used to prevent rescheduling to take place. This allows your appli
397:OSsrc/os_core.c **** * to prevent context switches until you are ready to permit context switching.
398:OSsrc/os_core.c **** *
399:OSsrc/os_core.c **** * Arguments : none
400:OSsrc/os_core.c **** *
401:OSsrc/os_core.c **** * Returns : none
402:OSsrc/os_core.c **** *
403:OSsrc/os_core.c **** * Notes : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair. In other words, for e
404:OSsrc/os_core.c **** * call to OSSchedLock() you MUST have a call to OSSchedUnlock().
405:OSsrc/os_core.c **** ***************************************************************************************************
406:OSsrc/os_core.c **** */
407:OSsrc/os_core.c ****
408:OSsrc/os_core.c **** #if OS_SCHED_LOCK_EN > 0
409:OSsrc/os_core.c **** void OSSchedLock (void)
410:OSsrc/os_core.c **** {
411:OSsrc/os_core.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
412:OSsrc/os_core.c **** OS_CPU_SR cpu_sr;
413:OSsrc/os_core.c ****
414:OSsrc/os_core.c ****
415:OSsrc/os_core.c ****
416:OSsrc/os_core.c **** cpu_sr = 0; /* Prevent compiler warning
417:OSsrc/os_core.c **** #endif
418:OSsrc/os_core.c **** if (OSRunning == TRUE) { /* Make sure multitasking is running
419:OSsrc/os_core.c **** OS_ENTER_CRITICAL();
420:OSsrc/os_core.c **** if (OSLockNesting < 255u) { /* Prevent OSLockNesting from wrapping back to 0
421:OSsrc/os_core.c **** OSLockNesting++; /* Increment lock nesting level
422:OSsrc/os_core.c **** }
423:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
424:OSsrc/os_core.c **** }
425:OSsrc/os_core.c **** }
426:OSsrc/os_core.c **** #endif
427:OSsrc/os_core.c ****
428:OSsrc/os_core.c **** /*$PAGE*/
429:OSsrc/os_core.c **** /*
430:OSsrc/os_core.c **** ***************************************************************************************************
431:OSsrc/os_core.c **** * ENABLE SCHEDULING
432:OSsrc/os_core.c **** *
433:OSsrc/os_core.c **** * Description: This function is used to re-allow rescheduling.
434:OSsrc/os_core.c **** *
435:OSsrc/os_core.c **** * Arguments : none
436:OSsrc/os_core.c **** *
437:OSsrc/os_core.c **** * Returns : none
438:OSsrc/os_core.c **** *
439:OSsrc/os_core.c **** * Notes : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair. In other words, for e
440:OSsrc/os_core.c **** * call to OSSchedLock() you MUST have a call to OSSchedUnlock().
441:OSsrc/os_core.c **** ***************************************************************************************************
442:OSsrc/os_core.c **** */
443:OSsrc/os_core.c ****
444:OSsrc/os_core.c **** #if OS_SCHED_LOCK_EN > 0
445:OSsrc/os_core.c **** void OSSchedUnlock (void)
446:OSsrc/os_core.c **** {
447:OSsrc/os_core.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status regis
448:OSsrc/os_core.c **** OS_CPU_SR cpu_sr;
449:OSsrc/os_core.c ****
450:OSsrc/os_core.c ****
451:OSsrc/os_core.c ****
452:OSsrc/os_core.c **** cpu_sr = 0; /* Prevent compiler warning
453:OSsrc/os_core.c **** #endif
454:OSsrc/os_core.c **** if (OSRunning == TRUE) { /* Make sure multitasking is running
455:OSsrc/os_core.c **** OS_ENTER_CRITICAL();
456:OSsrc/os_core.c **** if (OSLockNesting > 0) { /* Do not decrement if already 0
457:OSsrc/os_core.c **** OSLockNesting--; /* Decrement lock nesting level
458:OSsrc/os_core.c **** if (OSLockNesting == 0) { /* See if scheduler is enabled and ...
459:OSsrc/os_core.c **** if (OSIntNesting == 0) { /* ... not in an ISR
460:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
461:OSsrc/os_core.c **** OS_Sched(); /* See if a HPT is ready
462:OSsrc/os_core.c **** } else {
463:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
464:OSsrc/os_core.c **** }
465:OSsrc/os_core.c **** } else {
466:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
467:OSsrc/os_core.c **** }
468:OSsrc/os_core.c **** } else {
469:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
470:OSsrc/os_core.c **** }
471:OSsrc/os_core.c **** }
472:OSsrc/os_core.c **** }
473:OSsrc/os_core.c **** #endif
474:OSsrc/os_core.c ****
475:OSsrc/os_core.c **** /*$PAGE*/
476:OSsrc/os_core.c **** /*
477:OSsrc/os_core.c **** ***************************************************************************************************
478:OSsrc/os_core.c **** * START MULTITASKING
479:OSsrc/os_core.c **** *
480:OSsrc/os_core.c **** * Description: This function is used to start the multitasking process which lets uC/OS-II manages
481:OSsrc/os_core.c **** * task that you have created. Before you can call OSStart(), you MUST have called OSI
482:OSsrc/os_core.c **** * and you MUST have created at least one task.
483:OSsrc/os_core.c **** *
484:OSsrc/os_core.c **** * Arguments : none
485:OSsrc/os_core.c **** *
486:OSsrc/os_core.c **** * Returns : none
487:OSsrc/os_core.c **** *
488:OSsrc/os_core.c **** * Note : OSStartHighRdy() MUST:
489:OSsrc/os_core.c **** * a) Call OSTaskSwHook() then,
490:OSsrc/os_core.c **** * b) Set OSRunning to TRUE.
491:OSsrc/os_core.c **** * c) Load the context of the task pointed to by OSTCBHighRdy.
492:OSsrc/os_core.c **** * d_ Execute the task.
493:OSsrc/os_core.c **** ***************************************************************************************************
494:OSsrc/os_core.c **** */
495:OSsrc/os_core.c ****
496:OSsrc/os_core.c **** void OSStart (void)
497:OSsrc/os_core.c **** {
498:OSsrc/os_core.c **** INT8U y;
499:OSsrc/os_core.c **** INT8U x;
500:OSsrc/os_core.c ****
501:OSsrc/os_core.c ****
502:OSsrc/os_core.c **** if (OSRunning == FALSE) {
503:OSsrc/os_core.c **** #ifndef ALL_IN_ROM
504:OSsrc/os_core.c **** y = OSUnMapTbl[OSRdyGrp]; /* Find highest priority's task priority number */
505:OSsrc/os_core.c **** x = OSUnMapTbl[OSRdyTbl[y]];
506:OSsrc/os_core.c **** #else
507:OSsrc/os_core.c **** y = pgm_read_byte(OSUnMapTbl+OSRdyGrp); /* Find highest priority's task priori
508:OSsrc/os_core.c **** x = pgm_read_byte(OSUnMapTbl+OSRdyTbl[y]);
509:OSsrc/os_core.c **** #endif
510:OSsrc/os_core.c **** OSPrioHighRdy = (INT8U)((y << 3) + x);
511:OSsrc/os_core.c **** OSPrioCur = OSPrioHighRdy;
512:OSsrc/os_core.c **** OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run
513:OSsrc/os_core.c **** OSTCBCur = OSTCBHighRdy;
514:OSsrc/os_core.c **** OSStartHighRdy(); /* Execute target specific code to start task
515:OSsrc/os_core.c **** }
516:OSsrc/os_core.c **** }
517:OSsrc/os_core.c **** /*$PAGE*/
518:OSsrc/os_core.c **** /*
519:OSsrc/os_core.c **** ***************************************************************************************************
520:OSsrc/os_core.c **** * STATISTICS INITIALIZATION
521:OSsrc/os_core.c **** *
522:OSsrc/os_core.c **** * Description: This function is called by your application to establish CPU usage by first determin
523:OSsrc/os_core.c **** * how high a 32-bit counter would count to in 1 second if no other tasks were to execu
524:OSsrc/os_core.c **** * during that time. CPU usage is then determined by a low priority task which keeps t
525:OSsrc/os_core.c **** * of this 32-bit counter every second but this time, with other tasks running. CPU us
526:OSsrc/os_core.c **** * determined by:
527:OSsrc/os_core.c **** *
528:OSsrc/os_core.c **** * OSIdleCtr
529:OSsrc/os_core.c **** * CPU Usage (%) = 100 * (1 - ------------)
530:OSsrc/os_core.c **** * OSIdleCtrMax
531:OSsrc/os_core.c **** *
532:OSsrc/os_core.c **** * Arguments : none
533:OSsrc/os_core.c **** *
534:OSsrc/os_core.c **** * Returns : none
535:OSsrc/os_core.c **** ***************************************************************************************************
536:OSsrc/os_core.c **** */
537:OSsrc/os_core.c ****
538:OSsrc/os_core.c **** #if OS_TASK_STAT_EN > 0
539:OSsrc/os_core.c **** void OSStatInit (void)
540:OSsrc/os_core.c **** {
541:OSsrc/os_core.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
542:OSsrc/os_core.c **** OS_CPU_SR cpu_sr;
543:OSsrc/os_core.c ****
544:OSsrc/os_core.c ****
545:OSsrc/os_core.c ****
546:OSsrc/os_core.c **** cpu_sr = 0; /* Prevent compiler warning
547:OSsrc/os_core.c **** #endif
548:OSsrc/os_core.c **** OSTimeDly(2); /* Synchronize with clock tick
549:OSsrc/os_core.c **** OS_ENTER_CRITICAL();
550:OSsrc/os_core.c **** OSIdleCtr = 0L; /* Clear idle counter
551:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
552:OSsrc/os_core.c **** OSTimeDly(OS_TICKS_PER_SEC / 10); /* Determine MAX. idle counter value for 1/10 seco
553:OSsrc/os_core.c **** OS_ENTER_CRITICAL();
554:OSsrc/os_core.c **** OSIdleCtrMax = OSIdleCtr; /* Store maximum idle counter count in 1/10 second
555:OSsrc/os_core.c **** OSStatRdy = TRUE;
556:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
557:OSsrc/os_core.c **** }
558:OSsrc/os_core.c **** #endif
559:OSsrc/os_core.c **** /*$PAGE*/
560:OSsrc/os_core.c **** /*
561:OSsrc/os_core.c **** ***************************************************************************************************
562:OSsrc/os_core.c **** * PROCESS SYSTEM TICK
563:OSsrc/os_core.c **** *
564:OSsrc/os_core.c **** * Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also
565:OSsrc/os_core.c **** * as a 'clock tick'). This function should be called by the ticker ISR but, can also
566:OSsrc/os_core.c **** * called by a high priority task.
567:OSsrc/os_core.c **** *
568:OSsrc/os_core.c **** * Arguments : none
569:OSsrc/os_core.c **** *
570:OSsrc/os_core.c **** * Returns : none
571:OSsrc/os_core.c **** ***************************************************************************************************
572:OSsrc/os_core.c **** */
573:OSsrc/os_core.c ****
574:OSsrc/os_core.c **** void OSTimeTick (void)
575:OSsrc/os_core.c **** {
576:OSsrc/os_core.c **** OS_TCB *ptcb;
577:OSsrc/os_core.c **** #if OS_TICK_STEP_EN > 0
578:OSsrc/os_core.c **** BOOLEAN step;
579:OSsrc/os_core.c **** #endif
580:OSsrc/os_core.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status regis
581:OSsrc/os_core.c **** OS_CPU_SR cpu_sr;
582:OSsrc/os_core.c ****
583:OSsrc/os_core.c ****
584:OSsrc/os_core.c ****
585:OSsrc/os_core.c **** cpu_sr = 0; /* Prevent compiler warning
586:OSsrc/os_core.c **** #endif
587:OSsrc/os_core.c **** #if OS_TIME_TICK_HOOK_EN > 0
588:OSsrc/os_core.c **** OSTimeTickHook(); /* Call user definable hook
589:OSsrc/os_core.c **** #endif
590:OSsrc/os_core.c **** #if OS_TIME_GET_SET_EN > 0
591:OSsrc/os_core.c **** OS_ENTER_CRITICAL(); /* Update the 32-bit tick counter
592:OSsrc/os_core.c **** OSTime++;
593:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -