单片机使用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 

然后就正常了

相关推荐
Peter_Deng.29 分钟前
单片机 - STM32读取GPIO某一位时为什么不能直接与1判断为高电平?
stm32·单片机·嵌入式硬件
物联网嵌入式小冉学长1 天前
10.C S编程错误分析
c语言·stm32·单片机·算法·嵌入式
蝈蝈(GuoGuo)2 天前
STM32103CBT6显示ST7789通过SPI方式显示柬埔寨文
stm32·单片机·嵌入式硬件
大鼻噶喳2 天前
使用VSCode开发MCU,FreeRTOS进Hard_Fault调试
vscode·单片机
我命由我123452 天前
嵌入式 STM32 开发问题:烧录 STM32CubeMX 创建的 Keil 程序没有反应
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·嵌入式
vicorv252 天前
电流传感器在汽车中的应用:从BMS电池管理到电机控制的工程解析
stm32·单片机·嵌入式硬件
Archer-3 天前
解决STM32H7系列串口DMA发送一次卡死
stm32·单片机·嵌入式硬件
通信.萌新3 天前
【stm32f4】ADC实验(stm32hal库)
stm32·单片机·嵌入式硬件
Mr-Apple3 天前
使用STM32设置GPIO中断
stm32·单片机·嵌入式硬件
嵌入式仿真实验教学平台3 天前
深入探索IIC-OLED显示技术:嵌入式仿真平台如何重塑高校教学范式——深圳航天科技创新研究院技术赋能新一代工程教育
科技·单片机·gd32·嵌入式仿真·iic-oled显示技术