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

📄 os_flag.lst

📁 uCos-ii 2.86 在C8051F410单片机上移植成功!!! 其中包括:UART驱动
💻 LST
📖 第 1 页 / 共 5 页
字号:
              /*$PAGE*/
                  OS_ENTER_CRITICAL();
                  switch (wait_type) {
                      case OS_FLAG_WAIT_SET_ALL:                         /* See if all required flags are set        */
                           flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags);   /* Extract only the bits we want     */
                           if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
                               if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
C51 COMPILER V8.17   OS_FLAG                                                               03/26/2009 14:24:24 PAGE 11  

                                   pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we wanted      */
                               }
                               OSTCBCur->OSTCBFlagsRdy = flags_rdy;      /* Save flags that were ready               */
                               OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
                               *perr                   = OS_ERR_NONE;
                               return (flags_rdy);
                           } else {                                      /* Block task until events occur or timeout */
                               OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
                               OS_EXIT_CRITICAL();
                           }
                           break;
              
                      case OS_FLAG_WAIT_SET_ANY:
                           flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags);    /* Extract only the bits we want    */
                           if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
                               if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
                                   pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
                               }
                               OSTCBCur->OSTCBFlagsRdy = flags_rdy;      /* Save flags that were ready               */
                               OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
                               *perr                   = OS_ERR_NONE;
                               return (flags_rdy);
                           } else {                                      /* Block task until events occur or timeout */
                               OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
                               OS_EXIT_CRITICAL();
                           }
                           break;
              
              #if OS_FLAG_WAIT_CLR_EN > 0
                      case OS_FLAG_WAIT_CLR_ALL:                         /* See if all required flags are cleared    */
                           flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags);  /* Extract only the bits we want     */
                           if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
                               if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
                                   pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we wanted        */
                               }
                               OSTCBCur->OSTCBFlagsRdy = flags_rdy;      /* Save flags that were ready               */
                               OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
                               *perr                   = OS_ERR_NONE;
                               return (flags_rdy);
                           } else {                                      /* Block task until events occur or timeout */
                               OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
                               OS_EXIT_CRITICAL();
                           }
                           break;
              
                      case OS_FLAG_WAIT_CLR_ANY:
                           flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want      */
                           if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
                               if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
                                   pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
                               }
                               OSTCBCur->OSTCBFlagsRdy = flags_rdy;      /* Save flags that were ready               */
                               OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
                               *perr                   = OS_ERR_NONE;
                               return (flags_rdy);
                           } else {                                      /* Block task until events occur or timeout */
                               OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
                               OS_EXIT_CRITICAL();
                           }
                           break;
              #endif
              
C51 COMPILER V8.17   OS_FLAG                                                               03/26/2009 14:24:24 PAGE 12  

                      default:
                           OS_EXIT_CRITICAL();
                           flags_rdy = (OS_FLAGS)0;
                           *perr      = OS_ERR_FLAG_WAIT_TYPE;
                           return (flags_rdy);
                  }
              /*$PAGE*/
                  OS_Sched();                                            /* Find next HPT ready to run               */
                  OS_ENTER_CRITICAL();
                  if (OSTCBCur->OSTCBStatPend != OS_STAT_PEND_OK) {      /* Have we timed-out or aborted?            */
                      pend_stat                = OSTCBCur->OSTCBStatPend;
                      OSTCBCur->OSTCBStatPend  = OS_STAT_PEND_OK;
                      OS_FlagUnlink(&node);
                      OSTCBCur->OSTCBStat      = OS_STAT_RDY;            /* Yes, make task ready-to-run              */
                      OS_EXIT_CRITICAL();
                      flags_rdy                = (OS_FLAGS)0;
                      switch (pend_stat) {
                          case OS_STAT_PEND_ABORT:
                               *perr = OS_ERR_PEND_ABORT;                 /* Indicate that we aborted   waiting       */
                               break;
              
                          case OS_STAT_PEND_TO:
                          default:
                               *perr = OS_ERR_TIMEOUT;                    /* Indicate that we timed-out waiting       */
                               break;
                      }
                      return (flags_rdy);
                  }
                  flags_rdy = OSTCBCur->OSTCBFlagsRdy;
                  if (consume == OS_TRUE) {                              /* See if we need to consume the flags      */
                      switch (wait_type) {
                          case OS_FLAG_WAIT_SET_ALL:
                          case OS_FLAG_WAIT_SET_ANY:                     /* Clear ONLY the flags we got              */
                               pgrp->OSFlagFlags &= ~flags_rdy;
                               break;
              
              #if OS_FLAG_WAIT_CLR_EN > 0
                          case OS_FLAG_WAIT_CLR_ALL:
                          case OS_FLAG_WAIT_CLR_ANY:                     /* Set   ONLY the flags we got              */
                               pgrp->OSFlagFlags |=  flags_rdy;
                               break;
              #endif
                          default:
                               OS_EXIT_CRITICAL();
                               *perr = OS_ERR_FLAG_WAIT_TYPE;
                               return ((OS_FLAGS)0);
                      }
                  }
                  OS_EXIT_CRITICAL();
                  *perr = OS_ERR_NONE;                                   /* Event(s) must have occurred              */
                  return (flags_rdy);
              }
              /*$PAGE*/
              /*
              *********************************************************************************************************
              *                               GET FLAGS WHO CAUSED TASK TO BECOME READY
              *
              * Description: This function is called to obtain the flags that caused the task to become ready to run.
              *              In other words, this function allows you to tell "Who done it!".
              *
              * Arguments  : None
              *
C51 COMPILER V8.17   OS_FLAG                                                               03/26/2009 14:24:24 PAGE 13  

              * Returns    : The flags that caused the task to be ready.
              *
              * Called from: Task ONLY
              *********************************************************************************************************
              */
              
              OS_FLAGS  OSFlagPendGetFlagsRdy (void) reentrant
              {
                  OS_FLAGS      flags;
              #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
                  OS_CPU_SR     cpu_sr = 0;
              #endif
              
              
              
                  OS_ENTER_CRITICAL();
                  flags = OSTCBCur->OSTCBFlagsRdy;
                  OS_EXIT_CRITICAL();
                  return (flags);
              }
              
              /*$PAGE*/
              /*
              *********************************************************************************************************
              *                                         POST EVENT FLAG BIT(S)
              *
              * Description: This function is called to set or clear some bits in an event flag group.  The bits to
              *              set or clear are specified by a 'bit mask'.
              *
              * Arguments  : pgrp          is a pointer to the desired event flag group.
              *
              *              flags         If 'opt' (see below) is OS_FLAG_SET, each bit that is set in 'flags' will
              *                            set the corresponding bit in the event flag group.  e.g. to set bits 0, 4
              *                            and 5 you would set 'flags' to:
              *
              *                                0x31     (note, bit 0 is least significant bit)
              *
              *                            If 'opt' (see below) is OS_FLAG_CLR, each bit that is set in 'flags' will
              *                            CLEAR the corresponding bit in the event flag group.  e.g. to clear bits 0,
              *                            4 and 5 you would specify 'flags' as:
              *
              *                                0x31     (note, bit 0 is least significant bit)
              *
              *              opt           indicates whether the flags will be:
              *                                set     (OS_FLAG_SET) or
              *                                cleared (OS_FLAG_CLR)
              *
              *              perr          is a pointer to an error code and can be:
              *                            OS_ERR_NONE                The call was successfull
              *                            OS_ERR_FLAG_INVALID_PGRP   You passed a NULL pointer
              *                            OS_ERR_EVENT_TYPE          You are not pointing to an event flag group
              *                            OS_ERR_FLAG_INVALID_OPT    You specified an invalid option
              *
              * Returns    : the new value of the event flags bits that are still set.
              *
              * Called From: Task or ISR
              *
              * WARNING(s) : 1) The execution time of this function depends on the number of tasks waiting on the event
              *                 flag group.
              *              2) The amount of time interrupts are DISABLED depends on the number of tasks waiting on
              *                 the event flag group.
              *********************************************************************************************************
C51 COMPILER V8.17   OS_FLAG                                                               03/26/2009 14:24:24 PAGE 14  

              */
              OS_FLAGS  OSFlagPost (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U opt, INT8U *perr) reentrant
              {
                  OS_FLAG_NODE *pnode;
                  BOOLEAN       sched;
                  OS_FLAGS      flags_cur;
                  OS_FLAGS      flags_rdy;
                  BOOLEAN       rdy;
              #if OS_CRITICAL_METHOD == 3                          /* Allocate storage for CPU status register       */
                  OS_CPU_SR     cpu_sr = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -