• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * @file hi_men.h
3  *
4  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /**
19  * @defgroup iot_mem  Memory
20  * @ingroup osa
21  */
22 
23 #ifndef __HI_MEM_H__
24 #define __HI_MEM_H__
25 #include <hi_types_base.h>
26 
27 /**
28  * @ingroup iot_mem
29  * Overall memory information.CNcomment:整体内存信息。CNend
30  */
31 typedef struct {
32     hi_u32 total;                /**< Total space of the memory pool (unit: byte).
33                                     CNcomment:内存池总大小(单位:byte)CNend */
34     hi_u32 used;                 /**< Used space of the memory pool (unit: byte).
35                                     CNcomment:内存池已经使用大小(单位:byte)CNend */
36     hi_u32 free;                 /**< Free space of the memory pool (unit: byte).
37                                     CNcomment:内存池剩余空间(单位:byte)CNend */
38     hi_u32 free_node_num;        /**< Number of free nodes in the memory pool.
39                                     CNcomment:内存池剩余空间节点个数 CNend */
40     hi_u32 used_node_num;        /**< Number of used nodes in the memory pool.
41                                     CNcomment:内存池已经使用的节点个数 CNend */
42     hi_u32 max_free_node_size;   /**< Maximum size of the node in the free space of the memory pool (unit: byte).
43                                     CNcomment:内存池剩余空间节点中最大节点的大小(单位:byte)CNend */
44     hi_u32 malloc_fail_count;    /**< Number of memory application failures.CNcomment:内存申请失败计数 CNend */
45     hi_u32 peek_size;            /**< Peak memory usage of the memory pool.CNcomment:内存池使用峰值CNend */
46     hi_u32 total_lmp;            /**< Total space of the little memory pool (unit: byte).
47                                     CNcomment:小内存池总大小(单位:byte)CNend */
48     hi_u32 used_lmp;             /**< Used space of the little memory pool (unit: byte).
49                                     CNcomment:小内存池已经使用大小(单位:byte)CNend */
50     hi_u32 free_lmp;             /**< Free space of the little memory pool (unit: byte).
51                                     CNcomment:小内存池剩余空间(单位:byte)CNend */
52 } hi_mdm_mem_info;
53 
54 typedef struct {
55     hi_u32 pool_addr;
56     hi_u32 pool_size;
57     hi_u32 fail_count;
58     hi_u32 peek_size;
59     hi_u32 cur_use_size;
60 } hi_mem_pool_crash_info;
61 
62 /**
63 * @ingroup  iot_mem
64 * @brief  Dynamically applies for memory.CNcomment:动态申请内存。CNend
65 *
66 * @par 描述:
67 *           Dynamically applies for memory.CNcomment:动态申请内存。CNend
68 *
69 * @attention None
70 * @param  mod_id  [IN] type #hi_u32,ID of the called module.CNcomment:调用模块ID。CNend
71 * @param  size    [IN] type #hi_u32,Requested memory size (unit: byte)
72 CNcomment:申请内存大小(单位:byte)。CNend
73 *
74 * @retval #>0 Success
75 * @retval #HI_NULL   Failure. The memory is insufficient.
76 * @par 依赖:
77 *            @li hi_mem.h:Describes memory APIs.CNcomment:文件用于描述内存相关接口。CNend
78 * @see  hi_free。
79 */
80 hi_pvoid hi_malloc(hi_u32 mod_id, hi_u32 size);
81 
82 /**
83 * @ingroup  iot_mem
84 * @brief  Releases the memory that is dynamically applied for.CNcomment:释放动态申请的内存。CNend
85 *
86 * @par 描述:
87 *          Releases the memory that is dynamically applied for.CNcomment:释放动态申请的内存。CNend
88 *
89 * @attention None
90 * @param  mod_id  [IN] type #hi_u32,ID of the called module.CNcomment:调用模块ID。CNend
91 * @param  addr    [IN] type #hi_pvoid,Start address of the requested memory. The validity of the address is ensured
92 *                 by the caller.CNcomment:所申请内存的首地址,地址合法性由调用者保证。CNend
93 *
94 * @retval None
95 * @par 依赖:
96 *            @li hi_mem.h:Describes memory APIs.CNcomment:文件用于描述内存相关接口。CNend
97 * @see  hi_malloc。
98 */
99 hi_void hi_free(hi_u32 mod_id, const hi_pvoid addr);
100 
101 /**
102 * @ingroup  iot_mem
103 * @brief  Obtains the memory information.CNcomment:获取内存信息。CNend
104 *
105 * @par 描述:
106 *           Obtains the memory information.CNcomment:获取内存信息。CNend
107 *
108 * @attention None
109 * @param  mem_inf [OUT] type #hi_mdm_mem_info*,Overall memory information.CNcomment:整体内存信息。CNend
110 *
111 * @retval #0      Success.
112 * @retval #Other  Failure, for details, see hi_errno.h
113 * @par 依赖:
114 *            @li hi_mem.h:Describes memory APIs.CNcomment:文件用于描述内存相关接口。CNend
115 * @see  None
116 */
117 hi_u32 hi_mem_get_sys_info(HI_OUT hi_mdm_mem_info *mem_inf);
118 
119 /**
120 * @ingroup  iot_mem
121 * @brief  Obtains memory information, used in a crash process.
122 CNcomment:获取内存信息,死机流程中使用。CNend
123 *
124 * @par 描述:
125 *           Obtains memory information, used in a crash process. When the board is reset due to a memory exception,
126 *           if hi_mem_get_sys_info is used to obtain memory information, another exception may occur. In this case,
127 *           use hi_mem_get_sys_info_crash instead.CNcomment:获取内存信息,死机流程中使用。当内存异常导致单板复位时,
128 如果通过hi_mem_get_sys_info获取内存信息可能再次产生异常,此时应该使用hi_mem_get_sys_info_crash。CNend
129 *
130 * @attention None
131 *
132 * @retval #hi_mem_pool_crash_info   Memory information.CNcomment:内存信息。CNend
133 *
134 * @par 依赖:
135 *            @li hi_mem.h:Describes memory APIs.CNcomment:文件用于描述内存相关接口。CNend
136 * @see  None
137 */
138 HI_CONST hi_mem_pool_crash_info *hi_mem_get_sys_info_crash(hi_void);
139 
140 #endif
141