📄 os_core.lst
字号:
588:../OSsrc/os_core.c **** if (--ptcb->OSTCBDly == 0) { /* Decrement nbr of ticks to end of dela
589:../OSsrc/os_core.c **** /* Check for timeout
590:../OSsrc/os_core.c **** if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) {
591:../OSsrc/os_core.c **** ptcb->OSTCBStat &= ~(INT8U)OS_STAT_PEND_ANY; /* Yes, Clear status
592:../OSsrc/os_core.c **** ptcb->OSTCBStatPend = OS_STAT_PEND_TO; /* Indicate PEND tim
593:../OSsrc/os_core.c **** } else {
594:../OSsrc/os_core.c **** ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
595:../OSsrc/os_core.c **** }
596:../OSsrc/os_core.c ****
597:../OSsrc/os_core.c **** if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended
598:../OSsrc/os_core.c **** OSRdyGrp |= ptcb->OSTCBBitY; /* No, Make ready
599:../OSsrc/os_core.c **** OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
600:../OSsrc/os_core.c **** }
601:../OSsrc/os_core.c **** }
602:../OSsrc/os_core.c **** }
603:../OSsrc/os_core.c **** ptcb = ptcb->OSTCBNext; /* Point at next TCB in TCB list
604:../OSsrc/os_core.c **** OS_EXIT_CRITICAL();
605:../OSsrc/os_core.c **** }
606:../OSsrc/os_core.c **** }
607:../OSsrc/os_core.c **** }
608:../OSsrc/os_core.c ****
609:../OSsrc/os_core.c **** /*$PAGE*/
610:../OSsrc/os_core.c **** /*
611:../OSsrc/os_core.c **** ***************************************************************************************************
612:../OSsrc/os_core.c **** * GET VERSION
613:../OSsrc/os_core.c **** *
614:../OSsrc/os_core.c **** * Description: This function is used to return the version number of uC/OS-II. The returned value
615:../OSsrc/os_core.c **** * corresponds to uC/OS-II's version number multiplied by 100. In other words, version
616:../OSsrc/os_core.c **** * would be returned as 200.
617:../OSsrc/os_core.c **** *
618:../OSsrc/os_core.c **** * Arguments : none
619:../OSsrc/os_core.c **** *
620:../OSsrc/os_core.c **** * Returns : the version number of uC/OS-II multiplied by 100.
621:../OSsrc/os_core.c **** ***************************************************************************************************
622:../OSsrc/os_core.c **** */
623:../OSsrc/os_core.c ****
624:../OSsrc/os_core.c **** INT16U OSVersion (void)
625:../OSsrc/os_core.c **** {
626:../OSsrc/os_core.c **** return (OS_VERSION);
627:../OSsrc/os_core.c **** }
628:../OSsrc/os_core.c ****
629:../OSsrc/os_core.c **** /*$PAGE*/
630:../OSsrc/os_core.c **** /*
631:../OSsrc/os_core.c **** ***************************************************************************************************
632:../OSsrc/os_core.c **** * DUMMY FUNCTION
633:../OSsrc/os_core.c **** *
634:../OSsrc/os_core.c **** * Description: This function doesn't do anything. It is called by OSTaskDel().
635:../OSsrc/os_core.c **** *
636:../OSsrc/os_core.c **** * Arguments : none
637:../OSsrc/os_core.c **** *
638:../OSsrc/os_core.c **** * Returns : none
639:../OSsrc/os_core.c **** ***************************************************************************************************
640:../OSsrc/os_core.c **** */
641:../OSsrc/os_core.c ****
642:../OSsrc/os_core.c **** #if OS_TASK_DEL_EN > 0
643:../OSsrc/os_core.c **** void OS_Dummy (void)
644:../OSsrc/os_core.c **** {
645:../OSsrc/os_core.c **** }
646:../OSsrc/os_core.c **** #endif
647:../OSsrc/os_core.c ****
648:../OSsrc/os_core.c **** /*$PAGE*/
649:../OSsrc/os_core.c **** /*
650:../OSsrc/os_core.c **** ***************************************************************************************************
651:../OSsrc/os_core.c **** * MAKE TASK READY TO RUN BASED ON EVENT OCCURING
652:../OSsrc/os_core.c **** *
653:../OSsrc/os_core.c **** * Description: This function is called by other uC/OS-II services and is used to ready a task that
654:../OSsrc/os_core.c **** * waiting for an event to occur.
655:../OSsrc/os_core.c **** *
656:../OSsrc/os_core.c **** * Arguments : pevent is a pointer to the event control block corresponding to the event.
657:../OSsrc/os_core.c **** *
658:../OSsrc/os_core.c **** * pmsg is a pointer to a message. This pointer is used by message oriented ser
659:../OSsrc/os_core.c **** * such as MAILBOXEs and QUEUEs. The pointer is not used when called by ot
660:../OSsrc/os_core.c **** * service functions.
661:../OSsrc/os_core.c **** *
662:../OSsrc/os_core.c **** * msk is a mask that is used to clear the status byte of the TCB. For example
663:../OSsrc/os_core.c **** * OSSemPost() will pass OS_STAT_SEM, OSMboxPost() will pass OS_STAT_MBOX e
664:../OSsrc/os_core.c **** *
665:../OSsrc/os_core.c **** * pend_stat is used to indicate the readied task's pending status:
666:../OSsrc/os_core.c **** *
667:../OSsrc/os_core.c **** * OS_STAT_PEND_OK Task ready due to a post (or delete), not a timeout
668:../OSsrc/os_core.c **** * an abort.
669:../OSsrc/os_core.c **** * OS_STAT_PEND_ABORT Task ready due to an abort.
670:../OSsrc/os_core.c **** *
671:../OSsrc/os_core.c **** * Returns : none
672:../OSsrc/os_core.c **** *
673:../OSsrc/os_core.c **** * Note : This function is INTERNAL to uC/OS-II and your application should not call it.
674:../OSsrc/os_core.c **** ***************************************************************************************************
675:../OSsrc/os_core.c **** */
676:../OSsrc/os_core.c **** #if OS_EVENT_EN
677:../OSsrc/os_core.c **** INT8U OS_EventTaskRdy (OS_EVENT *pevent, void *pmsg, INT8U msk, INT8U pend_stat)
678:../OSsrc/os_core.c **** {
679:../OSsrc/os_core.c **** OS_TCB *ptcb;
680:../OSsrc/os_core.c **** INT8U x;
681:../OSsrc/os_core.c **** INT8U y;
682:../OSsrc/os_core.c **** INT8U prio;
683:../OSsrc/os_core.c **** #if OS_LOWEST_PRIO <= 63
684:../OSsrc/os_core.c **** INT8U bitx;
685:../OSsrc/os_core.c **** INT8U bity;
686:../OSsrc/os_core.c **** #else
687:../OSsrc/os_core.c **** INT16U bitx;
688:../OSsrc/os_core.c **** INT16U bity;
689:../OSsrc/os_core.c **** INT16U *ptbl;
690:../OSsrc/os_core.c **** #endif
691:../OSsrc/os_core.c ****
692:../OSsrc/os_core.c ****
693:../OSsrc/os_core.c **** #if OS_LOWEST_PRIO <= 63
694:../OSsrc/os_core.c **** y = OSUnMapTbl[pevent->OSEventGrp]; /* Find HPT waiting for message
695:../OSsrc/os_core.c **** bity = (INT8U)(1 << y);
696:../OSsrc/os_core.c **** x = OSUnMapTbl[pevent->OSEventTbl[y]];
697:../OSsrc/os_core.c **** bitx = (INT8U)(1 << x);
698:../OSsrc/os_core.c **** prio = (INT8U)((y << 3) + x); /* Find priority of task getting the msg
699:../OSsrc/os_core.c **** #else
700:../OSsrc/os_core.c **** if ((pevent->OSEventGrp & 0xFF) != 0) { /* Find HPT waiting for message
701:../OSsrc/os_core.c **** y = OSUnMapTbl[pevent->OSEventGrp & 0xFF];
702:../OSsrc/os_core.c **** } else {
703:../OSsrc/os_core.c **** y = OSUnMapTbl[(pevent->OSEventGrp >> 8) & 0xFF] + 8;
704:../OSsrc/os_core.c **** }
705:../OSsrc/os_core.c **** bity = (INT16U)(1 << y);
706:../OSsrc/os_core.c **** ptbl = &pevent->OSEventTbl[y];
707:../OSsrc/os_core.c **** if ((*ptbl & 0xFF) != 0) {
708:../OSsrc/os_core.c **** x = OSUnMapTbl[*ptbl & 0xFF];
709:../OSsrc/os_core.c **** } else {
710:../OSsrc/os_core.c **** x = OSUnMapTbl[(*ptbl >> 8) & 0xFF] + 8;
711:../OSsrc/os_core.c **** }
712:../OSsrc/os_core.c **** bitx = (INT16U)(1 << x);
713:../OSsrc/os_core.c **** prio = (INT8U)((y << 4) + x); /* Find priority of task getting the msg
714:../OSsrc/os_core.c **** #endif
715:../OSsrc/os_core.c ****
716:../OSsrc/os_core.c **** pevent->OSEventTbl[y] &= ~bitx; /* Remove this task from the waiting list
717:../OSsrc/os_core.c **** if (pevent->OSEventTbl[y] == 0) {
718:../OSsrc/os_core.c **** pevent->OSEventGrp &= ~bity; /* Clr group bit if this was only task pend
719:../OSsrc/os_core.c **** }
720:../OSsrc/os_core.c **** ptcb = OSTCBPrioTbl[prio]; /* Point to this task's OS_TCB
721:../OSsrc/os_core.c **** ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from readying task
722:../OSsrc/os_core.c **** ptcb->OSTCBEventPtr = (OS_EVENT *)0; /* Unlink ECB from this task
723:../OSsrc/os_core.c **** #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
724:../OSsrc/os_core.c **** ptcb->OSTCBMsg = pmsg; /* Send message directly to waiting task
725:../OSsrc/os_core.c **** #else
726:../OSsrc/os_core.c **** pmsg = pmsg; /* Prevent compiler warning if not used
727:../OSsrc/os_core.c **** #endif
728:../OSsrc/os_core.c **** ptcb->OSTCBStatPend = pend_stat; /* Set pend status of post or abort
729:../OSsrc/os_core.c **** ptcb->OSTCBStat &= ~msk; /* Clear bit associated with event type
730:../OSsrc/os_core.c **** if (ptcb->OSTCBStat == OS_STAT_RDY) { /* See if task is ready (could be susp'd)
731:../OSsrc/os_core.c **** OSRdyGrp |= bity; /* Put task in the ready to run list
732:../OSsrc/os_core.c **** OSRdyTbl[y] |= bitx;
733:../OSsrc/os_core.c **** }
734:../OSsrc/os_core.c **** return (prio);
735:../OSsrc/os_core.c **** }
736:../OSsrc/os_core.c **** #endif
737:../OSsrc/os_core.c **** /*$PAGE*/
738:../OSsrc/os_core.c **** /*
739:../OSsrc/os_core.c **** ***************************************************************************************************
740:../OSsrc/os_core.c **** * MAKE TASK WAIT FOR EVENT TO OCCUR
741:../OSsrc/os_core.c **** *
742:../OSsrc/os_core.c **** * Description: This function is called by other uC/OS-II services to suspend a task because an even
743:../OSsrc/os_core.c **** * not occurred.
744:../OSsrc/os_core.c **** *
745:../OSsrc/os_core.c **** * Arguments : pevent is a pointer to the event control block for which the task will be waiting
746:../OSsrc/os_core.c **** *
747:../OSsrc/os_core.c **** * Returns : none
748:../OSsrc/os_core.c **** *
749:../OSsrc/os_core.c **** * Note : This function is INTERNAL to uC/OS-II and your application should not call it.
750:../OSsrc/os_core.c **** ***************************************************************************************************
751:../OSsrc/os_core.c **** */
752:../OSsrc/os_core.c **** #if OS_EVENT_EN
753:../OSsrc/os_core.c **** void OS_EventTaskWait (OS_EVENT *pevent)
754:../OSsrc/os_core.c **** {
755:../OSsrc/os_core.c **** INT8U y;
756:../OSsrc/os_core.c ****
757:../OSsrc/os_core.c ****
758:../OSsrc/os_core.c **** OSTCBCur->OSTCBEventPtr = pevent; /* Store pointer to event control block in TCB
759:../OSsrc/os_core.c **** y = OSTCBCur->OSTCBY; /* Task no longer ready
760:../OSsrc/os_core.c **** OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
761:../OSsrc/os_core.c **** if (OSRdyTbl[y] == 0) {
762:../OSsrc/os_core.c **** OSRdyGrp &= ~OSTCBCur->OSTCBBitY; /* Clear event grp bit if this was only task pend
763:../OSsrc/os_core.c **** }
764:../OSsrc/os_core.c **** pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; /* Put task in waiting li
765:../OSsrc/os_core.c **** pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
766:../OSsrc/os_core.c **** }
767:../OSsrc/os_core.c **** #endif
768:../OSsrc/os_core.c **** /*$PAGE*/
769:../OSsrc/os_core.c **** /*
770:../OSsrc/os_core.c **** ***************************************************************************************************
771:../OSsrc/os_core.c **** * MAKE TASK READY TO RUN BASED ON EVENT TIMEOUT OR ABORT
772:../OSsrc/os_core.c **** *
773:../OSsrc/os_core.c **** * Description: This function is called by other uC/OS-II services to make a task ready to run becau
774:../OSsrc/os_core.c **** * timeout or abort occurred.
775:../OSsrc/os_core.c **** *
776:../OSsrc/os_core.c **** * Arguments : pevent is a pointer to the event control block which is readying a task.
777:../OSsrc/os_core.c **** *
778:../OSsrc/os_core.c **** * Returns : none
779:../OSsrc/os_core.c **** *
780:../OSsrc/os_core.c **** * Note : This function is INTERNAL to uC/OS-II and your application should not call it.
781:../OSsrc/os_core.c **** ***************************************************************************************************
782:../OSsrc/os_core.c **** */
783:../OSsrc/os_core.c **** #if OS_EVENT_EN
784:../OSsrc/os_core.c **** void OS_EventTOAbort (OS_EVENT *pevent)
785:../OSsrc/os_core.c **** {
786:../OSsrc/os_core.c **** INT8U y;
787:../OSsrc/os_core.c ****
788:../OSsrc/os_core.c ****
789:../OSsrc/os_core.c **** y = OSTCBCur->OSTCBY;
790:../OSsrc/os_core.c **** pevent->OSEventTbl[y] &= ~OSTCBCur->OSTCBBitX; /* Remove task from wait list
791:../OSsrc/os_core.c **** if (pevent->OSEventTbl[y] == 0x00) {
792:../OSsrc/os_core.c **** pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
793:../OSsrc/os_core.c **** }
794:../OSsrc/os_core.c **** OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status
795:../OSsrc/os_core.c **** OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready
796:../OSsrc/os_core.c **** OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event
797:../OSsrc/os_core.c **** }
798:../OSsrc/os_core.c **** #endif
799:../OSsrc/os_core.c **** /*$PAGE*/
800:../OSsrc/os_core.c **** /*
801:../OSsrc/os_core.c **** ***************************************************************************************************
802
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -