登录/注册

cjson stm32

更多

在STM32嵌入式开发中使用cJSON库解析和生成JSON数据,可以按照以下步骤进行:

  1. 获取cJSON库

    • 从GitHub克隆官方仓库:git clone https://github.com/DaveGamble/cJSON
    • 或直接下载源码包,主要需要cJSON.c和cJSON.h两个文件
  2. 工程集成

    ├── Core/
    ├── Drivers/
    ├── cJSON/
    │   ├── cJSON.h
    │   └── cJSON.c
    └── YourProject.ioc
  3. 内存管理适配(关键步骤)

    
    // 重定义内存管理函数(使用STM32的静态内存池)
    static uint8_t jsonPool[4096];
    static size_t jsonPoolPtr = 0;

void cjson_malloc(size_t size) { if(jsonPoolPtr + size > sizeof(jsonPool)) return NULL; void ptr = &jsonPool[jsonPoolPtr]; jsonPoolPtr += size; return ptr; }

void cjson_free(void* ptr) { // 静态内存池无需释放 }

// 在main()初始化 cJSON_Hooks hooks = {cjson_malloc, cjson_free}; cJSON_InitHooks(&hooks);


4. **基础使用示例**
```c
// 创建JSON对象
cJSON *root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "device", "STM32F407");
cJSON_AddNumberToObject(root, "temp", 25.6);

// 序列化JSON
char *json_str = cJSON_PrintUnformatted(root);
uart_send(json_str); // 通过串口发送

// 解析JSON
cJSON *root = cJSON_Parse(received_data);
cJSON *cmd = cJSON_GetObjectItem(root, "command");
if(cmd && cJSON_IsString(cmd)) {
    handle_command(cmd->valuestring);
}
  1. 性能优化技巧

    • 禁用浮点解析(节省4KB代码空间):
      #define CJSON_DISABLE_FLOATING_POINT 1
    • 使用局部缓冲区代替动态分配:
      char buffer[256];
      cJSON_PrintPreallocated(root, buffer, sizeof(buffer), 0);
  2. 常见问题处理

    • 内存不足时返回NULL:检查jsonPool大小和内存对齐
    • 解析失败时检查错误指针:
      const char *error_ptr = cJSON_GetErrorPtr();
      if(error_ptr) {
      printf("Error before: %s\n", error_ptr);
      }
    • 浮点精度控制:修改cJSON_PrintPreallocated中的%g格式说明符

建议结合FreeRTOS使用时,为JSON操作单独创建低优先级任务,并通过消息队列传递数据。对于需要加密传输的场景,可以在序列化后添加AES或Base64编码处理。

【NCS随笔】NCS使用CJSON

【NCS随笔】NCS使用CJSON库 这个文章讲一下在NCS上面如何使用JSON库,我使用Hello_world例程添加库 宏的配置 CONFIG_LOG =y

2025-08-13 15:12:40

RT-Thread使用cjson软件包发送64位长整型数据

开发环境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的资源包为0.2.2,rt-thread版本为4.1.1,

2023-10-11 15:09:40

单片机如果不用cJSON库会怎样呢

/*处理网络数据的时候往往需要用到JSON数据格式,单片机如果不用cJSON库,处理起来会非常吃力以下程序与注释讲解了cJSON在STM32F1

2022-02-21 07:31:49

cJSON-plus cJSON的功能扩展库

./oschina_soft/gitee-cJSON-plus.zip

资料下载 王敏 2022-06-17 09:54:16

STM32f10x官方固件库资料

STM32f10x官方固件库资料

资料下载 Kafen 2022-01-25 09:58:43

CJSON之完全基于C库函数的使用

最近由于需要两个单片机之间的数据传输,所以了解到了Cjson。1.JSON简介JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它

资料下载 王尚岱 2022-01-13 14:36:39

STM32F103C8T6移植cJSON解析JSON数据包

/*处理网络数据的时候往往需要用到JSON数据格式,单片机如果不用cJSON库,处理起来会非常吃力以下程序与注释讲解了cJSON在STM32F1

资料下载 王敏 2021-12-27 18:29:30

STM32】MDK环境下移植cJSON

【STM32】MDK环境下移植cJSON前言测试平台注意事项前言由于工作需要,需要在STM32上使用Json,所以把一个JSON库移植到了

资料下载 学电超人 2021-11-21 18:06:03

cJSON移植到STM32的方法

项目中用到JSON接收网络数据,具体是STM32串口接收JSON数据,提取需要的内容。本来KEIL MDK是自带JSON的,但是我不习惯使用KEIL自带的那些第三方的东西,很杂乱的感觉。cJSON

2022-01-11 06:35:35

STM32上使用cJson或Jansson创建object

在STM32上使用cJson或Jansson创建object,添加的子object太多时会创建失败,比如生产的字符串总长度为770字节,此时需要修改startup_

2022-01-11 06:25:24

cJSON如何移植到STM32

cJSON如何移植到STM32?

2021-12-02 06:57:20

MDK环境下移植cJSON

【STM32】MDK环境下移植cJSON前言测试平台注意事项前言由于工作需要,需要在STM32上使用Json,所以把一个JSON库移植到了

2021-11-30 07:07:36

环境控制器STM32F407+MDK5.34+cJSON

一、环境控制器STM32F407+MDK5.34+cJSON1.7.7二、安装cJSONMDK中打开Pack Install,选择Generic下边MDK-Pack::cJSON,点击安装

2021-08-24 08:16:38

cjson结构体分析

一、cjson结构体:typedef struct cJSON { struct cJSON*next,*prev;/* 遍历数组或对象链的前向

2021-08-24 07:54:45

stm32使用cjson

stm32使用cjson,在使用Cjson 这个开源的C库时,一切进行的很顺利,但在打包输出一个json 格式的字符串时碰到了坑:用函数

2021-08-09 07:54:49
7天热门专题 换一换
相关标签