STM32嵌入式系统FreeRTOS使用cJSON解析和构建JSON
一、环境
控制器STM32F407+MDK5.34+cJSON1.7.7
二、安装cJSON
MDK中打开Pack Install,选择Generic下边MDK-Pack::cJSON,点击安装Install
安装成功后,在Manage Run-Time Environment 中找到Data Exchange,并选择cJSON,下方点击OK。
可以在工程栏目下看到已经添加了cJSON。
三、使用cJSON
(1)在需要使用的文件中,增加头文件#include "cJSON.h"
(2)使用了操作系统时,用操作系统的内存管理接口替换cJSON默认的内存分配,以FREERTOS为例,调用cJSON_InitHooks函数进行重新指定。
cJSON_Hooks cJSONhooks_freeRTOS; cJSONhooks_freeRTOS.malloc_fn = pvPortMalloc; cJSONhooks_freeRTOS.free_fn = vPortFree; cJSON_InitHooks(&cJSONhooks_freeRTOS);
(3)创建json对象并打印
cJSON *root,*fmt; char *out; root=cJSON_CreateObject(); cJSON_AddItemToObject(root, "from", cJSON_CreateString("Jianwang16")); cJSON_AddItemToObject(root, "body", fmt=cJSON_CreateObject()); cJSON_AddStringToObject(fmt,"cmd", "start"); cJSON_AddNumberToObject(fmt,"port", 5100); cJSON_AddFalseToObject (fmt,"pwr"); out=cJSON_PrintUnformatted(root); OS_msgPrintf("size = %d string:%s ",strlen(out),out);
(4)cJSON几乎都是动态内存分配,所以使用json对象结束后需要清理内存,清理root对象即可,如果调用了cJSON打印,则需要清理打印输出的char 指针,例如:
cJSON_Delete(root); vPortFree(out);
四、测试样例和结果