当前位置: 首页 > news >正文

单片机使用cJSON的坑

文章目录

  • 问题
  • 解决办法
    • 方法一
    • 方法二

问题

单片机USAR串口通信我想用json,
我不想用 分隔符的方式。感觉性能够,还有就是方便理解。

mcu型号 : AT32F415系列
雅特力的。
cJSON库: https://github.com/DaveGamble/cJSON/tree/master
只要把 cJSON.h 和 cJSON.c文件复制到项目中就能用了。
但是呢,会遇到问题:

	char* str4;cjson_test1 = cJSON_CreateObject();cJSON_AddStringToObject(cjson_test1, "jeckxu666", "test_code");cJSON_AddStringToObject(cjson_test1, "time", "2024-8-25");cJSON_AddNumberToObject(cjson_test1, "num", 666);str4 = cJSON_Print(cjson_test1);printf("cJSON_Print: %s \r\n", str4);

在这里插入图片描述
结果就是只输出了一个字符。查到的原因据说是内存不足。
有两个解决办法:

解决办法

方法一

修改 堆栈区,将启动的汇编文件 startup_at32f415.s 里面的堆栈值改大一点。
在这里插入图片描述
数字前面改成1 ,一般就好了
Stack_Size EQU 0x00001400
Heap_Size EQU 0x00001200

我的建议是 不建议这么做,因为修改这个文件,这个文件是官方提供的。别人拿你的文件不太敢用。

方法二

换函数

 	const char* strVersion;char* str3;char* str4;char *str5;char outputBuffer[1024];cjson_test1 = NULL;cjson_test2 = NULL;cjson_test1 = cJSON_CreateObject();cJSON_AddStringToObject(cjson_test1, "jeckxu666", "test_code");cJSON_AddStringToObject(cjson_test1, "time", "2022-2-25");cJSON_AddNumberToObject(cjson_test1, "num", 666);str4 = cJSON_Print(cjson_test1);strVersion = cJSON_Version();//printf("cJSON_Print: %s \r\n", str4);// if(cJSON_PrintPreallocated(cjson_test1, outputBuffer, 1000, 1))//       printf("cJSON_PrintPreallocated(): \n%s\n", outputBuffer);str5 = cJSON_PrintBuffered(cjson_test1,(int)sizeof(cjson_test1) + 5,1);printf("%s \r\n",str5);

cJSON_PrintPreallocated
或者
cJSON_PrintBuffered 

在这里插入图片描述
然后就正常了

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring的bean的生命周期
  • 深度学习100问6-什么是向量降维
  • 游戏开发设计模式之命令模式
  • Mysql语句性能优化
  • 中国数据库的崛起:从本土化挑战到全球化机遇
  • PCIE-Precode
  • 双系统安装:一键解锁电脑新境界,Windows与Linux并肩作战!
  • 华为自研仓颉编程语言测试版上线,计划持续到10月21号
  • 【操作系统】11.什么是文件?
  • 在SpringBoot项目中如何集成eureka
  • CPP中lamada表达式作用一览[more cpp-6]
  • Junit单元测试笔记
  • 继承的初始化顺序
  • 解析Java中1000个常用类:ServiceLoader类,你学会了吗?
  • SpringBoot工厂模式
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • ➹使用webpack配置多页面应用(MPA)
  • 07.Android之多媒体问题
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • codis proxy处理流程
  • Cookie 在前端中的实践
  • Java教程_软件开发基础
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • mysql外键的使用
  • nfs客户端进程变D,延伸linux的lock
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 七牛云假注销小指南
  • 让你的分享飞起来——极光推出社会化分享组件
  • 使用 Docker 部署 Spring Boot项目
  • 使用SAX解析XML
  • 详解NodeJs流之一
  • 协程
  • 学习HTTP相关知识笔记
  • 在Mac OS X上安装 Ruby运行环境
  • nb
  • UI设计初学者应该如何入门?
  • 国内开源镜像站点
  • 交换综合实验一
  • #HarmonyOS:Web组件的使用
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (PADS学习)第二章:原理图绘制 第一部分
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (附源码)springboot教学评价 毕业设计 641310
  • (蓝桥杯每日一题)love
  • (推荐)叮当——中文语音对话机器人
  • (轉貼) UML中文FAQ (OO) (UML)
  • .bat批处理(一):@echo off
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET 8.0 中有哪些新的变化?
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布