测试很顺利,主要感谢以下三位前行者的无私开源。
参考下列三位大神文章汇总:
在STM32F407上简单移植Cjson
https://blog.csdn.net/qq_41764645/article/details/88716102
stm32 移植cJson 注意free释放内存!!
https://blog.csdn.net/penglijiang/article/details/52831080?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_w
STM32快速使用CJSON(打包与解析)
https://blog.csdn.net/weixin_45030703/article/details/106208593
总结:第一步下载cJSON
第二步:
- 将CJSON.c和CJSON.h导入项目并在魔术棒中包含路径
- 在startup_stm32f407xx.s(其他型号也一样找到startup_stm32f×××××.s即可)这个文件里面将Heap_Size()设置为0xC00
- 在main.c中包含头文件 #include “cJSON.h” #include
第三步:在cJSON中 加入
static void *(*cJSON_malloc)(size_t sz) =cJSON_mymalloc; //把cJSON的malloc程序改成 自己的malloc程序。
static void (*cJSON_free)(void *ptr) = cJSON_myfree;
注意在原子开发板的malloc函数 是mymalloc. 入口参数是2个。 cJSON 的 malloc 函数 只有一个。 因此要简单的改一下。
在malloc.h中加入2个函数定义:
void cJSON_myfree(void *ptr); //内存释放(外部调用)
void *cJSON_mymalloc(u32 size); //内存分配(外部调用)
在malloc.c中 加入2个函数。 内存定义在内部SRAM
void cJSON_myfree(void *ptr) //内存释放(外部调用) 专门为cJSON 改。 cJSON入口有一个参数。 现在的mymalloc 有2个入口参数。只好固定一个。 只使用内部RAM;
{
myfree(SRAMIN, &ptr);
}
void *cJSON_mymalloc(u32 size) //内存分配(外部调用)
{
mymalloc(SRAMIN, size);
}
OK 改造完毕, 测试:
void TEST_CJOSN(void)
{
cJSON *root;
cJSON *json,*json_one;
char *out;
char* decodebuf="{\"one\":\"long\",\"two\":\"2\",\"three\":3}";
//---------------------------------------编码测试-------------------------
root=cJSON_CreateObject(); //创建root对象,返回值为cJSON指针
cJSON_AddStringToObject(root,"name","wuchangqi123"); //{"name":"wuchangqi123"}
out=cJSON_Print(root);
printf("%s\r\n",out); //incode ok
cJSON_Delete(root); //释放内存
myfree(SRAMIN,out); //释放内存
//---------------------------------------解码测试
json = cJSON_Parse(decodebuf); //将得到的字符串解析成json形式
json_one = cJSON_GetObjectItem( json , "one" ); //从json获取键值内容
printf("\r\none:%s",json_one->valuestring); //返回的可能是字符串或者是数值。
cJSON_Delete(json); //释放内存
}
打印输出: 结果是正确的。
{
"name": "wuchangqi123"
}
one:long
文章评论(0条评论)
登录后参与讨论