野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22856|回复: 2

[cJSON]STM32移植cJSON库实现Json数据解析、打包

[复制链接]
发表于 2020-5-10 18:04:52 | 显示全部楼层 |阅读模式
1、前言
JSON(JavaScript Object Notation)是一种轻量级的文本数据交换格式,易于让人阅读,JSON解析器和JSON库支持许多不同的编程语言。cJSON是一个轻巧、简单的可以作为ANSI-C标准的JSON解析器。
在进行物联网项目开发时不可避免的涉及到终端硬件与上层软件的数据交互——Json就是一个很好的选择。键值对的表示方式直观明了,而且上层软件开发人员大多数都使用Json做数据处理,底层硬件开发人员使用Json则需要移植cJSON库。



cJSON库github地址:https://github.com/DaveGamble/cJSON

2、移植

实验平台:基于野火STM32H750开发板


移植也很简答,将cJSON.c、cJSON.h两个文件添加到工程,包含头文件路径即可。cJSON默认使用c库的malloc、free函数进行内存申请释放,但是提供重定义接口功能以使用其他内存管理接口。

裸机
使用默认的内存管理函数。需要注意的是cJSON在创建、解析json对象的时候比较吃内存,需要将HEAP空间定义大一些。
Snipaste_2020-05-10_17-27-13.png

一般是HEAP空间不够导致如下情况:
Snipaste_2020-05-10_17-33-06.png

正常解析
Snipaste_2020-05-10_17-35-59.png


RTOS:
本人使用的是FreeRTOS,和裸机移植不同的是将内存的申请、释放功能重定义为RTOS的内存管理函数
Snipaste_2020-05-10_17-42-01.png

专门创建一个任务作为cJSON处理数据
Snipaste_2020-05-10_17-45-52.png

3、测试
测试功能如下:开启UART空闲中断,当UART的接收BUF接收到一帧Json数据后,由主任务进行数据的解析,并将解析结果打印到串口,然后对收到的数据进行回应。
Snipaste_2020-05-10_17-54-46.png


cJSON_demo_Normal.zip

1.18 MB, 下载次数: 71

裸机源码

cJSON_Demo_RTOS.zip

1.47 MB, 下载次数: 38

RTOS源码

cJSON-master.zip

451.59 KB, 下载次数: 38

cJSON库源码

回复

使用道具 举报

发表于 2020-5-11 10:01:12 | 显示全部楼层
回复

使用道具 举报

发表于 2020-5-11 13:01:42 | 显示全部楼层
实际使用这个还是不方便的,需要自己封包跟解包,这里推荐结构体转json的方式,github也有,cson
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 07:54 , Processed in 0.050887 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表