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

📄 os_flag.lst

📁 stm32+ucos-ii
💻 LST
📖 第 1 页 / 共 5 页
字号:
    234                  OS_SAFETY_CRITICAL_EXCEPTION();
    235                  return ((OS_FLAG_GRP *)0);
    236              }
    237          #endif
    238          
    239              if (OSIntNesting > 0u) {                        /* See if called from ISR ...                      */
   \   00000008   ........           LDR.W    R0,??DataTable9_1
   \   0000000C   0078               LDRB     R0,[R0, #+0]
   \   0000000E   0028               CMP      R0,#+0
   \   00000010   03D0               BEQ.N    ??OSFlagCreate_0
    240                  *perr = OS_ERR_CREATE_ISR;                  /* ... can't CREATE from an ISR                    */
   \   00000012   1020               MOVS     R0,#+16
   \   00000014   2870               STRB     R0,[R5, #+0]
    241                  return ((OS_FLAG_GRP *)0);
   \   00000016   0020               MOVS     R0,#+0
   \   00000018   22E0               B.N      ??OSFlagCreate_1
    242              }
    243              OS_ENTER_CRITICAL();
   \                     ??OSFlagCreate_0:
   \   0000001A   ........           BL       OS_CPU_SR_Save
   \   0000001E   0700               MOVS     R7,R0
    244              pgrp = OSFlagFreeList;                          /* Get next free event flag                        */
   \   00000020   ........           LDR.W    R0,??DataTable9_2
   \   00000024   0068               LDR      R0,[R0, #+0]
   \   00000026   0600               MOVS     R6,R0
    245              if (pgrp != (OS_FLAG_GRP *)0) {                 /* See if we have event flag groups available      */
   \   00000028   002E               CMP      R6,#+0
   \   0000002A   13D0               BEQ.N    ??OSFlagCreate_2
    246                                                              /* Adjust free list                                */
    247                  OSFlagFreeList       = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
   \   0000002C   ........           LDR.W    R0,??DataTable9_2
   \   00000030   0068               LDR      R0,[R0, #+0]
   \   00000032   4068               LDR      R0,[R0, #+4]
   \   00000034   ........           LDR.W    R1,??DataTable9_2
   \   00000038   0860               STR      R0,[R1, #+0]
    248                  pgrp->OSFlagType     = OS_EVENT_TYPE_FLAG;  /* Set to event flag group type                    */
   \   0000003A   0520               MOVS     R0,#+5
   \   0000003C   3070               STRB     R0,[R6, #+0]
    249                  pgrp->OSFlagFlags    = flags;               /* Set to desired initial value                    */
   \   0000003E   3481               STRH     R4,[R6, #+8]
    250                  pgrp->OSFlagWaitList = (void *)0;           /* Clear list of tasks waiting on flags            */
   \   00000040   0020               MOVS     R0,#+0
   \   00000042   7060               STR      R0,[R6, #+4]
    251          #if OS_FLAG_NAME_EN > 0u
    252                  pgrp->OSFlagName     = (INT8U *)(void *)"?";
   \   00000044   ....               ADR.N    R0,??DataTable4  ;; "\?"
   \   00000046   F060               STR      R0,[R6, #+12]
    253          #endif
    254                  OS_EXIT_CRITICAL();
   \   00000048   3800               MOVS     R0,R7
   \   0000004A   ........           BL       OS_CPU_SR_Restore
    255                  *perr                = OS_ERR_NONE;
   \   0000004E   0020               MOVS     R0,#+0
   \   00000050   2870               STRB     R0,[R5, #+0]
   \   00000052   04E0               B.N      ??OSFlagCreate_3
    256              } else {
    257                  OS_EXIT_CRITICAL();
   \                     ??OSFlagCreate_2:
   \   00000054   3800               MOVS     R0,R7
   \   00000056   ........           BL       OS_CPU_SR_Restore
    258                  *perr                = OS_ERR_FLAG_GRP_DEPLETED;
   \   0000005A   7220               MOVS     R0,#+114
   \   0000005C   2870               STRB     R0,[R5, #+0]
    259              }
    260              return (pgrp);                                  /* Return pointer to event flag group              */
   \                     ??OSFlagCreate_3:
   \   0000005E   3000               MOVS     R0,R6
   \                     ??OSFlagCreate_1:
   \   00000060   F2BD               POP      {R1,R4-R7,PC}    ;; return
    261          }
    262          
    263          /*$PAGE*/
    264          /*
    265          *********************************************************************************************************
    266          *                                     DELETE AN EVENT FLAG GROUP
    267          *
    268          * Description: This function deletes an event flag group and readies all tasks pending on the event flag
    269          *              group.
    270          *
    271          * Arguments  : pgrp          is a pointer to the desired event flag group.
    272          *
    273          *              opt           determines delete options as follows:
    274          *                            opt == OS_DEL_NO_PEND   Deletes the event flag group ONLY if no task pending
    275          *                            opt == OS_DEL_ALWAYS    Deletes the event flag group even if tasks are
    276          *                                                    waiting.  In this case, all the tasks pending will be
    277          *                                                    readied.
    278          *
    279          *              perr          is a pointer to an error code that can contain one of the following values:
    280          *                            OS_ERR_NONE               The call was successful and the event flag group was
    281          *                                                      deleted
    282          *                            OS_ERR_DEL_ISR            If you attempted to delete the event flag group from
    283          *                                                      an ISR
    284          *                            OS_ERR_FLAG_INVALID_PGRP  If 'pgrp' is a NULL pointer.
    285          *                            OS_ERR_EVENT_TYPE         If you didn't pass a pointer to an event flag group
    286          *                            OS_ERR_INVALID_OPT        An invalid option was specified
    287          *                            OS_ERR_TASK_WAITING       One or more tasks were waiting on the event flag
    288          *                                                      group.
    289          *
    290          * Returns    : pgrp          upon error
    291          *              (OS_EVENT *)0 if the event flag group was successfully deleted.
    292          *
    293          * Note(s)    : 1) This function must be used with care.  Tasks that would normally expect the presence of
    294          *                 the event flag group MUST check the return code of OSFlagAccept() and OSFlagPend().
    295          *              2) This call can potentially disable interrupts for a long time.  The interrupt disable
    296          *                 time is directly proportional to the number of tasks waiting on the event flag group.
    297          *********************************************************************************************************
    298          */
    299          
    300          #if OS_FLAG_DEL_EN > 0u

   \                                 In section .text, align 2, keep-with-next
    301          OS_FLAG_GRP  *OSFlagDel (OS_FLAG_GRP  *pgrp,
    302                                   INT8U         opt,
    303                                   INT8U        *perr)
    304          {
   \                     OSFlagDel:
   \   00000000   2DE9F047           PUSH     {R4-R10,LR}
   \   00000004   0400               MOVS     R4,R0
   \   00000006   0D00               MOVS     R5,R1
   \   00000008   1600               MOVS     R6,R2
    305              BOOLEAN       tasks_waiting;
    306              OS_FLAG_NODE *pnode;
    307              OS_FLAG_GRP  *pgrp_return;
    308          #if OS_CRITICAL_METHOD == 3u                               /* Allocate storage for CPU status register */
    309              OS_CPU_SR     cpu_sr = 0u;
   \   0000000A   5FF0000A           MOVS     R10,#+0
    310          #endif
    311          
    312          
    313          
    314          #ifdef OS_SAFETY_CRITICAL
    315              if (perr == (INT8U *)0) {
    316                  OS_SAFETY_CRITICAL_EXCEPTION();
    317                  return ((OS_FLAG_GRP *)0);
    318              }
    319          #endif
    320          
    321          #if OS_ARG_CHK_EN > 0u
    322              if (pgrp == (OS_FLAG_GRP *)0) {                        /* Validate 'pgrp'                          */
    323                  *perr = OS_ERR_FLAG_INVALID_PGRP;
    324                  return (pgrp);
    325              }
    326          #endif
    327              if (OSIntNesting > 0u) {                               /* See if called from ISR ...               */
   \   0000000E   ........           LDR.W    R0,??DataTable9_1
   \   00000012   0078               LDRB     R0,[R0, #+0]
   \   00000014   0028               CMP      R0,#+0
   \   00000016   03D0               BEQ.N    ??OSFlagDel_0
    328                  *perr = OS_ERR_DEL_ISR;                            /* ... can't DELETE from an ISR             */
   \   00000018   0F20               MOVS     R0,#+15
   \   0000001A   3070               STRB     R0,[R6, #+0]
    329                  return (pgrp);
   \   0000001C   2000               MOVS     R0,R4
   \   0000001E   63E0               B.N      ??OSFlagDel_1
    330              }
    331              if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {          /* Validate event group type                */
   \                     ??OSFlagDel_0:
   \   00000020   2078               LDRB     R0,[R4, #+0]
   \   00000022   0528               CMP      R0,#+5
   \   00000024   03D0               BEQ.N    ??OSFlagDel_2
    332                  *perr = OS_ERR_EVENT_TYPE;
   \   00000026   0120               MOVS     R0,#+1
   \   00000028   3070               STRB     R0,[R6, #+0]
    333                  return (pgrp);
   \   0000002A   2000               MOVS     R0,R4
   \   0000002C   5CE0               B.N      ??OSFlagDel_1
    334              }
    335              OS_ENTER_CRITICAL();
   \                     ??OSFlagDel_2:
   \   0000002E   ........           BL       OS_CPU_SR_Save
   \   00000032   8246               MOV      R10,R0
    336              if (pgrp->OSFlagWaitList != (void *)0) {               /* See if any tasks waiting on event flags  */
   \   00000034   6068               LDR      R0,[R4, #+4]
   \   00000036   0028               CMP      R0,#+0
   \   00000038   02D0               BEQ.N    ??OSFlagDel_3
    337                  tasks_waiting = OS_TRUE;                           /* Yes                                      */
   \   0000003A   0120               MOVS     R0,#+1
   \   0000003C   0700               MOVS     R7,R0
   \   0000003E   01E0               B.N      ??OSFlagDel_4
    338              } else {
    339                  tasks_waiting = OS_FALSE;                          /* No                                       */
   \                     ??OSFlagDel_3:
   \   00000040   0020               MOVS     R0,#+0
   \   00000042   0700               MOVS     R7,R0
    340              }
    341              switch (opt) {
   \                     ??OSFlagDel_4:
   \   00000044   EDB2               UXTB     R5,R5            ;; ZeroExt  R5,R5,#+24,#+24
   \   00000046   002D               CMP      R5,#+0
   \   00000048   02D0               BEQ.N    ??OSFlagDel_5
   \   0000004A   012D               CMP      R5,#+1
   \   0000004C   1FD0               BEQ.N    ??OSFlagDel_6
   \   0000004E   44E0               B.N      ??OSFlagDel_7
    342                  case OS_DEL_NO_PEND:                               /* Delete group if no task waiting          */
    343                       if (tasks_waiting == OS_FALSE) {
   \                     ??OSFlagDel_5:
   \   00000050   FFB2               UXTB     R7,R7            ;; ZeroExt  R7,R7,#+24,#+24
   \   00000052   002F               CMP      R7,#+0
   \   00000054   14D1               BNE.N    ??OSFlagDel_8
    344          #if OS_FLAG_NAME_EN > 0u
    345                           pgrp->OSFlagName     = (INT8U *)(void *)"?";
   \   00000056   ....               ADR.N    R0,??DataTable4  ;; "\?"
   \   00000058   E060               STR      R0,[R4, #+12]
    346          #endif
    347                           pgrp->OSFlagType     = OS_EVENT_TYPE_UNUSED;
   \   0000005A   0020               MOVS     R0,#+0
   \   0000005C   2070               STRB     R0,[R4, #+0]
    348                           pgrp->OSFlagWaitList = (void *)OSFlagFreeList; /* Return group to free list           */
   \   0000005E   ........           LDR.W    R0,??DataTable9_2
   \   00000062   0068               LDR      R0,[R0, #+0]
   \   00000064   6060               STR      R0,[R4, #+4]
    349                           pgrp->OSFlagFlags    = (OS_FLAGS)0;
   \   00000066   0020               MOVS     R0,#+0

⌨️ 快捷键说明

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