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

📄 os_flag.lst

📁 ARM仿真案例
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000062   2189               LDRH     R1,[R4, #+8]
   \   00000064   B943               BICS     R1,R1,R7
   \   00000066   2181               STRH     R1,[R4, #+8]
   \   00000068   01E0               B        ??OSFlagAccept_11
    117                           }
    118                       } else {
    119                           *err  = OS_FLAG_ERR_NOT_RDY;
   \                     ??OSFlagAccept_10:
   \   0000006A   9821               MOVS     R1,#+152
   \   0000006C   2970               STRB     R1,[R5, #+0]
    120                       }
    121                       OS_EXIT_CRITICAL();
   \                     ??OSFlagAccept_11:
   \   0000006E   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
   \   00000072   3FE0               B        ??OSFlagAccept_12
    122                       break;
    123          
    124                  case OS_FLAG_WAIT_SET_ANY:
    125                       flags_rdy = pgrp->OSFlagFlags & flags;        /* Extract only the bits we want            */
   \                     ??OSFlagAccept_8:
   \   00000074   2189               LDRH     R1,[R4, #+8]
   \   00000076   6A46               MOV      R2,SP
   \   00000078   1788               LDRH     R7,[R2, #+0]
   \   0000007A   0F40               ANDS     R7,R7,R1
    126                       if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
   \   0000007C   3F04               LSLS     R7,R7,#+16       ;; ZeroExtS R7,R7,#+16,#+16
   \   0000007E   3F0C               LSRS     R7,R7,#+16
   \   00000080   002F               CMP      R7,#+0
   \   00000082   05D0               BEQ      ??OSFlagAccept_13
    127                           if (consume == TRUE) {                    /* See if we need to consume the flags      */
   \   00000084   012E               CMP      R6,#+1
   \   00000086   05D1               BNE      ??OSFlagAccept_14
    128                               pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
   \   00000088   2189               LDRH     R1,[R4, #+8]
   \   0000008A   B943               BICS     R1,R1,R7
   \   0000008C   2181               STRH     R1,[R4, #+8]
   \   0000008E   01E0               B        ??OSFlagAccept_14
    129                           }
    130                       } else {
    131                           *err  = OS_FLAG_ERR_NOT_RDY;
   \                     ??OSFlagAccept_13:
   \   00000090   9821               MOVS     R1,#+152
   \   00000092   2970               STRB     R1,[R5, #+0]
    132                       }
    133                       OS_EXIT_CRITICAL();
   \                     ??OSFlagAccept_14:
   \   00000094   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
   \   00000098   2CE0               B        ??OSFlagAccept_12
    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_5:
   \   0000009A   2189               LDRH     R1,[R4, #+8]
   \   0000009C   6A46               MOV      R2,SP
   \   0000009E   1788               LDRH     R7,[R2, #+0]
   \   000000A0   8F43               BICS     R7,R7,R1
    139                       if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
   \   000000A2   6946               MOV      R1,SP
   \   000000A4   0988               LDRH     R1,[R1, #+0]
   \   000000A6   3F04               LSLS     R7,R7,#+16       ;; ZeroExtS R7,R7,#+16,#+16
   \   000000A8   3F0C               LSRS     R7,R7,#+16
   \   000000AA   8F42               CMP      R7,R1
   \   000000AC   05D1               BNE      ??OSFlagAccept_15
    140                           if (consume == TRUE) {                    /* See if we need to consume the flags      */
   \   000000AE   012E               CMP      R6,#+1
   \   000000B0   05D1               BNE      ??OSFlagAccept_16
    141                               pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we wanted        */
   \   000000B2   2189               LDRH     R1,[R4, #+8]
   \   000000B4   3943               ORRS     R1,R1,R7
   \   000000B6   2181               STRH     R1,[R4, #+8]
   \   000000B8   01E0               B        ??OSFlagAccept_16
    142                           }
    143                       } else {
    144                           *err  = OS_FLAG_ERR_NOT_RDY;
   \                     ??OSFlagAccept_15:
   \   000000BA   9821               MOVS     R1,#+152
   \   000000BC   2970               STRB     R1,[R5, #+0]
    145                       }
    146                       OS_EXIT_CRITICAL();
   \                     ??OSFlagAccept_16:
   \   000000BE   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
   \   000000C2   17E0               B        ??OSFlagAccept_12
    147                       break;
    148          
    149                  case OS_FLAG_WAIT_CLR_ANY:
    150                       flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
   \                     ??OSFlagAccept_6:
   \   000000C4   2189               LDRH     R1,[R4, #+8]
   \   000000C6   6A46               MOV      R2,SP
   \   000000C8   1788               LDRH     R7,[R2, #+0]
   \   000000CA   8F43               BICS     R7,R7,R1
    151                       if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
   \   000000CC   3F04               LSLS     R7,R7,#+16       ;; ZeroExtS R7,R7,#+16,#+16
   \   000000CE   3F0C               LSRS     R7,R7,#+16
   \   000000D0   002F               CMP      R7,#+0
   \   000000D2   05D0               BEQ      ??OSFlagAccept_17
    152                           if (consume == TRUE) {                    /* See if we need to consume the flags      */
   \   000000D4   012E               CMP      R6,#+1
   \   000000D6   05D1               BNE      ??OSFlagAccept_18
    153                               pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
   \   000000D8   2189               LDRH     R1,[R4, #+8]
   \   000000DA   3943               ORRS     R1,R1,R7
   \   000000DC   2181               STRH     R1,[R4, #+8]
   \   000000DE   01E0               B        ??OSFlagAccept_18
    154                           }
    155                       } else {
    156                           *err  = OS_FLAG_ERR_NOT_RDY;
   \                     ??OSFlagAccept_17:
   \   000000E0   9821               MOVS     R1,#+152
   \   000000E2   2970               STRB     R1,[R5, #+0]
    157                       }
    158                       OS_EXIT_CRITICAL();
   \                     ??OSFlagAccept_18:
   \   000000E4   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
   \   000000E8   04E0               B        ??OSFlagAccept_12
    159                       break;
    160          #endif
    161          
    162                  default:
    163                       OS_EXIT_CRITICAL();
   \                     ??OSFlagAccept_9:
   \   000000EA   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    164                       flags_rdy = (OS_FLAGS)0;
   \   000000EE   0027               MOVS     R7,#+0
    165                       *err      = OS_FLAG_ERR_WAIT_TYPE;
   \   000000F0   9720               MOVS     R0,#+151
   \   000000F2   2870               STRB     R0,[R5, #+0]
    166                       break;
    167              }
    168              return (flags_rdy);
   \                     ??OSFlagAccept_12:
   \   000000F4   3800               MOVS     R0,R7
   \   000000F6   0004               LSLS     R0,R0,#+16       ;; ZeroExtS R0,R0,#+16,#+16
   \   000000F8   000C               LSRS     R0,R0,#+16
   \                     ??OSFlagAccept_1:
   \   000000FA   01B0               ADD      SP,SP,#+4
   \   000000FC   F0BC               POP      {R4-R7}
   \   000000FE   02BC               POP      {R1}
   \   00000100   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   0400               MOVS     R4,R0
   \   00000004   0D00               MOVS     R5,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,??DataTable4  ;; OSIntNesting
   \   00000008   0078               LDRB     R0,[R0, #+0]
   \   0000000A   0128               CMP      R0,#+1
   \   0000000C   03D3               BCC      ??OSFlagCreate_0
    202                  *err = OS_ERR_CREATE_ISR;                   /* ... can't CREATE from an ISR                    */
   \   0000000E   8D20               MOVS     R0,#+141
   \   00000010   2870               STRB     R0,[R5, #+0]
    203                  return ((OS_FLAG_GRP *)0);
   \   00000012   0020               MOVS     R0,#+0
   \   00000014   1DE0               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,??DataTable8  ;; 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   12D0               BEQ      ??OSFlagCreate_2
    208                                                              /* Adjust free list                                */
    209                  OSFlagFreeList       = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
   \   00000022   ....               LDR      R1,??DataTable8  ;; OSFlagFreeList
   \   00000024   ....               LDR      R2,??DataTable8  ;; OSFlagFreeList
   \   00000026   1268               LDR      R2,[R2, #+0]
   \   00000028   5268               LDR      R2,[R2, #+4]
   \   0000002A   0A60               STR      R2,[R1, #+0]

⌨️ 快捷键说明

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