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

📄 os_mem.lst

📁 ARM仿真案例
💻 LST
📖 第 1 页 / 共 3 页
字号:
   \   0000000A   7420               MOVS     R0,#+116
   \   0000000C   16E0               B        ??OSMemPut_1
    281              }
    282              if (pblk == (void *)0) {                     /* Must release a valid block                         */
   \                     ??OSMemPut_0:
   \   0000000E   002D               CMP      R5,#+0
   \   00000010   01D1               BNE      ??OSMemPut_2
    283                  return (OS_MEM_INVALID_PBLK);
   \   00000012   7320               MOVS     R0,#+115
   \   00000014   12E0               B        ??OSMemPut_1
    284              }
    285          #endif
    286              OS_ENTER_CRITICAL();
   \                     ??OSMemPut_2:
   \   00000016   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
    287              if (pmem->OSMemNFree >= pmem->OSMemNBlks) {  /* Make sure all blocks not already returned          */
   \   0000001A   2169               LDR      R1,[R4, #+16]
   \   0000001C   E268               LDR      R2,[R4, #+12]
   \   0000001E   9142               CMP      R1,R2
   \   00000020   03D3               BCC      ??OSMemPut_3
    288                  OS_EXIT_CRITICAL();
   \   00000022   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    289                  return (OS_MEM_FULL);
   \   00000026   7220               MOVS     R0,#+114
   \   00000028   08E0               B        ??OSMemPut_1
    290              }
    291              *(void **)pblk      = pmem->OSMemFreeList;   /* Insert released block into free block list         */
   \                     ??OSMemPut_3:
   \   0000002A   6168               LDR      R1,[R4, #+4]
   \   0000002C   2960               STR      R1,[R5, #+0]
    292              pmem->OSMemFreeList = pblk;
   \   0000002E   6560               STR      R5,[R4, #+4]
    293              pmem->OSMemNFree++;                          /* One more memory block in this partition            */
   \   00000030   2169               LDR      R1,[R4, #+16]
   \   00000032   491C               ADDS     R1,R1,#+1
   \   00000034   2161               STR      R1,[R4, #+16]
    294              OS_EXIT_CRITICAL();
   \   00000036   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    295              return (OS_NO_ERR);                          /* Notify caller that memory block was released       */
   \   0000003A   0020               MOVS     R0,#+0
   \                     ??OSMemPut_1:
   \   0000003C   30BC               POP      {R4,R5}
   \   0000003E   02BC               POP      {R1}
   \   00000040   0847               BX       R1               ;; return
    296          }
    297          
    298          /*
    299          *********************************************************************************************************
    300          *                                          QUERY MEMORY PARTITION
    301          *
    302          * Description : This function is used to determine the number of free memory blocks and the number of
    303          *               used memory blocks from a memory partition.
    304          *
    305          * Arguments   : pmem        is a pointer to the memory partition control block
    306          *
    307          *               p_mem_data  is a pointer to a structure that will contain information about the memory
    308          *                           partition.
    309          *
    310          * Returns     : OS_NO_ERR            If no errors were found.
    311          *               OS_MEM_INVALID_PMEM  if you passed a NULL pointer for 'pmem'
    312          *               OS_MEM_INVALID_PDATA if you passed a NULL pointer to the data recipient.
    313          *********************************************************************************************************
    314          */
    315          
    316          #if OS_MEM_QUERY_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    317          INT8U  OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *p_mem_data)
    318          {
   \                     OSMemQuery:
   \   00000000   30B5               PUSH     {R4,R5,LR}
   \   00000002   0400               MOVS     R4,R0
   \   00000004   0D00               MOVS     R5,R1
    319          #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
    320              OS_CPU_SR  cpu_sr;
    321          #endif    
    322              
    323              
    324          #if OS_ARG_CHK_EN > 0
    325              if (pmem == (OS_MEM *)0) {                   /* Must point to a valid memory partition             */
   \   00000006   002C               CMP      R4,#+0
   \   00000008   01D1               BNE      ??OSMemQuery_0
    326                  return (OS_MEM_INVALID_PMEM);
   \   0000000A   7420               MOVS     R0,#+116
   \   0000000C   16E0               B        ??OSMemQuery_1
    327              }
    328              if (p_mem_data == (OS_MEM_DATA *)0) {        /* Must release a valid storage area for the data     */
   \                     ??OSMemQuery_0:
   \   0000000E   002D               CMP      R5,#+0
   \   00000010   01D1               BNE      ??OSMemQuery_2
    329                  return (OS_MEM_INVALID_PDATA);
   \   00000012   7520               MOVS     R0,#+117
   \   00000014   12E0               B        ??OSMemQuery_1
    330              }
    331          #endif
    332              OS_ENTER_CRITICAL();
   \                     ??OSMemQuery_2:
   \   00000016   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
    333              p_mem_data->OSAddr     = pmem->OSMemAddr;
   \   0000001A   2168               LDR      R1,[R4, #+0]
   \   0000001C   2960               STR      R1,[R5, #+0]
    334              p_mem_data->OSFreeList = pmem->OSMemFreeList;
   \   0000001E   6168               LDR      R1,[R4, #+4]
   \   00000020   6960               STR      R1,[R5, #+4]
    335              p_mem_data->OSBlkSize  = pmem->OSMemBlkSize;
   \   00000022   A168               LDR      R1,[R4, #+8]
   \   00000024   A960               STR      R1,[R5, #+8]
    336              p_mem_data->OSNBlks    = pmem->OSMemNBlks;
   \   00000026   E168               LDR      R1,[R4, #+12]
   \   00000028   E960               STR      R1,[R5, #+12]
    337              p_mem_data->OSNFree    = pmem->OSMemNFree;
   \   0000002A   2169               LDR      R1,[R4, #+16]
   \   0000002C   2961               STR      R1,[R5, #+16]
    338              OS_EXIT_CRITICAL();
   \   0000002E   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    339              p_mem_data->OSNUsed    = p_mem_data->OSNBlks - p_mem_data->OSNFree;
   \   00000032   E868               LDR      R0,[R5, #+12]
   \   00000034   2969               LDR      R1,[R5, #+16]
   \   00000036   401A               SUBS     R0,R0,R1
   \   00000038   6861               STR      R0,[R5, #+20]
    340              return (OS_NO_ERR);
   \   0000003A   0020               MOVS     R0,#+0
   \                     ??OSMemQuery_1:
   \   0000003C   30BC               POP      {R4,R5}
   \   0000003E   02BC               POP      {R1}
   \   00000040   0847               BX       R1               ;; return
    341          }
    342          #endif                                           /* OS_MEM_QUERY_EN                                    */
    343          
    344          /*
    345          *********************************************************************************************************
    346          *                                    INITIALIZE MEMORY PARTITION MANAGER
    347          *
    348          * Description : This function is called by uC/OS-II to initialize the memory partition manager.  Your
    349          *               application MUST NOT call this function.
    350          *
    351          * Arguments   : none
    352          *
    353          * Returns     : none
    354          *
    355          * Note(s)    : This function is INTERNAL to uC/OS-II and your application should not call it.
    356          *********************************************************************************************************
    357          */
    358          

   \                                 In segment CODE, align 4, keep-with-next
    359          void  OS_MemInit (void)
    360          {
   \                     OS_MemInit:
   \   00000000   10B5               PUSH     {R4,LR}
    361          #if OS_MAX_MEM_PART == 1
    362              OSMemFreeList = (OS_MEM *)&OSMemTbl[0];             /* Point to beginning of free list             */
    363              OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl)); /* Clear the memory partition table            */
    364          #endif
    365          
    366          #if OS_MAX_MEM_PART >= 2
    367              OS_MEM  *pmem;
    368              INT16U   i;
    369          
    370          
    371              OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl)); /* Clear the memory partition table            */
   \   00000002   8221               MOVS     R1,#+130
   \   00000004   4900               LSLS     R1,R1,#+1        ;; #+260
   \   00000006   0D48               LDR      R0,??OS_MemInit_0  ;; OSMemTbl
   \   00000008   ........           _BLF     OS_MemClr,??OS_MemClr??rT
    372              pmem = (OS_MEM *)&OSMemTbl[0];                      /* Point to memory control block (MCB)         */
   \   0000000C   0B48               LDR      R0,??OS_MemInit_0  ;; OSMemTbl
    373              for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) {       /* Init. list of free memory partitions        */
   \   0000000E   011D               ADDS     R1,R0,#+4
   \   00000010   0B4A               LDR      R2,??OS_MemInit_0+0x4  ;; OSMemTbl + 52
   \   00000012   0423               MOVS     R3,#+4
    374                  pmem->OSMemFreeList = (void *)&OSMemTbl[i+1];   /* Chain list of free partitions               */
   \                     ??OS_MemInit_1:
   \   00000014   0A60               STR      R2,[R1, #+0]
    375          #if OS_MEM_NAME_SIZE > 1
    376                  pmem->OSMemName[0]  = '?';                      /* Unknown name                                */
   \   00000016   3F24               MOVS     R4,#+63
   \   00000018   0475               STRB     R4,[R0, #+20]
    377                  pmem->OSMemName[1]  = OS_ASCII_NUL;
   \   0000001A   0024               MOVS     R4,#+0
   \   0000001C   4475               STRB     R4,[R0, #+21]
    378          #endif
    379                  pmem++;
   \   0000001E   3430               ADDS     R0,R0,#+52
    380              }
   \   00000020   3432               ADDS     R2,R2,#+52
   \   00000022   3431               ADDS     R1,R1,#+52
   \   00000024   5B1E               SUBS     R3,R3,#+1
   \   00000026   F5D1               BNE      ??OS_MemInit_1
    381              pmem->OSMemFreeList = (void *)0;                    /* Initialize last node                        */
   \   00000028   4460               STR      R4,[R0, #+4]
    382          #if OS_MEM_NAME_SIZE > 1
    383              pmem->OSMemName[0]  = '?';                          /* Unknown name                                */
   \   0000002A   3F21               MOVS     R1,#+63
   \   0000002C   0175               STRB     R1,[R0, #+20]
    384              pmem->OSMemName[1]  = OS_ASCII_NUL;
   \   0000002E   4475               STRB     R4,[R0, #+21]
    385          #endif
    386          
    387              OSMemFreeList       = (OS_MEM *)&OSMemTbl[0];       /* Point to beginning of free list             */
   \   00000030   ....               LDR      R0,??DataTable1  ;; OSMemFreeList
   \   00000032   0249               LDR      R1,??OS_MemInit_0  ;; OSMemTbl
   \   00000034   0160               STR      R1,[R0, #+0]
    388          #endif
    389          }
   \   00000036   10BC               POP      {R4}
   \   00000038   01BC               POP      {R0}
   \   0000003A   0047               BX       R0               ;; return
   \                     ??OS_MemInit_0:
   \   0000003C   ........           DC32     OSMemTbl
   \   00000040   ........           DC32     OSMemTbl + 52

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable1:
   \   00000000   ........           DC32     OSMemFreeList
    390          #endif                                                  /* OS_MEM_EN                                   */

   Maximum stack usage in bytes:

     Function     CSTACK
     --------     ------
     OSMemCreate     24
     OSMemGet        16
     OSMemNameGet    20
     OSMemNameSet    20
     OSMemPut        12
     OSMemQuery      12
     OS_MemInit       8


   Segment part sizes:

     Function/Label Bytes
     -------------- -----
     OSMemCreate     116
     OSMemGet         64
     OSMemNameGet     72
     OSMemNameSet     86
     OSMemPut         66
     OSMemQuery       66
     OS_MemInit       68
     ??DataTable1      4
      Others          96

 
 638 bytes in segment CODE
 
 542 bytes of CODE memory (+ 96 bytes shared)

Errors: none
Warnings: none

⌨️ 快捷键说明

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