【NRF52】使用nrf SDK里的内存管理模块出现系统死机问题

前言
由于用到了cjson 序列化与反序列化,用到了动态内存管理。实际开发中发现调用cJSON_Init()函数使用nrf库的nrf_malloc时,cjson解析超过115字节长度字符串系统异常死机。
问题描述
在这里插入图片描述
可以看到cJSON_Init();内部如下:
在这里插入图片描述
在这里插入图片描述
实现了cJSON_free cJSON_malloc函数指针的赋值。
nrf内存块的大小可自定义设置,如下:
在这里插入图片描述
问题解决
折腾了两个多小时,最终通过查看nrf关于内存部分的使用说明,如下:
在这里插入图片描述
查看前面出问题的设置:
在这里插入图片描述
SMALL_BLOCK 设置比 XSMALL_BLOCK小,修改如下:
在这里插入图片描述
系统恢复正常。
问题总结
nrf的内存操作部分,没有按照category前后顺序大小设置好内存块大小,导致实际使用申请内存大于当前块大小,往相邻更大的category(实际配置小于前面的块,如small比xsmall配置的小)去申请时造成系统异常死机。

更进一步的,nrf底层逻辑上为什么出现这个现象,有空深究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值