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

📄 os_flag.lst

📁 ARM仿真案例
💻 LST
📖 第 1 页 / 共 5 页
字号:
    117                           }
    118                       } else {
    119                           *err  = OS_FLAG_ERR_NOT_RDY;
   \                     ??OSFlagAccept_11:
   \   0000005E   9821               MOVS     R1,#+152
   \   00000060   2970               STRB     R1,[R5, #+0]
    120                       }
    121                       OS_EXIT_CRITICAL();
   \                     ??OSFlagAccept_13:
   \   00000062   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
   \   00000066   1DE0               B        ??OSFlagAccept_14
    122                       break;
    123          
    124                  case OS_FLAG_WAIT_SET_ANY:
    125                       flags_rdy = pgrp->OSFlagFlags & flags;        /* Extract only the bits we want            */
   \                     ??OSFlagAccept_9:
   \   00000068   2189               LDRH     R1,[R4, #+8]
   \   0000006A   6A46               MOV      R2,SP
   \   0000006C   1788               LDRH     R7,[R2, #+0]
   \   0000006E   0F40               ANDS     R7,R7,R1
    126                       if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
   \   00000070   F5D0               BEQ      ??OSFlagAccept_11
    127                           if (consume == TRUE) {                    /* See if we need to consume the flags      */
   \   00000072   EFE7               B.N      ??OSFlagAccept_12
    128                               pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
    129                           }
    130                       } else {
    131                           *err  = OS_FLAG_ERR_NOT_RDY;
    132                       }
    133                       OS_EXIT_CRITICAL();
    134                       break;
    135          
    136          #if OS_FLAG_WAIT_CLR_EN > 0
    137                  case OS_FLAG_WAIT_CLR_ALL:                         /* See if all required flags are cleared    */
    138                       flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
   \                     ??OSFlagAccept_6:
   \   00000074   2189               LDRH     R1,[R4, #+8]
   \   00000076   6A46               MOV      R2,SP
   \   00000078   1788               LDRH     R7,[R2, #+0]
   \   0000007A   8F43               BICS     R7,R7,R1
    139                       if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
   \   0000007C   1288               LDRH     R2,[R2, #+0]
   \   0000007E   9742               CMP      R7,R2
   \   00000080   EDD1               BNE      ??OSFlagAccept_11
    140                           if (consume == TRUE) {                    /* See if we need to consume the flags      */
   \                     ??OSFlagAccept_15:
   \   00000082   012E               CMP      R6,#+1
   \   00000084   EDD1               BNE      ??OSFlagAccept_13
    141                               pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we wanted        */
   \   00000086   3A00               MOVS     R2,R7
   \   00000088   0A43               ORRS     R2,R2,R1
   \   0000008A   2281               STRH     R2,[R4, #+8]
   \   0000008C   E9E7               B        ??OSFlagAccept_13
    142                           }
    143                       } else {
    144                           *err  = OS_FLAG_ERR_NOT_RDY;
    145                       }
    146                       OS_EXIT_CRITICAL();
    147                       break;
    148          
    149                  case OS_FLAG_WAIT_CLR_ANY:
    150                       flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
   \                     ??OSFlagAccept_7:
   \   0000008E   2189               LDRH     R1,[R4, #+8]
   \   00000090   6A46               MOV      R2,SP
   \   00000092   1788               LDRH     R7,[R2, #+0]
   \   00000094   8F43               BICS     R7,R7,R1
    151                       if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
   \   00000096   E2D0               BEQ      ??OSFlagAccept_11
    152                           if (consume == TRUE) {                    /* See if we need to consume the flags      */
   \   00000098   F3E7               B.N      ??OSFlagAccept_15
    153                               pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
    154                           }
    155                       } else {
    156                           *err  = OS_FLAG_ERR_NOT_RDY;
    157                       }
    158                       OS_EXIT_CRITICAL();
    159                       break;
    160          #endif
    161          
    162                  default:
    163                       OS_EXIT_CRITICAL();
   \                     ??OSFlagAccept_10:
   \   0000009A   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    164                       flags_rdy = (OS_FLAGS)0;
   \   0000009E   0027               MOVS     R7,#+0
    165                       *err      = OS_FLAG_ERR_WAIT_TYPE;
   \   000000A0   9720               MOVS     R0,#+151
   \   000000A2   2870               STRB     R0,[R5, #+0]
    166                       break;
    167              }
    168              return (flags_rdy);
   \                     ??OSFlagAccept_14:
   \   000000A4   3800               MOVS     R0,R7
   \                     ??OSFlagAccept_2:
   \   000000A6   01B0               ADD      SP,SP,#+4
   \   000000A8   F0BC               POP      {R4-R7}
   \   000000AA   02BC               POP      {R1}
   \   000000AC   0847               BX       R1               ;; return
    169          }
    170          #endif
    171          
    172          /*$PAGE*/
    173          /*
    174          *********************************************************************************************************
    175          *                                           CREATE AN EVENT FLAG
    176          *
    177          * Description: This function is called to create an event flag group.
    178          *
    179          * Arguments  : flags         Contains the initial value to store in the event flag group.
    180          *
    181          *              err           is a pointer to an error code which will be returned to your application:
    182          *                               OS_NO_ERR                if the call was successful.
    183          *                               OS_ERR_CREATE_ISR        if you attempted to create an Event Flag from an
    184          *                                                        ISR.
    185          *                               OS_FLAG_GRP_DEPLETED     if there are no more event flag groups
    186          *
    187          * Returns    : A pointer to an event flag group or a NULL pointer if no more groups are available.
    188          *
    189          * Called from: Task ONLY
    190          *********************************************************************************************************
    191          */
    192          

   \                                 In segment CODE, align 4, keep-with-next
    193          OS_FLAG_GRP  *OSFlagCreate (OS_FLAGS flags, INT8U *err)
    194          {
   \                     OSFlagCreate:
   \   00000000   70B5               PUSH     {R4-R6,LR}
   \   00000002   0500               MOVS     R5,R0
   \   00000004   0C00               MOVS     R4,R1
    195          #if OS_CRITICAL_METHOD == 3                         /* Allocate storage for CPU status register        */
    196              OS_CPU_SR    cpu_sr;
    197          #endif
    198              OS_FLAG_GRP *pgrp;
    199          
    200          
    201              if (OSIntNesting > 0) {                         /* See if called from ISR ...                      */
   \   00000006   ....               LDR      R0,??DataTable2  ;; OSIntNesting
   \   00000008   0078               LDRB     R0,[R0, #+0]
   \   0000000A   0028               CMP      R0,#+0
   \   0000000C   03D0               BEQ      ??OSFlagCreate_0
    202                  *err = OS_ERR_CREATE_ISR;                   /* ... can't CREATE from an ISR                    */
   \   0000000E   8D20               MOVS     R0,#+141
   \   00000010   2070               STRB     R0,[R4, #+0]
    203                  return ((OS_FLAG_GRP *)0);
   \   00000012   0020               MOVS     R0,#+0
   \   00000014   19E0               B        ??OSFlagCreate_1
    204              }
    205              OS_ENTER_CRITICAL();
   \                     ??OSFlagCreate_0:
   \   00000016   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
    206              pgrp = OSFlagFreeList;                          /* Get next free event flag                        */
   \   0000001A   ....               LDR      R1,??DataTable6  ;; OSFlagFreeList
   \   0000001C   0E68               LDR      R6,[R1, #+0]
    207              if (pgrp != (OS_FLAG_GRP *)0) {                 /* See if we have event flag groups available      */
   \   0000001E   002E               CMP      R6,#+0
   \   00000020   0ED0               BEQ      ??OSFlagCreate_2
    208                                                              /* Adjust free list                                */
    209                  OSFlagFreeList       = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
   \   00000022   7268               LDR      R2,[R6, #+4]
   \   00000024   0A60               STR      R2,[R1, #+0]
    210                  pgrp->OSFlagType     = OS_EVENT_TYPE_FLAG;  /* Set to event flag group type                    */
   \   00000026   0521               MOVS     R1,#+5
   \   00000028   3170               STRB     R1,[R6, #+0]
    211                  pgrp->OSFlagFlags    = flags;               /* Set to desired initial value                    */
   \   0000002A   3581               STRH     R5,[R6, #+8]
    212                  pgrp->OSFlagWaitList = (void *)0;           /* Clear list of tasks waiting on flags            */
   \   0000002C   0021               MOVS     R1,#+0
   \   0000002E   7160               STR      R1,[R6, #+4]
    213          #if OS_FLAG_NAME_SIZE > 1
    214                  pgrp->OSFlagName[0]  = '?';
   \   00000030   3F21               MOVS     R1,#+63
   \   00000032   B172               STRB     R1,[R6, #+10]
    215                  pgrp->OSFlagName[1]  = OS_ASCII_NUL;
   \   00000034   0021               MOVS     R1,#+0
   \   00000036   F172               STRB     R1,[R6, #+11]
    216          #endif
    217                  OS_EXIT_CRITICAL();
   \   00000038   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    218                  *err                 = OS_NO_ERR;
   \   0000003C   0020               MOVS     R0,#+0
   \   0000003E   02E0               B        ??OSFlagCreate_3
    219              } else {
    220                  OS_EXIT_CRITICAL();
   \                     ??OSFlagCreate_2:
   \   00000040   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    221                  *err                 = OS_FLAG_GRP_DEPLETED;
   \   00000044   9A20               MOVS     R0,#+154
   \                     ??OSFlagCreate_3:
   \   00000046   2070               STRB     R0,[R4, #+0]
    222              }
    223              return (pgrp);                                  /* Return pointer to event flag group              */
   \   00000048   3000               MOVS     R0,R6
   \                     ??OSFlagCreate_1:
   \   0000004A   70BC               POP      {R4-R6}
   \   0000004C   02BC               POP      {R1}
   \   0000004E   0847               BX       R1               ;; return
    224          }
    225          
    226          /*$PAGE*/
    227          /*
    228          *********************************************************************************************************
    229          *                                     DELETE AN EVENT FLAG GROUP
    230          *
    231          * Description: This function deletes an event flag group and readies all tasks pending on the event flag
    232          *              group.

⌨️ 快捷键说明

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