单片机使用cJSON的坑

文章目录

问题

单片机USAR串口通信我想用json,

我不想用 分隔符的方式。感觉性能够,还有就是方便理解。

mcu型号 : AT32F415系列

雅特力的。

cJSON库: https://github.com/DaveGamble/cJSON/tree/master

只要把 cJSON.h 和 cJSON.c文件复制到项目中就能用了。

但是呢,会遇到问题:

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

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

方法二

换函数

c 复制代码
 	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);

c 复制代码
cJSON_PrintPreallocated
或者
cJSON_PrintBuffered 

然后就正常了

相关推荐
Bona Sun几秒前
单片机手搓掌上游戏机(二十)—pico运行doom之编译环境
c语言·c++·单片机·游戏机
编码追梦人3 小时前
基于 ESP32 的多人无线答题竞赛系统设计与实现
单片机·嵌入式硬件
yyycqupt4 小时前
蓝牙协议栈的学习(二)
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·iot
ℳ๓. Sweet7 小时前
【从零开发STM32(HAL版)】一、开发硬件环境准备
stm32·单片机·嵌入式硬件
ACP广源盛139246256737 小时前
GSV2202D@ACP#DisplayPort 1.4 到 HDMI 2.0 转换器(带嵌入式 MCU)
单片机·嵌入式硬件·计算机外设·音视频
梓德原8 小时前
【总结】STM32 SPI DMA 的使用
stm32·单片机·嵌入式硬件
@good_good_study8 小时前
STM32 TIM+ADC实验
stm32·单片机
hazy1k9 小时前
MSPM0L1306 从零到入门:第六章 UART —— 让单片机与世界“对话”
stm32·单片机·嵌入式硬件·物联网·51单片机·esp32·iot
qq_73917536910 小时前
开源基于STC8的智能浇花与温湿度报警系统
c语言·stm32·单片机·嵌入式硬件
清月电子10 小时前
充电宝新规适配方案:KT6368A 蓝牙芯片应用技术说明
人工智能·单片机·嵌入式硬件·物联网