jansson+freertos遇到的问题

最近需要在stm32+freertos环境中,使用json格式组包通信,于是按照https://blog.csdn.net/yannanxiu/article/details/52712723

帖子中说的,使用了keil自带的jansson包,组包发送出现了一点问题,记录如下:

1.组包发送后,freertos死在taskSELECT_HIGHEST_PRIORITY_TASK();

修改了发送任务的栈大小,原来是128(字),改为256(字)

 

2.组包发送后,freertos死在configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 );

由于freertos有自己的内存申请和释放函数,所以需要用freertos自己的内存申请和释放函数替换掉jansson中的函数,使用jansson提供的接口函数 json_set_alloc_funcs(pvPortMalloc, vPortFree);即可,参数就是freertos的内存申请和释放函数

 

3.堆空间越用越少,导致最后申请不到堆空间

组包时使用的   

root = json_pack("{sisi}", "foo", 42, "bar", 7);
out = json_dumps(root, JSON_ENCODE_ANY);

使用完后要释放root和out,尝试使用vPortFree和json_object_clear来释放,都不能完全释放之前申请的空间,最终可用的方案是

使用json_decref(root);或json_delete(root);释放root

使用vPortFree(out);释放out

修改了这三个地方,目前程序可以正常发送

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值