【GD32E503评测】+ cJSON移植测试
[复制链接]
JSON, 全称是”JavaScript Object Notation”, 它是一种基于文本,独立于语言的轻量级数据交换格式, XML也是一种数据交换格式,但是风格上我个人更喜欢JSON,因为XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记。
JSON有两种表示结构,对象和数组。
对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组
数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成。没了解过JSON的可以看看这个网站,有比较详细的介绍说明。
http://www.json.org.cn/
单片机解析JSON的库有很多,这是在网络上找的,大家可以参考一下。
因为对cJSON比较熟悉,所以我选择了cJSON移植到GD32E503开发板上。
cJSON是开源的,在github上可以下载 https://github.com/DaveGamble/cJSON
cJSON移植也比较简单,就是把这4个文件,cJSON .c、cJSON.h、cJSON_Utils.h、cJSON_Utils.c,添加到项目文件中去就可以了,加入测试程序,串口打印出数据。
cJSON我在实际应用当中也经常碰到一些问题,最主要的还是内存分配。因为cJSON用的是编译器自带的malloc内存分配,所以Head堆空间要配置大一些,否则文件大了,容易出现内存不足而导致分配失败。本来计划用QSPI接口的SPIflash来存储解析,可是查看了开发板,发现很多IO口都已经分配殆尽。cJSON文件太大还是很耗内存资源的,如果用支持QSPI的可寻址这个特性来读取,效率就比较高了,因为cJSON解析JSON文件的时候,是要把整个文件都放在内存区域才能解析,也没办法预取部分来解析,所以对于内存空间较小的MCU,还是不推荐使用。
最后附上源代码
cJSON-master.zip
(447.48 KB, 下载次数: 24)
GD32E503V-EVAL-cJSON.rar
(2.73 MB, 下载次数: 27)
|