当前位置: 首页 > 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 

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


http://www.mrgr.cn/news/15023.html

相关文章:

  • TCP、HTTP以及RPC的梳理
  • Linux基础1-基本指令6(grep,zip,tar,查看系统等命令)
  • uniapp uni-popup底部弹框留白 底部颜色修改 滚动穿刺
  • 【原型设计工具评测】Axure、Figma、Sketch三强争霸
  • 【Java 数据结构】HashMap和HashSet介绍
  • 深入理解 XSS 漏洞:原理、危害与防范
  • LeetCode 热题100-63 搜索插入位置
  • RabbitMQ 集群与高可用性
  • Golang | Leetcode Golang题解之第384题打乱数组
  • Bootstrap 滚动监听(Scrollspy)插件
  • 大模型技术 | 基于 Langchain 和 Streamlit,构建多 PDF RAG 聊天机器人
  • 红蓝对抗,你懂得多少?
  • 铭江酒趣乐园小程序
  • Linux学习(13)计算机网络基础概论
  • 深度学习实用方法 - 调试策略篇
  • MATLAB学习笔记4
  • 构建高可用的微服务架构:Spring Cloud Consul与负载均衡
  • 嵌入式数据库
  • 根据两个位置的经纬度,计算其距离和方位
  • 重新配置和安装一个 Docker Compose 项目中的特定容器