275|2

92

帖子

0

资源

一粒金砂(中级)

【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的库有很多,这是在网络上找的,大家可以参考一下。

image-20210223165719-1.png

 

 

        因为对cJSON比较熟悉,所以我选择了cJSON移植到GD32E503开发板上。

 

        cJSON是开源的,在github上可以下载  https://github.com/DaveGamble/cJSON

        cJSON移植也比较简单,就是把这4个文件,cJSON .c、cJSON.h、cJSON_Utils.h、cJSON_Utils.c,添加到项目文件中去就可以了,加入测试程序,串口打印出数据。

 

image-20210223165719-2.png

 

        cJSON我在实际应用当中也经常碰到一些问题,最主要的还是内存分配。因为cJSON用的是编译器自带的malloc内存分配,所以Head堆空间要配置大一些,否则文件大了,容易出现内存不足而导致分配失败。本来计划用QSPI接口的SPIflash来存储解析,可是查看了开发板,发现很多IO口都已经分配殆尽。cJSON文件太大还是很耗内存资源的,如果用支持QSPI的可寻址这个特性来读取,效率就比较高了,因为cJSON解析JSON文件的时候,是要把整个文件都放在内存区域才能解析,也没办法预取部分来解析,所以对于内存空间较小的MCU,还是不推荐使用。

 

        最后附上源代码

        cJSON-master.zip (447.48 KB, 下载次数: 1)


回复

3327

帖子

1

资源

五彩晶圆(初级)

C/C++用json还真是别扭。不如java,javascript这种动态语言直接反序列化成对象。

个人签名人已离开,无事别找,找也找不到。

回复

946

帖子

0

资源

纯净的硅(高级)

我都是用lua脚本实现


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表