STM32F103单片机使用cJSON库遇到的问题总结

STM32使用cJSON库遇到的问题总结

最近做项目用到了JSON报文,原来接触过一点就自己简单的写了一下处理数据的程序,但是效果一般,简单几个键值还可以,为了让程序功能更标准就使用了JSON文件库。

出现的问题:

1、在键值比较少的时候,没什么问题,运行也还稳定,当键值增加后在调用cJSON_Print();函数时返回的指针为0x00000000。

解决办法:

最后查到问题应该是出在内存申请和释放上面,于是借鉴了正点原子的内存分配程序,把cJSON.c中的
static void *(*cJSON_malloc)(size_t sz) = malloc;
static void (*cJSON_free)(void *ptr) = free;
改为
static void *(*cJSON_malloc)(size_t sz) = mymalloc;
static void (cJSON_free)(void ptr) = myfree;
把函数
void cJSON_InitHooks(cJSON_Hooks
hooks)
{
if (!hooks) { /
Reset hooks */
cJSON_malloc = malloc;
cJSON_free = free;
return;
}
cJSON_malloc = (hooks->malloc_fn)?hooks->malloc_fn:malloc;
cJSON_free = (hooks->free_fn)?hooks->free_fn:free;

}
改为
void cJSON_InitHooks(cJSON_Hooks* hooks)
{
if (!hooks) { /* Reset hooks */
cJSON_malloc = malloc;
cJSON_free = free;
return;
}
cJSON_malloc = (hooks->malloc_fn)?hooks->malloc_fn:mymalloc;
cJSON_free = (hooks->free_fn)?hooks->free_fn:myfree;
}
最后在P = cJSON_Print(buf);后释放内存myfree§;
改完之后程序可以正常运行。

其他问题:

整个调试过程中程序长时间运行时过一段时间会死在HardFault_Handler();中,由于出现的时间间隔不确定还没查出具体是哪的问题,怀疑可能是两个串口收发数据量太大或者还是因为内存分配的原因,有待继续查找原因。暂时只是加了看门狗临时过滤掉这个问题。

补充:死机应该是多次调用一个函数。而函数入口参数都是同一个指针造成的,重新修改程序流程之后没出现过死机情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值