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

📄 lib_mem.lst

📁 编译环境是 iar EWARM ,STM32 下的UCOSII
💻 LST
📖 第 1 页 / 共 5 页
字号:
    612          *         |          (see Note #2b1)     |     |        |     |        |     |        |  H  |        |     |
    613          *         |                              |     |<-------|     |<-------|     |<-------|  E  |<-------|     |
    614          *         |                              |     |        |     |   ^    |     |        |  A  |        |     |
    615          *         |                              |     |        |     |   |    |     |        |  P  |        |     |
    616          *         |                              |     |        |     |   |    |     |        |     |        |     |
    617          *         |                              -------        -------   |    -------        -------        -------
    618          *         |                                | ^                    |      | ^
    619          *         |                                | |            SegPrevPtr     | |
    620          *         |                                v |         (see Note #2b2)   v |
    621          *         |                              -------                       -------
    622          *                                        |     |                       |     |
    623          *    Memory Pools                        |     |                       |     |
    624          *  (see Note #2a2)                       |     |                       |     |
    625          *                                        |     |                       |     |
    626          *         |                              |     |                       |     |
    627          *         |                              -------                       -------
    628          *         |                                | ^
    629          *         |               PoolNextPtr ---> | | <--- PoolPrevPtr
    630          *         |             (see Note #2b3)    v |    (see Note #2b3)
    631          *         |                              -------
    632          *         |                              |     |
    633          *         |                              |     |
    634          *         |                              |     |
    635          *         |                              |     |
    636          *         v                              |     |
    637          *        ---                             -------
    638          *
    639          *$PAGE*
    640          * Argument(s) : pmem_pool           Pointer to a memory pool structure to create (see Note #3).
    641          *
    642          *               pmem_base_addr      Memory pool base address :
    643          *
    644          *                                       (a)     Null address    Memory pool allocated from general-purpose heap.
    645          *                                       (b) Non-null address    Memory pool allocated from dedicated memory
    646          *                                                                   specified by its base address.
    647          *
    648          *               mem_size            Size      of memory pool segment              (in octets).
    649          *
    650          *               blk_nbr             Number    of memory pool blocks to initialize.
    651          *
    652          *               blk_size            Size      of memory pool blocks to initialize (in octets).
    653          *
    654          *               blk_align           Alignment of memory pool blocks to initialize (in octets).
    655          *
    656          *               poctets_reqd        Pointer to a variable to ... :
    657          *
    658          *                                       (a) Return the number of octets required to successfully
    659          *                                               allocate the memory pool, if any errors;
    660          *                                       (b) Return 0, otherwise.
    661          *
    662          *               perr        Pointer to variable that will receive the return error code from this function :
    663          *
    664          *                               LIB_MEM_ERR_NONE                    Memory pool successfully created.
    665          *                               LIB_MEM_ERR_NULL_PTR                Argument 'pmem_pool' passed a NULL
    666          *                                                                       pointer.
    667          *
    668          *                               LIB_MEM_ERR_HEAP_NOT_FOUND          Heap   segment NOT found.
    669          *                               LIB_MEM_ERR_HEAP_EMPTY              Heap   segment empty; NO available memory
    670          *                                                                       from heap.
    671          *                               LIB_MEM_ERR_SEG_EMPTY               Memory segment empty; NO available memory
    672          *                                                                       from segment for memory pools.
    673          *
    674          *                               LIB_MEM_ERR_INVALID_SEG_SIZE        Invalid memory segment size.
    675          *                               LIB_MEM_ERR_INVALID_SEG_OVERLAP     Memory segment overlaps other memory
    676          *                                                                       segment(s) in memory pool table.
    677          *                               LIB_MEM_ERR_INVALID_BLK_NBR         Invalid memory pool number of blocks.
    678          *                               LIB_MEM_ERR_INVALID_BLK_SIZE        Invalid memory pool block size.
    679          *
    680          * Return(s)   : none.
    681          *
    682          * Caller(s)   : Application.
    683          *
    684          * Note(s)     : (3) 'pmem_pool' MUST be passed a pointer to the address of a declared 'MEM_POOL' variable.
    685          *
    686          *               (4) Pointers to variables that return values MUST be initialized to return PRIOR to all
    687          *                   other validation or function handling in case of any error(s).
    688          *********************************************************************************************************
    689          */
    690          
    691          #if (LIB_MEM_CFG_POOL_EN == DEF_ENABLED)
    692          void  Mem_PoolCreate (MEM_POOL    *pmem_pool,
    693                                void        *pmem_base_addr,
    694                                CPU_SIZE_T   mem_size,
    695                                CPU_SIZE_T   blk_nbr,
    696                                CPU_SIZE_T   blk_size,
    697                                CPU_SIZE_T   blk_align,
    698                                CPU_SIZE_T  *poctets_reqd,
    699                                LIB_ERR     *perr)
    700          {
    701          #if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
    702              CPU_SR        cpu_sr;
    703          #endif
    704              MEM_POOL     *pmem_pool_heap;
    705              MEM_POOL     *pmem_pool_prev;
    706              MEM_POOL     *pmem_pool_next;
    707              MEM_POOL     *pmem_pool_blk;
    708              void        **ppool_ptr;
    709              void         *pmem_blk;
    710              CPU_INT08U   *pmem_addr_ptrs;
    711              CPU_INT08U   *pmem_addr_pool;
    712              CPU_INT08U   *pmem_base_addr_start;
    713              CPU_INT08U   *pmem_base_addr_end;
    714              CPU_INT08U   *pmem_seg_addr_start;
    715              CPU_INT08U   *pmem_seg_addr_end;
    716              CPU_SIZE_T    size_tot;
    717              CPU_SIZE_T    size_tot_ptrs;
    718              CPU_SIZE_T    size_tot_pool;
    719              CPU_SIZE_T    size_rem;
    720              CPU_SIZE_T    size_pool_ptrs;
    721              CPU_SIZE_T    i;
    722          
    723          
    724          /*$PAGE*/
    725                                                                              /* Init octets req'd for err (see Note #4).         */
    726              if (poctets_reqd != (CPU_SIZE_T *)0) {
    727                 *poctets_reqd  = (CPU_SIZE_T  )0;
    728              }
    729          
    730          
    731                                                                              /* -------------- VALIDATE MEM POOL --------------- */
    732              if (pmem_pool != (MEM_POOL *)0) {
    733                                                                              /* Init mem pool     for err (see Note #4).         */
    734                  pmem_pool->Type             = (LIB_MEM_TYPE)LIB_MEM_TYPE_NONE;
    735                  pmem_pool->SegPrevPtr       = (MEM_POOL   *)0;
    736                  pmem_pool->SegNextPtr       = (MEM_POOL   *)0;
    737                  pmem_pool->PoolPrevPtr      = (MEM_POOL   *)0;
    738                  pmem_pool->PoolNextPtr      = (MEM_POOL   *)0;
    739                  pmem_pool->PoolAddrStart    = (void       *)0;
    740                  pmem_pool->PoolAddrEnd      = (void       *)0;
    741                  pmem_pool->PoolPtrs         = (void      **)0;
    742                  pmem_pool->PoolSize         = (CPU_SIZE_T  )0;
    743                  pmem_pool->BlkAlign         = (CPU_SIZE_T  )0;
    744                  pmem_pool->BlkSize          = (CPU_SIZE_T  )0;
    745                  pmem_pool->BlkNbr           = (CPU_SIZE_T  )0;
    746                  pmem_pool->BlkIx            = (MEM_POOL_IX )0;
    747                  pmem_pool->SegAddr          = (void       *)0;
    748                  pmem_pool->SegAddrNextAvail = (void       *)0;
    749                  pmem_pool->SegSizeTot       = (CPU_SIZE_T  )0;
    750                  pmem_pool->SegSizeRem       = (CPU_SIZE_T  )0;
    751          
    752              } else {
    753                 *perr = LIB_MEM_ERR_NULL_PTR;
    754                  return;
    755              }
    756          
    757          
    758              if (pmem_base_addr != (void *)0) {
    759                  if (mem_size < 1) {
    760                     *perr = LIB_MEM_ERR_INVALID_SEG_SIZE;
    761                      return;
    762                  }
    763              }
    764          
    765              if (blk_nbr < 1) {
    766                 *perr = LIB_MEM_ERR_INVALID_BLK_NBR;
    767                  return;
    768              }
    769          
    770              if (blk_size < 1) {
    771                 *perr = LIB_MEM_ERR_INVALID_BLK_SIZE;
    772                  return;
    773              }
    774          
    775              if (blk_align < 1) {
    776                  blk_align = 1;
    777              }
    778          
    779                                                                              /* ------------ VALIDATE MEM POOL TBL ------------- */
    780              if (Mem_PoolTbl == (MEM_POOL *)0) {
    781                 *perr = LIB_MEM_ERR_HEAP_NOT_FOUND;
    782                  return;
    783              }
    784          
    785          
    786          
    787          /*$PAGE*/
    788                                                                              /* ---------------- CREATE MEM POOL --------------- */
    789              pmem_pool_heap = (MEM_POOL *)&Mem_PoolHeap;
    790          
    791              CPU_CRITICAL_ENTER();
    792          
    793              if (pmem_base_addr == (void *)0) {                              /* If no base addr, cfg mem pool from heap.         */
    794                  pmem_pool_blk   =  pmem_pool_heap;
    795                  pmem_pool_prev  =  pmem_pool_heap;
    796                  pmem_pool_next  =  pmem_pool_heap;
    797          
    798                                                                              /* Calc tot mem   size for mem pool ptrs.           */
    799                  pmem_addr_ptrs  = (CPU_INT08U *)pmem_pool_heap->SegAddrNextAvail;
    800                  size_tot_ptrs   =  Mem_PoolSegCalcTotSize((void     *)pmem_addr_ptrs,
    801                                                            (CPU_SIZE_T)blk_nbr,
    802                                                            (CPU_SIZE_T)sizeof(void *),
    803                                                            (CPU_SIZE_T)sizeof(void *));
    804                                                                              /* Calc tot mem   size for mem blks.                */
    805                  pmem_addr_pool  =  pmem_addr_ptrs + size_tot_ptrs;          /* Adj next avail addr for mem pool blks.           */
    806                  size_tot_pool   =  Mem_PoolSegCalcTotSize((void     *)pmem_addr_pool,
    807                                                            (CPU_SIZE_T)blk_nbr,
    808                                                            (CPU_SIZE_T)blk_size,
    809                                                            (CPU_SIZE_T)blk_align);
    810          
    811                  size_tot = size_tot_ptrs + size_tot_pool;
    812                  size_rem = pmem_pool_heap->SegSizeRem;
    813          
    814                  if (size_tot > size_rem) {
    815                      CPU_CRITICAL_EXIT();
    816                     *perr = LIB_MEM_ERR_HE

⌨️ 快捷键说明

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