原创 stm32f407移植cJSON 归纳

2020-10-13 13:41 2799 17 17 分类: MCU/ 嵌入式 文集: STM32
测试很顺利,主要感谢以下三位前行者的无私开源。
参考下列三位大神文章汇总:
在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条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
17
关闭 站长推荐上一条 /6 下一条