单片机模块化程序: 单片机加入JSON是个不错的选择
这节需要知道的知识点
https://www.cnblogs.com/yangfengwu/p/11685325.html
下载JSON文件:
链接: https://sourceforge.net/projects/cjson/

等到倒计时到0


拷贝JSON源文件和头文件,添加头文件到include.h


解析个数据
"{\"datemcu\":\"updata\",\"cmd\":\"model\"}"
JSON标准格式 {"字段","字段值"}
\" 意思是转义 " 就是说这个" 并不起什么作用,只是个"
如果不写 \ 那么会认为 "{" 就会和前面的" 配合了

char jsonValue1[]="{\"datemcu\":\"updata\",\"cmd\":\"model\"}";
cJSON *jsonData,*jsonValue;
int main(void)
{
NVIC_Configuration();
uart_init(); //串口初始化为115200
GpioInit();
DelayInit();
rbCreate(&Uart1rb,Usart1SendBuff,Usart1SendLen);//创建环形队列--串口1
jsonData = cJSON_Parse(jsonValue1);//把数据存储到cJSON链表中
if(jsonData)//是JSON数据
{
jsonValue = cJSON_GetObjectItem(jsonData,"datemcu");//查找datemcu字段,如果存在则序列化cJSON结构体中
if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
{
printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
}
jsonValue = cJSON_GetObjectItem(jsonData,"cmd");//查找cmd字段,如果存在则序列化cJSON结构体中
if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
{
printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
}
}
cJSON_Delete(jsonData);//释放内存

解析个二维的数据:
"{\"datemcu\":\"updata\",\"cmd\":{\"Id\":\"CH010100\",\"code\":\"001\"}}";

char jsonValue2[]="{\"datemcu\":\"updata\",\"cmd\":{\"Id\":\"CH010100\",\"code\":\"001\"}}";
cJSON *jsonData,*jsonItem,*jsonValue;
int main(void)
{
NVIC_Configuration();
uart_init(); //串口初始化为115200
GpioInit();
DelayInit();
rbCreate(&Uart1rb,Usart1SendBuff,Usart1SendLen);//创建环形队列--串口1
jsonData = cJSON_Parse(jsonValue2);//把数据存储到cJSON链表中
if(jsonData)//是JSON数据
{
jsonValue = cJSON_GetObjectItem(jsonData,"datemcu");//查找datemcu字段,如果存在则序列化cJSON结构体中
if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
{
printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
}
jsonItem = cJSON_GetObjectItem(jsonData,"cmd");//查找cmd字段,如果存在则序列化cJSON结构体中
if(jsonItem->type == cJSON_Object)//获取当前字段的数据类型,(一个JSON对象)
{
jsonValue = cJSON_GetObjectItem(jsonItem,"Id");//查找Id字段,如果存在则序列化cJSON结构体中
if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
{
printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
}
jsonValue = cJSON_GetObjectItem(jsonItem,"code");//查找code字段,如果存在则序列化cJSON结构体中
if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
{
printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
}
}
}
cJSON_Delete(jsonData);//释放内存

封装个数据:
{"datemcu":"updata","value":2}


封装个复杂点的数据:
更多操作看官方例子:


错误. 后来发现是malloc 内存不足导致的(cJSON 的数据全部用malloc 分配)



单片机模块化程序: 单片机加入JSON是个不错的选择的更多相关文章
- 单片机模块化程序: 单片机AT指令配置模块程序模板(非阻塞版)
拷贝这两个文件到自己的工程 测试1://单片机发送AT+RST\r\n 如果单片机串口接收到OK 或者ready 执行下一条 测试视频: https://qqqqqbucket.oss-cn-bei ...
- 单片机C程序优化
单片机C程序优化 对程序进行优化,通常是指优化程序代码或程序执行速度.优化代码和优化速度实际上是一个予盾的统一.一般是优化了代码的尺寸,就会带来执行时间的增加:如果优化了程序的执行速度,通常会带来代码 ...
- STM8S003/005/007芯片解密单片机解密程序提取复制经验分享!
STM8S003/005/007芯片解密单片机解密程序提取复制 芯片解密型号: STM8S003K3T6,STM8S005K6T6,STM8S007C8T6,STM8S003F3P6 STM8S005 ...
- 【转】STC51单片机下载程序的时候不要在VCC端接DHT11
今天使用51单片机学习板调试DHT11湿度传感器,下载程序的时候把DHT11烧掉了. 一开始我使用杜邦线把DHT11的VCC引脚接到学习板上的VCC端,GND接GND,数据端口接51单片机的P0.0. ...
- 单片机内程序运行的时候ram空间是如何分配的?
转自:http://blog.sina.com.cn/s/blog_a575eb9401014tam.html 单片机内程序运行的时候ram空间是如何分配的?我现对一个程序进行减少片内ram的使用的优 ...
- c语言编写51单片机中断程序,执行过程是怎样的?
Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序:#include<reg52.h> void main(void) { EA=1; //开放总中断 E ...
- [转] 图解单片机下载程序电路原理之USB转串口线、CH340、PL2303、MAX232芯片的使用
点击阅读原文 目前为止,我接触单片机已有不少时日,从选择元器件.原理图.PCB.电路硬件调试.软件开发也算小有心得 .单片机软件开发里面第一步当属下载程序了,如果这一步都有问题,那么后面的一切便无从谈 ...
- 51单片机和STM32单片机区别在那里
大部分朋友可能都知道51单片机和stm32单片机也知道一般入门会先学习51单片机在学习stm32单片机会简单一些,但是对于51单片机和stm32单片机的具体区别却不知道了,有些人觉得没必要,但是我个 ...
- STM32单片机和51单片机区别
单片机 / AVR / PIC / STM32 / 8051803189C5189S51 6905 单片机简介 单片微型计算机简称单片机,简单来说就是集CPU(运算.控制).RAM(数据存储-内存). ...
随机推荐
- 【题解】子序列个数 [51nod1202] [FZU2129]
[题解]子序列个数 [51nod1202] [FZU2129] 传送门:子序列个数 \([51nod1202]\) \([FZU2129]\) [题目描述] 对于给出长度为 \(n\) 的一个序列 \ ...
- Java 加载动态库 dll 文件
不知道具体原理,但是,加载 dll 文件时,带路径或者更改 dll 文件的名字,都会报错.虽然库记载成功了,但是处女座认为这不可接受.于是有了这个解决方案. 在根目录为库创建软连接,然后使用 syst ...
- 给定一个长度为N的数组,找出出现次数大于n/2,n/3的数,要求时间复杂度O(n),空间复杂度O(1)
先讨论出现次数大于n/2的数字,如果这样的数字存在,那么这个数出现的次数大于其他数出现的次数的总和. 在数组A中,我们定义两个数据集合a1,a2.a1为出现次数大于n/2的数的集合,a2为其余数组成的 ...
- docker镜像上传阿里云仓库
推送至阿里云镜像:1.首先在阿里云上选择容器镜像服务,创建命名空间以及镜像仓库2. docker login --username=zhangshitongsky@163.com registry.c ...
- C语言----输入输出语句(基础篇二)
今天整理一下自己的基础篇输入和输出的理解,自己没有研究系统输入和输出函数,以后有时间在去深究,之前在别人的博客里面看到这么一句话分享给大家,“学习就是一个不断抄袭,模仿,练习和创新的一个过程”. 使用 ...
- APS.NET MVC + EF (00)---C#基础
命名参数 命名参数是把参数附上参数名称,这样在调用方法的时候不必按照原来的参数顺序填写参数,只需要对应好参数的名称也能完成方法调用. static void Main(string[] args) { ...
- MySQL之查询篇(三)
一:查询 1.创建数据库,数据表 -- 创建数据库 create database python_test_1 charset=utf8; -- 使用数据库 use python_test_1; -- ...
- MybatisGenerator生成SSM的dao层
官网下载 mybatis generator 下载generator的release版本mybatis-generator-core-1.4.0-bundle.zip https://github.c ...
- UIDatePicker基本使用
UIDatePicker提供了一个快速选择日期和时间的控件,他是UIControl的子类,专门用于日期时间的选择.其样式可以通过UIDatePicker的属性进行灵活设置,同时也可以获取到当前UIDa ...
- 老大难的GC原理及调优,这下全说清楚了
概述 本文介绍GC基础原理和理论,GC调优方法思路和方法,基于Hotspot jdk1.8,学习之后将了解如何对生产系统出现的GC问题进行排查解决 阅读时长约30分钟,内容主要如下: GC基础原理,涉 ...