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

📄 lib_mem.lst

📁 stm32+ucos-ii
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000022   1400               MOVS     R4,R2
    493                                                                          /* Start @ end of mem bufs (see Note #2).               */
    494              p1_mem_08          = (const CPU_INT08U *)p1_mem + size;
   \   00000024   D018               ADDS     R0,R2,R3
   \   00000026   0700               MOVS     R7,R0
    495              p2_mem_08          = (const CPU_INT08U *)p2_mem + size;
   \   00000028   5018               ADDS     R0,R2,R1
   \   0000002A   8646               MOV      LR,R0
    496                                                                          /* See Note #4.                                         */
    497              mem_align_modulo_1 = (CPU_INT08U)((CPU_ADDR)p1_mem_08 % sizeof(CPU_ALIGN));
   \   0000002C   0420               MOVS     R0,#+4
   \   0000002E   B7FBF0FC           UDIV     R12,R7,R0
   \   00000032   0CFB107C           MLS      R12,R12,R0,R7
   \   00000036   E146               MOV      R9,R12
    498              mem_align_modulo_2 = (CPU_INT08U)((CPU_ADDR)p2_mem_08 % sizeof(CPU_ALIGN));
   \   00000038   5FF0040C           MOVS     R12,#+4
   \   0000003C   BEFBFCF0           UDIV     R0,LR,R12
   \   00000040   00FB1CE0           MLS      R0,R0,R12,LR
   \   00000044   8DF80000           STRB     R0,[SP, #+0]
    499          
    500              mem_aligned        = (mem_align_modulo_1 == mem_align_modulo_2) ? DEF_YES : DEF_NO;
   \   00000048   9DF80000           LDRB     R0,[SP, #+0]
   \   0000004C   5FFA89F9           UXTB     R9,R9            ;; ZeroExt  R9,R9,#+24,#+24
   \   00000050   8145               CMP      R9,R0
   \   00000052   02D1               BNE.N    ??Mem_Cmp_4
   \   00000054   5FF0010A           MOVS     R10,#+1
   \   00000058   01E0               B.N      ??Mem_Cmp_5
   \                     ??Mem_Cmp_4:
   \   0000005A   5FF0000A           MOVS     R10,#+0
    501          
    502              if (mem_aligned == DEF_YES) {                               /* If mem bufs' alignment offset equal, ...             */
   \                     ??Mem_Cmp_5:
   \   0000005E   5FFA8AFA           UXTB     R10,R10          ;; ZeroExt  R10,R10,#+24,#+24
   \   00000062   BAF1010F           CMP      R10,#+1
   \   00000066   3AD1               BNE.N    ??Mem_Cmp_6
    503                                                                          /* ... optimize cmp for mem buf alignment.              */
    504                  if (mem_align_modulo_1 != 0u) {                         /* If trailing octets avail,                  ...       */
   \   00000068   5FFA89F9           UXTB     R9,R9            ;; ZeroExt  R9,R9,#+24,#+24
   \   0000006C   B9F1000F           CMP      R9,#+0
   \   00000070   1AD0               BEQ.N    ??Mem_Cmp_7
    505                      i = mem_align_modulo_1;
   \   00000072   C846               MOV      R8,R9
    506                      while ((mem_cmp == DEF_YES) &&                      /* ... cmp mem bufs while identical &         ...       */
    507                             (size_rem > 0)       &&                      /* ... start mem buf cmp with trailing octets ...       */
    508                             (i        > 0)) {                            /* ... until next CPU_ALIGN word boundary.              */
   \                     ??Mem_Cmp_8:
   \   00000074   5FFA8BFB           UXTB     R11,R11          ;; ZeroExt  R11,R11,#+24,#+24
   \   00000078   BBF1010F           CMP      R11,#+1
   \   0000007C   14D1               BNE.N    ??Mem_Cmp_7
   \   0000007E   002C               CMP      R4,#+0
   \   00000080   12D0               BEQ.N    ??Mem_Cmp_7
   \   00000082   5FFA88F8           UXTB     R8,R8            ;; ZeroExt  R8,R8,#+24,#+24
   \   00000086   B8F1010F           CMP      R8,#+1
   \   0000008A   0DD3               BCC.N    ??Mem_Cmp_7
    509                          p1_mem_08--;
   \   0000008C   7F1E               SUBS     R7,R7,#+1
    510                          p2_mem_08--;
   \   0000008E   BEF1010E           SUBS     LR,LR,#+1
    511                          if (*p1_mem_08 != *p2_mem_08) {                 /* If ANY data octet(s) NOT identical, cmp fails.       */
   \   00000092   3878               LDRB     R0,[R7, #+0]
   \   00000094   9EF800C0           LDRB     R12,[LR, #+0]
   \   00000098   6045               CMP      R0,R12
   \   0000009A   01D0               BEQ.N    ??Mem_Cmp_9
    512                               mem_cmp = DEF_NO;
   \   0000009C   0020               MOVS     R0,#+0
   \   0000009E   8346               MOV      R11,R0
    513                          }
    514                          size_rem -= sizeof(CPU_INT08U);
   \                     ??Mem_Cmp_9:
   \   000000A0   641E               SUBS     R4,R4,#+1
    515                          i--;
   \   000000A2   B8F10108           SUBS     R8,R8,#+1
   \   000000A6   E5E7               B.N      ??Mem_Cmp_8
    516                      }
    517                  }
    518          
    519                  if (mem_cmp == DEF_YES) {                               /* If cmp still identical, cmp aligned mem bufs.        */
   \                     ??Mem_Cmp_7:
   \   000000A8   5FFA8BFB           UXTB     R11,R11          ;; ZeroExt  R11,R11,#+24,#+24
   \   000000AC   BBF1010F           CMP      R11,#+1
   \   000000B0   15D1               BNE.N    ??Mem_Cmp_6
    520                      p1_mem_align = (CPU_ALIGN *)p1_mem_08;              /* See Note #3a.                                        */
   \   000000B2   3D00               MOVS     R5,R7
    521                      p2_mem_align = (CPU_ALIGN *)p2_mem_08;
   \   000000B4   7646               MOV      R6,LR
    522          
    523                      while ((mem_cmp  == DEF_YES) &&                     /* Cmp mem bufs while identical & ...                   */
    524                             (size_rem >= sizeof(CPU_ALIGN))) {           /* ... mem bufs aligned on CPU_ALIGN word boundaries.   */
   \                     ??Mem_Cmp_10:
   \   000000B6   5FFA8BFB           UXTB     R11,R11          ;; ZeroExt  R11,R11,#+24,#+24
   \   000000BA   BBF1010F           CMP      R11,#+1
   \   000000BE   0CD1               BNE.N    ??Mem_Cmp_11
   \   000000C0   042C               CMP      R4,#+4
   \   000000C2   0AD3               BCC.N    ??Mem_Cmp_11
    525                          p1_mem_align--;
   \   000000C4   2D1F               SUBS     R5,R5,#+4
    526                          p2_mem_align--;
   \   000000C6   361F               SUBS     R6,R6,#+4
    527                          if (*p1_mem_align != *p2_mem_align) {           /* If ANY data octet(s) NOT identical, cmp fails.       */
   \   000000C8   2868               LDR      R0,[R5, #+0]
   \   000000CA   D6F800C0           LDR      R12,[R6, #+0]
   \   000000CE   6045               CMP      R0,R12
   \   000000D0   01D0               BEQ.N    ??Mem_Cmp_12
    528                               mem_cmp = DEF_NO;
   \   000000D2   0020               MOVS     R0,#+0
   \   000000D4   8346               MOV      R11,R0
    529                          }
    530                          size_rem -= sizeof(CPU_ALIGN);
   \                     ??Mem_Cmp_12:
   \   000000D6   241F               SUBS     R4,R4,#+4
   \   000000D8   EDE7               B.N      ??Mem_Cmp_10
    531                      }
    532          
    533                      p1_mem_08 = (CPU_INT08U *)p1_mem_align;
   \                     ??Mem_Cmp_11:
   \   000000DA   2F00               MOVS     R7,R5
    534                      p2_mem_08 = (CPU_INT08U *)p2_mem_align;
   \   000000DC   B646               MOV      LR,R6
    535                  }
    536              }
    537          
    538              while ((mem_cmp == DEF_YES) &&                              /* Cmp mem bufs while identical ...                     */
    539                     (size_rem > 0)) {                                    /* ... for unaligned mem bufs or trailing octets.       */
   \                     ??Mem_Cmp_6:
   \   000000DE   5FFA8BFB           UXTB     R11,R11          ;; ZeroExt  R11,R11,#+24,#+24
   \   000000E2   BBF1010F           CMP      R11,#+1
   \   000000E6   0DD1               BNE.N    ??Mem_Cmp_13
   \   000000E8   002C               CMP      R4,#+0
   \   000000EA   0BD0               BEQ.N    ??Mem_Cmp_13
    540                  p1_mem_08--;
   \   000000EC   7F1E               SUBS     R7,R7,#+1
    541                  p2_mem_08--;
   \   000000EE   BEF1010E           SUBS     LR,LR,#+1
    542                  if (*p1_mem_08 != *p2_mem_08) {                         /* If ANY data octet(s) NOT identical, cmp fails.       */
   \   000000F2   3878               LDRB     R0,[R7, #+0]
   \   000000F4   9EF800C0           LDRB     R12,[LR, #+0]
   \   000000F8   6045               CMP      R0,R12
   \   000000FA   01D0               BEQ.N    ??Mem_Cmp_14
    543                       mem_cmp = DEF_NO;
   \   000000FC   0020               MOVS     R0,#+0
   \   000000FE   8346               MOV      R11,R0
    544                  }
    545                  size_rem -= sizeof(CPU_INT08U);
   \                     ??Mem_Cmp_14:
   \   00000100   641E               SUBS     R4,R4,#+1
   \   00000102   ECE7               B.N      ??Mem_Cmp_6
    546              }
    547          
    548              return (mem_cmp);
   \                     ??Mem_Cmp_13:
   \   00000104   5846               MOV      R0,R11
   \   00000106   C0B2               UXTB     R0,R0            ;; ZeroExt  R0,R0,#+24,#+24
   \                     ??Mem_Cmp_1:
   \   00000108   BDE8F28F           POP      {R1,R4-R11,PC}   ;; return
    549          }
    550          
    551          
    552          /*$PAGE*/
    553          /*
    554          *********************************************************************************************************
    555          *                                           Mem_HeapAlloc()
    556          *
    557          * Description : Allocate a memory block from the heap memory pool.
    558          *
    559          * Argument(s) : size            Size      of memory block to allocate (in octets).
    560          *
    561          *               align           Alignment of memory block to specific word boundary (in octets).
    562          *
    563          *               poctets_reqd    Optional pointer to a variable to ... :
    564          *
    565          *                                   (a) Return the number of octets required to successfully
    566          *                                           allocate the memory block, if any error(s);
    567          *                                   (b) Return 0, otherwise.
    568          *
    569          *               perr        Pointer to variable that will receive the return error code from this function :
    570          *
    571          *                               LIB_MEM_ERR_NONE                Memory block successfully returned.
    572          *                               LIB_MEM_ERR_INVALID_MEM_SIZE    Invalid memory size.
    573          *                               LIB_MEM_ERR_INVALID_MEM_ALIGN   Invalid memory alignment.
    574          *                               LIB_MEM_ERR_HEAP_EMPTY          Heap segment empty; NOT enough available 
    575          *                                                                   memory from heap.
    576          *                               LIB_MEM_ERR_HEAP_OVF            Requested memory overflows heap memory.
    577          *
    578          * Return(s)   : Pointer to memory block, if NO error(s).
    579          *
    580          *               Pointer to NULL,         otherwise.
    581          *
    582          * Caller(s)   : Application.
    583          *
    584          * Note(s)     : (1) Pointers to variables that return values MUST be initialized PRIOR to all other 
    585          *                   validation or function handling in case of any error(s).
    586          *
    587          *               (2) 'pmem_pool' variables MUST ALWAYS be accessed exclusively in critical sections.
    588          *********************************************************************************************************
    589          */
    590          /*$PAGE*/
    591          #if (LIB_MEM_CFG_ALLOC_EN == DEF_ENABLED)
    592          void  *Mem_HeapAlloc (CPU_SIZE_T   size,
    593                                CPU_SIZE_T   align,
    594                                CPU_SIZE_T  *poctets_reqd,
    595                                LIB_ERR     *perr)
    596          {
    597              MEM_POOL    *pmem_pool_heap;
    598              void        *pmem_addr;
    599              void        *pmem_blk;
    600              CPU_SIZE_T   octets_reqd_unused;
    601              CPU_SIZE_T   size_rem;
    602              CPU_SIZE_T   size_req;
    603              CPU_SR_ALLOC();
    604          
    605          
    606          #if (LIB_MEM_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)                     /* ------------- VALIDATE RTN ERR PTR ------------- */
    607              if (perr == (LIB_ERR *)0) {

⌨️ 快捷键说明

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