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

📄 os_flag.lst

📁 IAR project for MSP430 and uC/OS. All configured to start filling with tasks.
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   0318  8BDD0400          BIS     R13,4(R11)      
   \   031C            ?0148:
    465                           }
    466                           flags_cur = pgrp->OSFlagFlags;            /* Will return the state of the group       */
   \   031C  1C4B0400          MOV     4(R11),R12      
    467                           OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
   \   0320  32D2              EINT            
    468                           *err      = OS_NO_ERR;
   \   0322  C8430000          MOV.B   #0,0(R8)        
    469                           return (flags_cur);
    470                       } else {                                      /* Block task until events occur or timeout */
   \   0326  463C              JMP     (?0152) 
   \   0328            ?0146:
    471                           OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
   \   0328  0C12              PUSH    R12     
   \   032A  4A12              PUSH.B  R10     
   \   032C  0E12              PUSH    R14     
   \   032E  0E41              MOV     SP,R14  
   \   0330  3E500600          ADD     #6,R14  
   \   0334  0C4B              MOV     R11,R12 
   \   0336  B012F204          CALL    #OS_FlagBlock   
   \   033A  31500600          ADD     #6,SP   
    472                           OS_EXIT_CRITICAL();
   \   033E  32D2              EINT            
    473                       }
    474                       break;
   \   0340  063C              JMP     (?0128) 
   \   0342            ?0149:
    475          #endif
    476          
    477                  default:
    478                       OS_EXIT_CRITICAL();
   \   0342  32D2              EINT            
    479                       flags_cur = (OS_FLAGS)0;
   \   0344  0C43              MOV     #0,R12  
    480                       *err      = OS_FLAG_ERR_WAIT_TYPE;
   \   0346  F8409700          MOV.B   #151,0(R8)      
   \   034A  0000
    481                       return (flags_cur);
    482              }
   \   034C  333C              JMP     (?0152) 
   \   034E            ?0128:
    483              OS_Sched();                                            /* Find next HPT ready to run               */
   \   034E  B0120000          CALL    #OS_Sched       
    484              OS_ENTER_CRITICAL();
   \   0352  32C2              DINT            
    485              if (OSTCBCur->OSTCBStat & OS_STAT_FLAG) {              /* Have we timed-out?                       */
   \   0354  1C420000          MOV     &OSTCBCur,R12   
   \   0358  FCB02000          BIT.B   #32,28(R12)     
   \   035C  1C00
   \   035E  0D24              JEQ     (?0151) 
    486                  OS_FlagUnlink(&node);
   \   0360  0C41              MOV     SP,R12  
   \   0362  B012D205          CALL    #OS_FlagUnlink  
    487                  OSTCBCur->OSTCBStat = OS_STAT_RDY;                 /* Yes, make task ready-to-run              */
   \   0366  1C420000          MOV     &OSTCBCur,R12   
   \   036A  CC431C00          MOV.B   #0,28(R12)      
    488                  OS_EXIT_CRITICAL();
   \   036E  32D2              EINT            
    489                  flags_cur           = (OS_FLAGS)0;
   \   0370  0C43              MOV     #0,R12  
    490                  *err                = OS_TIMEOUT;                  /* Indicate that we timed-out waiting       */
   \   0372  F8400A00          MOV.B   #10,0(R8)       
   \   0376  0000
    491              } else {
   \   0378  1D3C              JMP     (?0152) 
   \   037A            ?0151:
    492                  if (consume == TRUE) {                             /* See if we need to consume the flags      */
   \   037A  5993              CMP.B   #1,R9   
   \   037C  1620              JNE     (?0155) 
    493                      switch (wait_type) {
   \   037E  2A92              CMP     #4,R10  
   \   0380  142C              JC      (?0155) 
   \   0382  0A5A              ADD     R10,R10 
   \   0384  104A8803          BR      ?0219(R10)      
   \   0388            ?0219:
   \   0388  A003              DW      ?0157   
   \   038A  A003              DW      ?0157   
   \   038C  9003              DW      ?0156   
   \   038E  9003              DW      ?0156   
   \   0390            ?0156:
    494                          case OS_FLAG_WAIT_SET_ALL:
    495                          case OS_FLAG_WAIT_SET_ANY:                 /* Clear ONLY the flags we got              */
    496                               pgrp->OSFlagFlags &= ~OSTCBCur->OSTCBFlagsRdy;
   \   0390  1C420000          MOV     &OSTCBCur,R12   
   \   0394  1C4C1800          MOV     24(R12),R12     
   \   0398  3CE3              XOR     #-1,R12 
   \   039A  8BFC0400          AND     R12,4(R11)      
    497                               break;
   \   039E  053C              JMP     (?0155) 
   \   03A0            ?0157:
    498          
    499          #if OS_FLAG_WAIT_CLR_EN > 0
    500                          case OS_FLAG_WAIT_CLR_ALL:
    501                          case OS_FLAG_WAIT_CLR_ANY:                 /* Set   ONLY the flags we got              */
    502                               pgrp->OSFlagFlags |= OSTCBCur->OSTCBFlagsRdy;
   \   03A0  1C420000          MOV     &OSTCBCur,R12   
   \   03A4  9BDC1800          BIS     24(R12),4(R11)  
   \   03A8  0400
    503                               break;
   \   03AA            ?0155:
    504          #endif
    505                      }
    506                  }
    507                  flags_cur = pgrp->OSFlagFlags;
   \   03AA  1C4B0400          MOV     4(R11),R12      
    508                  OS_EXIT_CRITICAL();
   \   03AE  32D2              EINT            
    509                  *err      = OS_NO_ERR;                             /* Event(s) must have occurred              */
   \   03B0  C8430000          MOV.B   #0,0(R8)        
   \   03B4            ?0152:
    510              }
    511              return (flags_cur);
    512          }
   \   03B4  31500C00          ADD     #12,SP  
   \   03B8  3941              POP     R9      
   \   03BA  3841              POP     R8      
   \   03BC  3B41              POP     R11     
   \   03BE  3A41              POP     R10     
   \   03C0  3041              RET             
   \   03C2            OSFlagPost:
    513          /*$PAGE*/
    514          /*
    515          *********************************************************************************************************
    516          *                                         POST EVENT FLAG BIT(S)
    517          *
    518          * Description: This function is called to set or clear some bits in an event flag group.  The bits to
    519          *              set or clear are specified by a 'bit mask'.
    520          *
    521          * Arguments  : pgrp          is a pointer to the desired event flag group.
    522          *
    523          *              flags         If 'opt' (see below) is OS_FLAG_SET, each bit that is set in 'flags' will
    524          *                            set the corresponding bit in the event flag group.  e.g. to set bits 0, 4
    525          *                            and 5 you would set 'flags' to:
    526          *
    527          *                                0x31     (note, bit 0 is least significant bit)
    528          *
    529          *                            If 'opt' (see below) is OS_FLAG_CLR, each bit that is set in 'flags' will
    530          *                            CLEAR the corresponding bit in the event flag group.  e.g. to clear bits 0,
    531          *                            4 and 5 you would specify 'flags' as:
    532          *
    533          *                                0x31     (note, bit 0 is least significant bit)
    534          *
    535          *              opt           indicates whether the flags will be:
    536          *                                set     (OS_FLAG_SET) or
    537          *                                cleared (OS_FLAG_CLR)
    538          *
    539          *              err           is a pointer to an error code and can be:
    540          *                            OS_NO_ERR              The call was successfull
    541          *                            OS_FLAG_INVALID_PGRP   You passed a NULL pointer
    542          *                            OS_ERR_EVENT_TYPE      You are not pointing to an event flag group
    543          *                            OS_FLAG_INVALID_OPT    You specified an invalid option
    544          *
    545          * Returns    : the new value of the event flags bits that are still set.
    546          *
    547          * Called From: Task or ISR
    548          *
    549          * WARNING(s) : 1) The execution time of this function depends on the number of tasks waiting on the event
    550          *                 flag group.
    551          *              2) The amount of time interrupts are DISABLED depends on the number of tasks waiting on
    552          *                 the event flag group.
    553          *********************************************************************************************************
    554          */
    555          OS_FLAGS  OSFlagPost (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U opt, INT8U *err)
    556          {
   \   03C2  0A12              PUSH    R10     
   \   03C4  0B12              PUSH    R11     
   \   03C6  0812              PUSH    R8      
   \   03C8  0912              PUSH    R9      
   \   03CA  0A4C              MOV     R12,R10 
   \   03CC  5C410A00          MOV.B   10(SP),R12      
   \   03D0  1B410C00          MOV     12(SP),R11      
    557          #if OS_CRITICAL_METHOD == 3                          /* Allocate storage for CPU status register       */
    558              OS_CPU_SR     cpu_sr;
    559          #endif
    560              OS_FLAG_NODE *pnode;
    561              BOOLEAN       sched;
    562              OS_FLAGS      flags_cur;
    563              OS_FLAGS      flags_rdy;
    564          
    565          
    566          #if OS_ARG_CHK_EN > 0
    567              if (pgrp == (OS_FLAG_GRP *)0) {                  /* Validate 'pgrp'                                */
   \   03D4  0A93              CMP     #0,R10  
   \   03D6  0520              JNE     (?0160) 
    568                  *err = OS_FLAG_INVALID_PGRP;
   \   03D8  FB409600          MOV.B   #150,0(R11)     
   \   03DC  0000
    569                  return ((OS_FLAGS)0);
   \   03DE  0C43              MOV     #0,R12  
    570              }
   \   03E0  6D3C              JMP     (?0193) 
   \   03E2            ?0160:
    571              if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {    /* Make sure we are pointing to an event flag grp */
   \   03E2  7D400500          MOV.B   #5,R13  
   \   03E6  6D9A              CMP.B   @R10,R13        
   \   03E8  0424              JEQ     (?0162) 
    572                  *err = OS_ERR_EVENT_TYPE;
   \   03EA  DB430000          MOV.B   #1,0(R11)       
    573                  return ((OS_FLAGS)0);
   \   03EE  0C43              MOV     #0,R12  
    574              }
   \   03F0  653C              JMP     (?0193) 
   \   03F2            ?0162:
    575          #endif
    576          /*$PAGE*/
    577              OS_ENTER_CRITICAL();
   \   03F2  32C2              DINT            
    578              switch (opt) {
   \   03F4  4C83              SUB.B   #0,R12  
   \   03F6  0324              JEQ     (?0164) 
   \   03F8  5C83              SUB.B   #1,R12  
   \   03FA  0524              JEQ     (?0165) 
   \   03FC  073C              JMP     (?0166) 
   \   03FE            ?0164:
    579                  case OS_FLAG_CLR:
    580                       pgrp->OSFlagFlags &= ~flags;

⌨️ 快捷键说明

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