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

📄 os_mem.lst

📁 ARM仿真案例
💻 LST
📖 第 1 页 / 共 4 页
字号:
    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   00B5               PUSH     {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   1148               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   0F48               LDR      R0,??OS_MemInit_0  ;; OSMemTbl
    373              for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) {       /* Init. list of free memory partitions        */
   \   0000000E   0021               MOVS     R1,#+0
   \   00000010   0DE0               B        ??OS_MemInit_1
    374                  pmem->OSMemFreeList = (void *)&OSMemTbl[i+1];   /* Chain list of free partitions               */
   \                     ??OS_MemInit_2:
   \   00000012   0904               LSLS     R1,R1,#+16       ;; ZeroExtS R1,R1,#+16,#+16
   \   00000014   090C               LSRS     R1,R1,#+16
   \   00000016   3422               MOVS     R2,#+52
   \   00000018   4A43               MULS     R2,R1,R2
   \   0000001A   0C4B               LDR      R3,??OS_MemInit_0  ;; OSMemTbl
   \   0000001C   9A18               ADDS     R2,R3,R2
   \   0000001E   3432               ADDS     R2,R2,#+52
   \   00000020   4260               STR      R2,[R0, #+4]
    375          #if OS_MEM_NAME_SIZE > 1
    376                  pmem->OSMemName[0]  = '?';                      /* Unknown name                                */
   \   00000022   3F22               MOVS     R2,#+63
   \   00000024   0275               STRB     R2,[R0, #+20]
    377                  pmem->OSMemName[1]  = OS_ASCII_NUL;
   \   00000026   0022               MOVS     R2,#+0
   \   00000028   4275               STRB     R2,[R0, #+21]
    378          #endif
    379                  pmem++;
   \   0000002A   3430               ADDS     R0,R0,#+52
    380              }
   \   0000002C   491C               ADDS     R1,R1,#+1
   \                     ??OS_MemInit_1:
   \   0000002E   0904               LSLS     R1,R1,#+16       ;; ZeroExtS R1,R1,#+16,#+16
   \   00000030   090C               LSRS     R1,R1,#+16
   \   00000032   0429               CMP      R1,#+4
   \   00000034   EDD3               BCC      ??OS_MemInit_2
    381              pmem->OSMemFreeList = (void *)0;                    /* Initialize last node                        */
   \   00000036   0021               MOVS     R1,#+0
   \   00000038   4160               STR      R1,[R0, #+4]
    382          #if OS_MEM_NAME_SIZE > 1
    383              pmem->OSMemName[0]  = '?';                          /* Unknown name                                */
   \   0000003A   3F21               MOVS     R1,#+63
   \   0000003C   0175               STRB     R1,[R0, #+20]
    384              pmem->OSMemName[1]  = OS_ASCII_NUL;
   \   0000003E   0021               MOVS     R1,#+0
   \   00000040   4175               STRB     R1,[R0, #+21]
    385          #endif
    386          
    387              OSMemFreeList       = (OS_MEM *)&OSMemTbl[0];       /* Point to beginning of free list             */
   \   00000042   ....               LDR      R0,??DataTable4  ;; OSMemFreeList
   \   00000044   0149               LDR      R1,??OS_MemInit_0  ;; OSMemTbl
   \   00000046   0160               STR      R1,[R0, #+0]
    388          #endif
    389          }
   \   00000048   01BC               POP      {R0}
   \   0000004A   0047               BX       R0               ;; return
   \                     ??OS_MemInit_0:
   \   0000004C   ........           DC32     OSMemTbl

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable4:
   \   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       4


   Segment part sizes:

     Function/Label Bytes
     -------------- -----
     OSMemCreate     144
     OSMemGet         68
     OSMemNameGet     80
     OSMemNameSet     92
     OSMemPut         66
     OSMemQuery       66
     OS_MemInit       80
     ??DataTable4      4
      Others          96

 
 696 bytes in segment CODE
 
 600 bytes of CODE memory (+ 96 bytes shared)

Errors: none
Warnings: none

⌨️ 快捷键说明

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