cJSON在STM32中的应用
写在前面:
将JSON应用在STM32上面已经很普遍了,但还是有很多问题在网上找不到答案,毕竟自己造轮子和找轮子造车还是有点差别。
今天就总结一下最近在STM32上使用cJSON所遇到的一些问题。
-------------------------------------------正文开始线-----------------------------------------------
JSON的C语言版,一种常用的轻量级数据交换格式,详情见 JSON介绍。
创建JSON对象,并向其中加入数据。
- //创建json对象
- cJSON *info;
- info=cJSON_CreateObject();
-
- //添加数据
- cJSON_AddStringToObject(info,"sex","male");
- cJSON_AddNumberToObject(info,"age",20);
- cJSON_AddStringToObject(info,"name","weijun");
将JSON对象转换成字符串
- //字符指针
- char *jsonStr;
- //转换函数
- jsonStr=cJSON_Print(info);
将字符串转换成JSON并取数据
- //创建JSON对象
- cJSON *root;
- cJSON *name;
- char *exeStr;
-
- //解析字符串
- root = cJSON_Parse(data);
- if (!root) {
- printf("get root faild !\n");
- printf("Error before: [%s]\n", cJSON_GetErrorPtr());
- }
-
- //获取数据
- name = cJSON_GetObjectItem(root, "name");
- if (!name) {
- printf("get name faild !\n");
- printf("Error before: [%s]\n", cJSON_GetErrorPtr());
- }
-
- //转移数据到指针
- exeStr = (char*)malloc(strlen(name->valuestring));
- sprintf(exeStr, "%s", name->valuestring);
-
- //内存回收
- cJSON_Delete(root);
对于绝大多数的STM32开发板,创建JSON对象、添加数据、将JSON转换为字符串是不会有问题的。
但是,使用cJSON_Parse()函数时会出错,什么数据都读不出来,究其原因,还是开发板内存不够,经不起JSON的折腾。
但是呢,解决办法也很简单,如下图。
修改启动文件中的Stack_Size和Heap_Size 。下图并不严谨,只是想说把堆栈的内存调大一些,再去编译基本就通过了。
- Stack_Size EQU 0x00002000
-
- AREA STACK, NOINIT, READWRITE, ALIGN=3
- Stack_Mem SPACE Stack_Size
- __initial_sp
-
- ; <h> Heap Configuration
- ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
- ; </h>
-
- Heap_Size EQU 0x00004000