mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-11-16 12:34:33 +00:00
分离内存分配接口与内存分配算法 (#5175)
* [kernel][mem] Multiple instances of small memory allocation algorithm * [kernel][mem] Change small memory management algorithm memory header flag * [kernel][mem] Fix assertion problem * [kernel][slab] Multiple instances of slab memory management algorithm * [kernel][memheap] Remove rt_malloc/rt_free/rt_realloc and other related memory interfaces * [kernel][mem] Clean up memory space of small memory management objects * [kernel][kservice] Add memory application interface and thread protection interface * [kernel][kservice] Fix function return value problem * [kernel][memheap] Optimize memheaptrace print * [kernel][memheap] Support best mode * [kernel][memory] Remove semaphore lock * [kernel][memheap] Add locked flag * [kernel][memory] Support malloc memory in interrupt * [kernel][memheap] Add 'memheapcheck' cmd * [kernel][mem] Fix failure to request full memory * [kernel][memheap] Fix compilation warning * [kernel][mem] Fix mem realloc ASSERT * [examples][testcases] Add small mem testcase * [examples][mem_tc] Modify test memory size * [examples][testcases] Add slab memory management algorithm test case * [examples][testcases] fix small memory management algorithm test case * [kernel][memory] Adjusting memory allocation algorithm object definition and interface * [kernel][memory] Fix compilation warning * [examples][utest] Fix mem test case * [examples][utest] fix slab test case * [utest][testcases] Shorten test time * [kernel][memory] Formatting code * [examples][utest] Adjust test run time * [examples][utest] Formatting code * [bsp] update all rtconfig.h
This commit is contained in:
@@ -431,7 +431,8 @@ enum rt_object_class_type
|
||||
RT_Object_Class_Device = 0x09, /**< The object is a device. */
|
||||
RT_Object_Class_Timer = 0x0a, /**< The object is a timer. */
|
||||
RT_Object_Class_Module = 0x0b, /**< The object is a module. */
|
||||
RT_Object_Class_Unknown = 0x0c, /**< The object is unknown. */
|
||||
RT_Object_Class_Memory = 0x0c, /**< The object is a memory. */
|
||||
RT_Object_Class_Unknown = 0x0e, /**< The object is unknown. */
|
||||
RT_Object_Class_Static = 0x80 /**< The object is a static object. */
|
||||
};
|
||||
|
||||
@@ -817,11 +818,35 @@ typedef struct rt_messagequeue *rt_mq_t;
|
||||
|
||||
/**@{*/
|
||||
|
||||
#ifdef RT_USING_HEAP
|
||||
/*
|
||||
* memory structure
|
||||
*/
|
||||
struct rt_memory
|
||||
{
|
||||
struct rt_object parent; /**< inherit from rt_object */
|
||||
const char * algorithm; /**< Memory management algorithm name */
|
||||
rt_ubase_t address; /**< memory start address */
|
||||
rt_size_t total; /**< memory size */
|
||||
rt_size_t used; /**< size used */
|
||||
rt_size_t max; /**< maximum usage */
|
||||
};
|
||||
typedef struct rt_memory *rt_mem_t;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* memory management
|
||||
* heap & partition
|
||||
*/
|
||||
|
||||
#ifdef RT_USING_SMALL_MEM
|
||||
typedef rt_mem_t rt_smem_t;
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_SLAB
|
||||
typedef rt_mem_t rt_slab_t;
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_MEMHEAP
|
||||
/**
|
||||
* memory item on the heap
|
||||
@@ -860,6 +885,7 @@ struct rt_memheap
|
||||
struct rt_memheap_item free_header; /**< free block list header */
|
||||
|
||||
struct rt_semaphore lock; /**< semaphore lock */
|
||||
rt_bool_t locked; /**< External lock mark */
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
@@ -271,7 +271,7 @@ void rt_memory_info(rt_uint32_t *total,
|
||||
rt_uint32_t *used,
|
||||
rt_uint32_t *max_used);
|
||||
|
||||
#ifdef RT_USING_SLAB
|
||||
#if defined(RT_USING_SLAB) && defined(RT_USING_SLAB_AS_HEAP)
|
||||
void *rt_page_alloc(rt_size_t npages);
|
||||
void rt_page_free(void *addr, rt_size_t npages);
|
||||
#endif
|
||||
@@ -283,6 +283,19 @@ void rt_free_sethook(void (*hook)(void *ptr));
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_SMALL_MEM
|
||||
/**
|
||||
* small memory object interface
|
||||
*/
|
||||
rt_smem_t rt_smem_init(const char *name,
|
||||
void *begin_addr,
|
||||
rt_size_t size);
|
||||
rt_err_t rt_smem_detach(rt_smem_t m);
|
||||
void *rt_smem_alloc(rt_smem_t m, rt_size_t size);
|
||||
void *rt_smem_realloc(rt_smem_t m, void *rmem, rt_size_t newsize);
|
||||
void rt_smem_free(void *rmem);
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_MEMHEAP
|
||||
/**
|
||||
* memory heap object interface
|
||||
@@ -295,6 +308,23 @@ rt_err_t rt_memheap_detach(struct rt_memheap *heap);
|
||||
void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size);
|
||||
void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize);
|
||||
void rt_memheap_free(void *ptr);
|
||||
void rt_memheap_info(struct rt_memheap *heap,
|
||||
rt_uint32_t *total,
|
||||
rt_uint32_t *used,
|
||||
rt_uint32_t *max_used);
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_SLAB
|
||||
/**
|
||||
* slab object interface
|
||||
*/
|
||||
rt_slab_t rt_slab_init(const char *name, void *begin_addr, rt_size_t size);
|
||||
rt_err_t rt_slab_detach(rt_slab_t m);
|
||||
void *rt_slab_page_alloc(rt_slab_t m, rt_size_t npages);
|
||||
void rt_slab_page_free(rt_slab_t m, void *addr, rt_size_t npages);
|
||||
void *rt_slab_alloc(rt_slab_t m, rt_size_t size);
|
||||
void *rt_slab_realloc(rt_slab_t m, void *ptr, rt_size_t size);
|
||||
void rt_slab_free(rt_slab_t m, void *ptr);
|
||||
#endif
|
||||
|
||||
/**@}*/
|
||||
|
||||
Reference in New Issue
Block a user