⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_core.lst

📁 atmega单片机用的ucos系统 占用内存适中 是atmega单片机合适的操作系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -