单片机模块化程序: 单片机加入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(数据存储-内存). ...
随机推荐
- Java基础扫盲系列(二)—— Java中BigDecimal和浮点类型
一直以来我几乎未使用过BigDecimal类型,只有在DB中涉及到金额字段时听说要用Decimal类型,但是今天再项目代码中看到使用BigDecimal表示贷款金额. 本篇文章不是介绍BigDecim ...
- Spring Boot 整合 MyBatis 实现乐观锁和悲观锁
本文以转账操作为例,实现并测试乐观锁和悲观锁. 完整代码:https://github.com/imcloudfloating/Lock_Demo GitHub Page:http://blog.cl ...
- spring整合MyBatis思路
目录 整合目标 需要的jar 整合思路 加入配置文件 整合目标 控制层采用springMVC.持久层使用mybatis实现. 需要的jar spring(包括springmvc) mybatis my ...
- 【转载】C#通过Clone方法快速创建相同架构的DataTable
在C#中的Datatable数据变量的操作过程中,如果需要克隆当前DataTable变量的结构,包括所有 DataTable 架构和约束等信息,可以使用DataTable中的Clone方法来实现,Cl ...
- CORS-跨域资源共享 解决跨域问题
1.什么是跨域? a.test.com 和 b.test.com 是两个不同的域,而处于安全机制考虑,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容,但是我们在项目开发时,经常遇到一个页 ...
- jQuery绑定事件的四种方式:bind、live、delegate、on
1.jQuery操作DOM元素的绑定事件的四种方式 jQuery中提供了四种事件监听方式,分别是bind.live.delegate.on,对应的解除监听的函数分别是unbind.die.undele ...
- vim巧妙用法
1. 块复制 按ctrl+v键,编辑框最下方将出现"可视 块"字样 使用方向键移动光标,选择矩形区域内的文字 y 键复制文本: d 键剪切文本:p 键粘贴文本 按shift+v键, ...
- CRM ORDER SEARCH增强查询条件(已有字段)
ORDER_H表增强的两个字段,很早了,非AET,非EEWB,所以也加不到标准的搜索界面. GENIL_MODEL_BROWSER找到对应的查询和结果结构,append进字段:ZZZBRAND. 然后 ...
- C#语法一些简化备忘
有些传统的写法,可以简写,之前没留意到,现在才注意到 IDE0031: Null check can be simplified entity.Unit = entity.Unit == null ? ...
- MySQL Table--独立表空间
数据库表空间 独立表空间 在MySQL 5.6 中引入独立表空间的概念,启用独立表空间后,每个表将生成独立的文件来进行存储. 创建表时可以指定表存放的文件路径 ##首选需要确保innodb_file_ ...