解决方法:STM32使用cJSON解析数据失败

发布者:MysticEssence最新更新时间:2025-01-08 来源: jianshu关键字:STM32 手机看文章 扫描二维码
随时随地手机看文章

一、问题

在 STM32 移植 cJSON 库后,使用 cJSON_Parse(),解析失败。

char cmd[512] = '{'msg':'this is successful start up','result':1,'action':'req_startUp','responseData':'trustedDevice','serial_no':'0341','timestamp':1656489886238}';


cJSON *pRoot = cJSON_Parse(cmd);

const char *error_ptr = cJSON_GetErrorPtr();

if (error_ptr != NULL)

{

    printf('Error before: %sn', error_ptr);

}


使用 cJSON_GetErrorPtr() 分析出以下错误:

Error before: ,'timestamp':1656489886238}


而当去掉 serial_no 字段后,则能够解析成功。


char cmd[512] = '{'msg':'this is successful start up','result':1,'action':'req_startUp','responseData':'trustedDevice','timestamp':1656489886238}';出处。


二、原因

当解析的的数据比较长时,会解析失败,但是短的数据则没有问题,后面排查是因为 cJSON 解析需要用到的内存比较大,溢出导致解析失败。

查看 STM32 启动文件。如 startup_stm32f407xx.s,发现:


  • 栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。

  • 堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。

注意:记得要 cJSON_Delete 删除对象,还有 cJSON_Print 会一直不停申请内存,所有调用完之后一定要 free 释放,否则多次调用后一样会内存溢出。导致后面的 cJSON_Print 会申请不到内存。

三、解决方法

增大空间后,问题解决



关键字:STM32 引用地址:解决方法:STM32使用cJSON解析数据失败

上一篇:STM32电源框图解析(VDD、VSS、VDDA、VSSA、VREF+、VREF-、VBAT等的区别)
下一篇:Arduino IDE下用STM32点亮OLED屏幕

推荐阅读最新更新时间:2026-03-25 08:43

cJson移植到STM32系统
一、下载cJson文件 实际只包含了cJSON.C,cJson.h,cJson_utils.c,cJson_utils.h 二、添加到工程 三、修改代码: 在cJson_utils.c中增加 点击(此处)折叠或打开 char * strdup(const char *s) { size_t len = strlen(s) +1; void *new = malloc(len); if (new == NULL) return NULL; return (char *)strncpy(new,s,len); } 四、测试在main.c中增加 点击(此处)折叠或打开
[单片机]
<font color='red'>cJson</font>移植到<font color='red'>STM32</font>系统
使用STM32解析Rd-03E的串口数据
前言 安信可新款雷达模组Rd-03E已经上市,该雷达采用高性能一发一收微带天线,包含极简化24GHz雷达传感器硬件Rd-03E和智能算法固件RM01,而智能算法固件RM01采用FMCW波形和S3系列芯片专有的先进信号处理技术,可以实现精准的人体测距和运动/微动人体感应。 本应用示例使用STM32解析Rd-03E的串口数据,检测人体距离雷达的距离,根据距离不同来点亮不同的灯珠,0~2米内点亮 LED1,2~4米内点亮 LED2,4~6米内点亮 LED3。 01Rd-03E引脚说明 J2引脚说明: J3引脚说明: 02软件设计框架 03STM32F103C8T6使用CubeMX搭配HAL库配置 打开CubeMX,选
[单片机]
使用<font color='red'>STM32</font><font color='red'>解析</font>Rd-03E的串口<font color='red'>数据</font>
STM32 SPI 收发数据 ---规则 + 问题解析
规则: 1) 高速同步串行口。3~4线接口(CS ,CLK ,MOSI,MISO),收发独立、可同步进行。 2)SPI分为主从模式,主模式提供时钟和片选选择信号. 3) 模式控制:CPOL用来控制时钟信号(clk)在空闲时候的状态;CPHA用来控制采样时刻时CLK的边缘动作。 CPOL CPHA 模式: 0 0 CLK空闲时为低电平,CLK上升沿采样数据。 0 1 CLK空闲为低电平,CLK下降沿采样数据。 1 0 CLK空闲时为高电平,CLK上升沿采样数据。 1 1 CLK空闲时为高电平,CLK下降沿采样数据。 1)SPI配置(3.01库): SPI_InitStructure.SPI_Direction = SPI_D
[单片机]
基于8051单片机的外部设备交换信息的三种数据传输方式解析
单片机CPU与外部设备交换信息通常有如下几种方式:无条件传送方式,查询传送方式和中断传送方式。我们以单片机与微型打印机接口为例讲述这三种方式。假定用户要打印三个数据,这三个数据保存在单片机的内部数据存储器10H,11H,和12H中,8051用并口P2与微型打印机的并行数据口DB进行数据交换。 (1)无条件传送方式 这种数据传送方式中没有联络信号,即CPU总是认为打印机在如何时候都是处于“准备好”的状态。这种传送方式中只需要在程序中加入数据送往P2的指令,数据传送便可以实现。但这种数据传送方式有一个致命弱点,数据易丢失,这是因为CPU的速度相当快,而打印机的速度相对来说较慢,其结果是在打印机打印一个数据的时间内,CPU已送来了多
[单片机]
基于8051单片机的外部设备交换信息的三种<font color='red'>数据</font>传输方式<font color='red'>解析</font>
#C51串口通讯4-#一串数据#中断即时解析用户自定义协议(握手接收应答)
前言 提示: 1.上一章测试一种方法:简单协议下利用串口中断实时接收数据并校验后进行解析。 2.实际项目开发时,主机下发命令后,从机首先进行握手确认,数据错误情况下要进行相应回应(如错误指令)。 3.本章继续丰富开发,增加主从应答机制 提示:以下是本篇文章正文内容,下面案例可供参考 一、场景 示例: 主机下发命令,从机中断解析并应答,主函数处理事件 二、编程实现 1.自定义协议 如: ##主机类型定义命令类型(查询,设置,器件控制等等) 以控制数码管显示0x01为例 ##从机握手应答: a.数据正确回复:BB66BB8000 b.和校验错误回复:BB66BB8100 c.异或校验错误回复:BB66BB820
[单片机]
#C51串口通讯4-#一串<font color='red'>数据</font>#中断即时<font color='red'>解析</font>用户自定义协议(握手接收应答)
如何解析示波器远程指令回传数据
正确的去除回传数据前缀来解析示波器数据块 以 是德科技 InfiniiVision 示波器为例,通过指令回传长数据块的数据时,会有固定的语法或格式。 在解析数据时,需要将数据包里一些前缀说明信息去除掉后再做解析获得正确的显示结果。 格式结构如下图: 例如,回传1000个字节的数据,语法格式如下: #800001000 1000 bytes of data 1000个字节数据 NL “#”代表固定的字符 “8”代表紧跟前缀信息所占的字符位数 “00001000”代表回传数据的字节长度 1000个字节数据 代表具体的数据内容 NL 代表换行符 影响的指令包括: :SYSTem:SETup? 回读示波器配置信息
[测试测量]
模拟量数据的采集过程解析
单片机的ADC接口属于模数转换接口,将外部的模拟量信号转化为数字信号,单片机属于数字器件,需将模拟信号转化为数字信号才能够为单片机处理。目前市场的很多单片机都自带ADC转换接口,若无ADC转换接口,可以使用ADC数模转换芯片外扩。 ADC模块是将模拟信号转化位数字信号,数字信号用0和1表示,ADC模块有参考电压,假设给的参考电压是5V,ADC是12位的(几位表示用二进制几位数存储模拟量转化后的数字量,12位的ADC则可储存数字量范围为:(二进制)000000000000~111111111111,转换为十进制数字范围为0~2^12即0~4095。 也就是说把参考电压分为2^12份即4096份,最小分辨率为VREF/4096
[单片机]
模拟量<font color='red'>数据</font>的采集过程<font color='red'>解析</font>
“军事”解析:飞机数据总线的构成及特性分析
科技的腾飞不仅使电子技术飞速向前,也同样带动了航空电子的长足进步。经过了数年的改进,飞机数据总线实现了规范化。本文为你解析数据总线的构成和特性详解。  总线的构成 一旦设计者确定了基本的飞电系统结构后,最重要的就是总线布局了,它对系统性能具有重要影响。总线可以是单向的,也可以是双向的。最常用的单向总线设计的依据是“ARINC429规范MARK33数字式信息传输系统”。双向总线布局基本上有三种形式:线性、网状、星形。通常根据“MIL-STD-1553B飞机内部时分制指令/响应式多路传输数据总线”规定,总线要有一个中央总线 控制器 。线性的双向总线布局设计最常用。 设计时,要注意采用特别的预防措施,否则容易产生单点失效(可运用故
[嵌入式]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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