嵌入式技术论坛
直播中

万航渡路

8年用户 1295经验值
擅长:电源/新能源
私信 关注
[问答]

调试发布版RT-Thread4.1.0内存分配为NULL的问题怎么解决

在调试发布版4.1.0的时候,遇到问题:
调用RT_KERNEL_MALLOC
object = (struct rt_object *)RT_KERNEL_MALLOC(information->object_size);
    if (object == RT_NULL)
    {
        /* no memory can be allocated */
        return RT_NULL;
    }
对象为空最后,确定是_MEM_MALLOC(_size)返回为空,source insight发现下面_MEM_MOC定义处的宏图发现所有的宏图都没有打开
#if defined(RT_USING_SMALL_MEM_AS_HEAP)
static rt_smem_t system_heap;
rt_inline void _smem_info(rt_size_t *total,
    rt_size_t *used, rt_size_t *max_used)
{
    if (total)
        *total = system_heap->total;
    if (used)
        *used = system_heap->used;
    if (max_used)
        *max_used = system_heap->max;
}
#define _MEM_INIT(_name, _start, _size)
    system_heap = rt_smem_init(_name, _start, _size)
#define _MEM_MALLOC(_size)  
    rt_smem_alloc(system_heap, _size)
#define _MEM_REALLOC(_ptr, _newsize)
    rt_smem_realloc(system_heap, _ptr, _newsize)
#define _MEM_FREE(_ptr)
    rt_smem_free(_ptr)
#define _MEM_INFO(_total, _used, _max)  
    _smem_info(_total, _used, _max)
#elif defined(RT_USING_MEMHEAP_AS_HEAP)
static struct rt_memheap system_heap;
void *_memheap_alloc(struct rt_memheap *heap, rt_size_t size);
void _memheap_free(void *rmem);
void *_memheap_realloc(struct rt_memheap *heap, void *rmem, rt_size_t newsize);
#define _MEM_INIT(_name, _start, _size)
    rt_memheap_init(&system_heap, _name, _start, _size)
#define _MEM_MALLOC(_size)  
    _memheap_alloc(&system_heap, _size)
#define _MEM_REALLOC(_ptr, _newsize)   
    _memheap_realloc(&system_heap, _ptr, _newsize)
#define _MEM_FREE(_ptr)   
    _memheap_free(_ptr)
#define _MEM_INFO(_total, _used, _max)   
    rt_memheap_info(&system_heap, _total, _used, _max)
#elif defined(RT_USING_SLAB_AS_HEAP)
static rt_slab_t system_heap;
rt_inline void _slab_info(rt_size_t *total,
    rt_size_t *used, rt_size_t *max_used)
{
    if (total)
        *total = system_heap->total;
    if (used)
        *used = system_heap->used;
    if (max_used)
        *max_used = system_heap->max;
}
#define _MEM_INIT(_name, _start, _size)
    system_heap = rt_slab_init(_name, _start, _size)
#define _MEM_MALLOC(_size)  
    rt_slab_alloc(system_heap, _size)
#define _MEM_REALLOC(_ptr, _newsize)   
    rt_slab_realloc(system_heap, _ptr, _newsize)
#define _MEM_FREE(_ptr)
    rt_slab_free(system_heap, _ptr)
#define _MEM_INFO       _slab_info
#else
#define _MEM_INIT(...)
#define _MEM_MALLOC(...)     RT_NULL
#define _MEM_REALLOC(...)    RT_NULL
#define _MEM_FREE(...)
#define _MEM_INFO(...)
#endif
RT_USING_SMALL_MEM_AS_HEAP
RT_USING_MEMHEAP_AS_HEAP
RT_USING_SLAB_AS_HEAP
应该是宏最终这样被定义#define _MEM_MALLOC(...) RT_NULL为NULL的原因吧。

回帖(2)

王银喜

2022-4-29 09:35:15
啥平台?最好用menuconfig来配算法,选择合适的这块内存管理。
检查下你的rtconfig内存管理的具体定义吧。
举报

李娜

2022-4-29 09:35:27
可以看看官方文档的内存管理部分内存管理。
可以在 RT-Thread Settings 里面进行内存管理算法的选择。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分