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

📄 lib_mem.lst

📁 编译环境是 iar EWARM ,STM32 下的UCOSII
💻 LST
📖 第 1 页 / 共 5 页
字号:
    152          *
    153          * Note(s)     : none.
    154          *********************************************************************************************************
    155          */
    156          

   \                                 In segment CODE, align 4, keep-with-next
    157          void  Mem_Init (void)
    158          {
    159          #if (LIB_MEM_CFG_POOL_EN == DEF_ENABLED)
    160              MEM_POOL  *pmem_pool;
    161          
    162                                                                                  /* --------- INIT MEM HEAP SEG / POOL --------- */
    163              pmem_pool                   = (MEM_POOL   *)&Mem_PoolHeap;
    164              pmem_pool->Type             = (LIB_MEM_TYPE) LIB_MEM_TYPE_HEAP;
    165              pmem_pool->SegPrevPtr       = (MEM_POOL   *) 0;
    166              pmem_pool->SegNextPtr       = (MEM_POOL   *) 0;
    167              pmem_pool->PoolPrevPtr      = (MEM_POOL   *) 0;
    168              pmem_pool->PoolNextPtr      = (MEM_POOL   *) 0;
    169              pmem_pool->PoolAddrStart    = (void       *) 0;
    170              pmem_pool->PoolAddrEnd      = (void       *) 0;
    171              pmem_pool->PoolPtrs         = (void      **) 0;
    172              pmem_pool->BlkSize          = (CPU_SIZE_T  ) 0;
    173              pmem_pool->BlkNbr           = (CPU_SIZE_T  ) 0;
    174              pmem_pool->BlkIx            = (MEM_POOL_IX ) 0;
    175              pmem_pool->SegAddr          = (void       *)&Mem_Heap[0];
    176              pmem_pool->SegAddrNextAvail = (void       *)&Mem_Heap[0];
    177              pmem_pool->SegSizeTot       = (CPU_SIZE_T  ) LIB_MEM_CFG_HEAP_SIZE;
    178              pmem_pool->SegSizeRem       = (CPU_SIZE_T  ) LIB_MEM_CFG_HEAP_SIZE;
    179          
    180                                                                                  /* ------------ INIT MEM POOL TBL ------------- */
    181              Mem_PoolTbl = &Mem_PoolHeap;
    182          #endif
    183          }
   \                     Mem_Init:
   \   00000000   7047               BX       LR               ;; return
    184          
    185          
    186          /*$PAGE*/
    187          /*
    188          *********************************************************************************************************
    189          *                                              Mem_Clr()
    190          *
    191          * Description : Clear data buffer (see Note #2).
    192          *
    193          * Argument(s) : pmem        Pointer to memory buffer to clear.
    194          *
    195          *               size        Number of data buffer octets to clear.
    196          *
    197          * Return(s)   : none.
    198          *
    199          * Caller(s)   : Application.
    200          *
    201          * Note(s)     : (1) Null clears allowed (i.e. 0-octet size).
    202          *
    203          *                   See also 'Mem_Set()  Note #1'.
    204          *
    205          *               (2) Clear data by setting each data octet to 0.
    206          *********************************************************************************************************
    207          */
    208          

   \                                 In segment CODE, align 4, keep-with-next
    209          void  Mem_Clr (void        *pmem,
    210                         CPU_SIZE_T   size)
    211          {
   \                     Mem_Clr:
   \   00000000   00B5               PUSH     {LR}
    212              Mem_Set((void     *)pmem,
    213                      (CPU_INT08U)0,                                      /* See Note #2.                                         */
    214                      (CPU_SIZE_T)size);
   \   00000002   0A00               MOVS     R2,R1
   \   00000004   0021               MOVS     R1,#+0
   \   00000006   ........           BL       Mem_Set
    215          }
   \   0000000A   00BD               POP      {PC}             ;; return
    216          
    217          
    218          /*$PAGE*/
    219          /*
    220          *********************************************************************************************************
    221          *                                              Mem_Set()
    222          *
    223          * Description : Fill data buffer with specified data octet.
    224          *
    225          * Argument(s) : pmem        Pointer to memory buffer to fill with specified data octet.
    226          *
    227          *               data_val    Data fill octet value.
    228          *
    229          *               size        Number of data buffer octets to fill.
    230          *
    231          * Return(s)   : none.
    232          *
    233          * Caller(s)   : Application.
    234          *
    235          * Note(s)     : (1) Null sets allowed (i.e. 0-octet size).
    236          *
    237          *               (2) For best CPU performance, optimized to fill data buffer using 'CPU_ALIGN'-sized data
    238          *                   words.
    239          *
    240          *                   (a) Since many word-aligned processors REQUIRE that multi-octet words be accessed on
    241          *                       word-aligned addresses, 'CPU_ALIGN'-sized words MUST be accessed on 'CPU_ALIGN'd
    242          *                       addresses.
    243          *
    244          *               (3) Modulo arithmetic is used to determine whether a memory buffer starts on a 'CPU_ALIGN'
    245          *                   address boundary.
    246          *
    247          *                   Modulo arithmetic in ANSI-C REQUIREs operations performed on integer values.  Thus,
    248          *                   address values MUST be cast to an appropriately-sized integer value PRIOR to any
    249          *                   mem_align_modulo arithmetic operation.
    250          *********************************************************************************************************
    251          */
    252          

   \                                 In segment CODE, align 4, keep-with-next
    253          void  Mem_Set (void        *pmem,
    254                         CPU_INT08U   data_val,
    255                         CPU_SIZE_T   size)
    256          {
   \                     Mem_Set:
   \   00000000   30B5               PUSH     {R4,R5,LR}
    257              CPU_SIZE_T   size_rem;
    258              CPU_ALIGN    data_align;
    259              CPU_ALIGN   *pmem_align;
    260              CPU_INT08U  *pmem_08;
    261              CPU_INT08U   mem_align_modulo;
    262              CPU_INT08U   i;
    263          
    264          
    265              if (size < 1) {                                             /* See Note #1.                                         */
   \   00000002   002A               CMP      R2,#+0
   \   00000004   23D0               BEQ.N    ??Mem_Set_0
    266                  return;
    267              }
    268              if (pmem == (void *)0) {
   \   00000006   0028               CMP      R0,#+0
   \   00000008   21D0               BEQ.N    ??Mem_Set_0
    269                  return;
    270              }
    271          
    272          
    273              data_align = 0;
   \   0000000A   0023               MOVS     R3,#+0
    274              for (i = 0; i < sizeof(CPU_ALIGN); i++) {                   /* Fill each data_align octet with data val.            */
   \   0000000C   1C00               MOVS     R4,R3
   \   0000000E   02E0               B.N      ??Mem_Set_1
    275                  data_align <<=  DEF_OCTET_NBR_BITS;
    276                  data_align  |= (CPU_ALIGN)data_val;
   \                     ??Mem_Set_2:
   \   00000010   51EA0323           ORRS     R3,R1,R3, LSL #+8
    277              }
   \   00000014   641C               ADDS     R4,R4,#+1
   \                     ??Mem_Set_1:
   \   00000016   042C               CMP      R4,#+4
   \   00000018   FAD3               BCC.N    ??Mem_Set_2
    278          
    279              size_rem         = (CPU_SIZE_T)size;
    280              mem_align_modulo = (CPU_INT08U)((CPU_ADDR)pmem % sizeof(CPU_ALIGN));    /* See Note #3.                             */
   \   0000001A   0400               MOVS     R4,R0
   \   0000001C   A407               LSLS     R4,R4,#+30
   \   0000001E   A40F               LSRS     R4,R4,#+30
    281          
    282              pmem_08 = (CPU_INT08U *)pmem;
    283              if (mem_align_modulo != 0) {                                /* If leading octets avail,                   ...       */
   \   00000020   0DD0               BEQ.N    ??Mem_Set_3
    284                  i = mem_align_modulo;
   \   00000022   04E0               B.N      ??Mem_Set_4
    285                  while ((size_rem > 0) &&                                /* ... start mem buf fill with leading octets ...       */
    286                         (i        < sizeof(CPU_ALIGN ))) {               /* ... until next CPU_ALIGN word boundary.              */
    287                     *pmem_08++ = data_val;
   \                     ??Mem_Set_5:
   \   00000024   0170               STRB     R1,[R0, #+0]
   \   00000026   401C               ADDS     R0,R0,#+1
    288                      size_rem -= sizeof(CPU_INT08U);
   \   00000028   521E               SUBS     R2,R2,#+1
    289                      i++;
   \   0000002A   641C               ADDS     R4,R4,#+1
   \   0000002C   E4B2               UXTB     R4,R4
    290                  }
   \                     ??Mem_Set_4:
   \   0000002E   002A               CMP      R2,#+0
   \   00000030   05D0               BEQ.N    ??Mem_Set_3
   \   00000032   042C               CMP      R4,#+4
   \   00000034   F6D3               BCC.N    ??Mem_Set_5
    291              }
    292          
    293              pmem_align = (CPU_ALIGN *)pmem_08;                          /* See Note #2a.                                        */
   \   00000036   02E0               B.N      ??Mem_Set_3
    294              while (size_rem >= sizeof(CPU_ALIGN)) {                     /* While mem buf aligned on CPU_ALIGN word boundaries,  */
    295                 *pmem_align++ = data_align;                              /* ... fill mem buf with    CPU_ALIGN-sized data.       */
   \                     ??Mem_Set_6:
   \   00000038   0360               STR      R3,[R0, #+0]
   \   0000003A   001D               ADDS     R0,R0,#+4
    296                  size_rem    -= sizeof(CPU_ALIGN);
   \   0000003C   121F               SUBS     R2,R2,#+4
    297              }
   \                     ??Mem_Set_3:
   \   0000003E   042A               CMP      R2,#+4
   \   00000040   FAD2               BCS.N    ??Mem_Set_6
    298          
    299              pmem_08 = (CPU_INT08U *)pmem_align;
   \   00000042   002A               CMP      R2,#+0
   \   00000044   02E0               B.N      ??Mem_Set_7
    300              while (size_rem > 0) {                                      /* Finish mem buf fill with trailing octets.            */
    301                 *pmem_08++   = data_val;
   \                     ??Mem_Set_8:
   \   00000046   0170               STRB     R1,[R0, #+0]
   \   00000048   401C               ADDS     R0,R0,#+1
    302                  size_rem   -= sizeof(CPU_INT08U);

⌨️ 快捷键说明

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