单片机模块化程序: 单片机加入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(数据存储-内存). ...
随机推荐
- BZOJ3145 [Feyat cup 1.5]Str 后缀树、启发式合并
传送门--BZOJCH 考虑两种情况: 1.答案由一个最长公共子串+可能的一个模糊匹配位置组成.这个用SAM求一下最长公共子串,但是需要注意只出现在\(S\)的开头和\(T\)的结尾的子串是不能够通过 ...
- Linux命令注释—HDFS运维
HDFS运维—命令注释 1 实验背景 HDFS是大数据其他组件的基础,Hive的数据存储在HDFS中,Mapreduce.Spark 等计算数据也存储在HDFS 中,HBase 的 region 也是 ...
- Java学习:字符串概述与特点
字符串概述与特点 java.lang.String类 代表字符串 API当中说:Java程序中的所有字符串字面值(如“abc“)都作为此类的实例实现.其实就是说:程序当中所用的双引号字符串,都是Str ...
- MyBatis-Plus入门Demo详解
一.简介: 引用官方文档(本文主要参考官方文档示例): MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生 ...
- CSAPP第二章show_bytes函数的探究
CSAPP第二章中给出了一个帮助我们观察数据的位模式的函数--show_bytes函数,具体实现如下: #include<stdio.h> typedef unsigned char *b ...
- JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态
JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态 2017年10月25日 Jet Ma JavaPlatform JVM故障分析系列系列文章 JVM故障分析系列之一: ...
- .NET中的异步编程——动机和单元测试
背景 自.NET 4.5发布以来已经有很长一段时间了.留在了我们的记忆里,其发布在2012年8月15日.是的,六年前.感觉老了吗?好吧,我不打算让你做出改变,而是提醒你一些.NET发布的亮点.此版本带 ...
- springboot使用 @Transactional 注解配置事务管理
介绍 springboot对数据库事务的使用非常的方便,只需要在方法上添加@Transactional注解即可.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编程式和声明式的 ...
- 图像上划凸多边形(convexHull()函数)
import numpy as npimport cv2 as cvimg=np.zeros((400,410),np.uint8)points=np.random.randint(100,400,( ...
- TP5.0使用助手函数model出现\common\Model\类不存在
在ThinkPHP5.0中有一个助手助手函数model(),可以实例化具体的模型,包括分层模型,只要传入类名(第一个参数),分层名(第二个参数).这个函数其实是ThinkPHP框架Loader中的一个 ...