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