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

📄 os_flag.lst

📁 IAR project for MSP430 and uC/OS. All configured to start filling with tasks.
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   006A  1D4C0400          MOV     4(R12),R13      
    118                       OS_EXIT_CRITICAL();
   \   006E  32D2              EINT            
    119                       break;
   \   0070  393C              JMP     (?0065) 
   \   0072            ?0072:
    120          
    121                  case OS_FLAG_WAIT_SET_ANY:
    122                       flags_rdy = pgrp->OSFlagFlags & flags;        /* Extract only the bits we want            */
   \   0072  1D4C0400          MOV     4(R12),R13      
   \   0076  0DFE              AND     R14,R13 
    123                       if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
   \   0078  0624              JEQ     (?0074) 
    124                           if (consume == TRUE) {                    /* See if we need to consume the flags      */
   \   007A  5F93              CMP.B   #1,R15  
   \   007C  0720              JNE     (?0077) 
    125                               pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
   \   007E  3DE3              XOR     #-1,R13 
   \   0080  8CFD0400          AND     R13,4(R12)      
    126                           }
    127                       } else {
   \   0084  033C              JMP     (?0077) 
   \   0086            ?0074:
    128                           *err  = OS_FLAG_ERR_NOT_RDY;
   \   0086  FA409800          MOV.B   #152,0(R10)     
   \   008A  0000
   \   008C            ?0077:
    129                       }
    130                       flags_cur = pgrp->OSFlagFlags;                /* Will return the state of the group       */
   \   008C  1D4C0400          MOV     4(R12),R13      
    131                       OS_EXIT_CRITICAL();
   \   0090  32D2              EINT            
    132                       break;
   \   0092  283C              JMP     (?0065) 
   \   0094            ?0078:
    133          
    134          #if OS_FLAG_WAIT_CLR_EN > 0
    135                  case OS_FLAG_WAIT_CLR_ALL:                         /* See if all required flags are cleared    */
    136                       flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
   \   0094  1D4C0400          MOV     4(R12),R13      
   \   0098  3DE3              XOR     #-1,R13 
   \   009A  0DFE              AND     R14,R13 
    137                       if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
   \   009C  0E9D              CMP     R13,R14 
   \   009E  0520              JNE     (?0080) 
    138                           if (consume == TRUE) {                    /* See if we need to consume the flags      */
   \   00A0  5F93              CMP.B   #1,R15  
   \   00A2  0620              JNE     (?0083) 
    139                               pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we wanted        */
   \   00A4  8CDD0400          BIS     R13,4(R12)      
    140                           }
    141                       } else {
   \   00A8  033C              JMP     (?0083) 
   \   00AA            ?0080:
    142                           *err  = OS_FLAG_ERR_NOT_RDY;
   \   00AA  FA409800          MOV.B   #152,0(R10)     
   \   00AE  0000
   \   00B0            ?0083:
    143                       }
    144                       flags_cur = pgrp->OSFlagFlags;                /* Will return the state of the group       */
   \   00B0  1D4C0400          MOV     4(R12),R13      
    145                       OS_EXIT_CRITICAL();
   \   00B4  32D2              EINT            
    146                       break;
   \   00B6  163C              JMP     (?0065) 
   \   00B8            ?0084:
    147          
    148                  case OS_FLAG_WAIT_CLR_ANY:
    149                       flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
   \   00B8  1D4C0400          MOV     4(R12),R13      
   \   00BC  3DE3              XOR     #-1,R13 
   \   00BE  0DFE              AND     R14,R13 
    150                       if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
   \   00C0  0524              JEQ     (?0086) 
    151                           if (consume == TRUE) {                    /* See if we need to consume the flags      */
   \   00C2  5F93              CMP.B   #1,R15  
   \   00C4  0620              JNE     (?0089) 
    152                               pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
   \   00C6  8CDD0400          BIS     R13,4(R12)      
    153                           }
    154                       } else {
   \   00CA  033C              JMP     (?0089) 
   \   00CC            ?0086:
    155                           *err  = OS_FLAG_ERR_NOT_RDY;
   \   00CC  FA409800          MOV.B   #152,0(R10)     
   \   00D0  0000
   \   00D2            ?0089:
    156                       }
    157                       flags_cur = pgrp->OSFlagFlags;                /* Will return the state of the group       */
   \   00D2  1D4C0400          MOV     4(R12),R13      
    158                       OS_EXIT_CRITICAL();
   \   00D6  32D2              EINT            
    159                       break;
   \   00D8  053C              JMP     (?0065) 
   \   00DA            ?0090:
    160          #endif
    161          
    162                  default:
    163                       OS_EXIT_CRITICAL();
   \   00DA  32D2              EINT            
    164                       flags_cur = (OS_FLAGS)0;
   \   00DC  0D43              MOV     #0,R13  
    165                       *err      = OS_FLAG_ERR_WAIT_TYPE;
   \   00DE  FA409700          MOV.B   #151,0(R10)     
   \   00E2  0000
    166                       break;
   \   00E4            ?0065:
    167              }
    168              return (flags_cur);
   \   00E4  0C4D              MOV     R13,R12 
    169          }
   \   00E6            ?0091:
   \   00E6  3A41              POP     R10     
   \   00E8  3041              RET             
   \   00EA            OSFlagCreate:
    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          
    193          OS_FLAG_GRP  *OSFlagCreate (OS_FLAGS flags, INT8U *err)
    194          {
    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 ...                      */
   \   00EA  C2930000          CMP.B   #0,&OSIntNesting        
   \   00EE  0524              JEQ     (?0093) 
    202                  *err = OS_ERR_CREATE_ISR;                   /* ... can't CREATE from an ISR                    */
   \   00F0  FE408D00          MOV.B   #141,0(R14)     
   \   00F4  0000
    203                  return ((OS_FLAG_GRP *)0);
   \   00F6  0C43              MOV     #0,R12  
    204              }
   \   00F8  3041              RET             
   \   00FA            ?0093:
    205              OS_ENTER_CRITICAL();
   \   00FA  32C2              DINT            
    206              pgrp = OSFlagFreeList;                          /* Get next free event flag                        */
   \   00FC  1D420000          MOV     &OSFlagFreeList,R13     
    207              if (pgrp != (OS_FLAG_GRP *)0) {                 /* See if we have event flag groups available      */
   \   0100  0D93              CMP     #0,R13  
   \   0102  1024              JEQ     (?0095) 
    208                                                              /* Adjust free list                                */
    209                  OSFlagFreeList       = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
   \   0104  1F420000          MOV     &OSFlagFreeList,R15     
   \   0108  924F0200          MOV     2(R15),&OSFlagFreeList  
   \   010C  0000
    210                  pgrp->OSFlagType     = OS_EVENT_TYPE_FLAG;  /* Set to event flag group type                    */
   \   010E  FD400500          MOV.B   #5,0(R13)       
   \   0112  0000
    211                  pgrp->OSFlagFlags    = flags;               /* Set to desired initial value                    */
   \   0114  8D4C0400          MOV     R12,4(R13)      
    212                  pgrp->OSFlagWaitList = (void *)0;           /* Clear list of tasks waiting on flags            */
   \   0118  8D430200          MOV     #0,2(R13)       
    213                  OS_EXIT_CRITICAL();
   \   011C  32D2              EINT            
    214                  *err                 = OS_NO_ERR;
   \   011E  CE430000          MOV.B   #0,0(R14)       
    215              } else {
   \   0122  043C              JMP     (?0096) 
   \   0124            ?0095:
    216                  OS_EXIT_CRITICAL();
   \   0124  32D2              EINT            
    217                  *err                 = OS_FLAG_GRP_DEPLETED;
   \   0126  FE409A00          MOV.B   #154,0(R14)     
   \   012A  0000
   \   012C            ?0096:
    218              }
    219              return (pgrp);                                  /* Return pointer to event flag group              */
   \   012C  0C4D              MOV     R13,R12 
    220          }
   \   012E  3041              RET             
   \   0130            OSFlagDel:
    221          
    222          /*$PAGE*/
    223          /*
    224          *********************************************************************************************************
    225          *                                     DELETE AN EVENT FLAG GROUP
    226          *
    227          * Description: This function deletes an event flag group and readies all tasks pending on the event flag
    228          *              group.
    229          *
    230          * Arguments  : pgrp          is a pointer to the desired event flag group.
    231          *
    232          *              opt           determines delete options as follows:
    233          *                            opt == OS_DEL_NO_PEND   Deletes the event flag group ONLY if no task pending
    234          *                            opt == OS_DEL_ALWAYS    Deletes the event flag group even if tasks are
    235          *                                                    waiting.  In this case, all the tasks pending will be
    236          *                                                    readied.
    237          *
    238          *              err           is a pointer to an error code that can contain one of the following values:
    239          *                            OS_NO_ERR               The call was successful and the event flag group was
    240          *                                                    deleted
    241          *                            OS_ERR_DEL_ISR          If you attempted to delete the event flag group from
    242          *                                                    an ISR
    243          *                            OS_FLAG_INVALID_PGRP    If 'pgrp' is a NULL pointer.
    244          *                            OS_ERR_EVENT_TYPE       If you didn't pass a pointer to an event flag group
    245          *                            OS_ERR_INVALID_OPT      An invalid option was specified

⌨️ 快捷键说明

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