最近需要在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
修改了这三个地方,目前程序可以正常发送