WHCSRL 技术网

The reason why STM32 project fails to parse data using cjson library

最近的项目使用了 cjson 库来解析数据。当解析的数据比较长的时候,解析会失败,但是短的数据不会有问题。下面排查是因为cjson解析需要的内存比较大,溢出了。导致分析失败。

在默认的stm32 keil项目中,可以在启动文件中看到heap和stack的大小

Stack_Size EQU 0x00000400

Heap_Size EQU 0x00000200

最后贴出从网上复制的STM32堆栈的说明。

(1)栈区(stack):由编译器自动分配和释放,存放函数参数值、局部变量值等,操作方法类似。

数据结构中的栈。

(2) Heap:一般由程序员分配和释放。如果程序员不释放它,它可能会在程序结束时被操作系统回收。分配方式类似于数据结构中的链表。

另外,cJSON_Delete 必须在程序结束时删除对象。

另外,cJSON_Print还会继续申请内存,并且必须在所有调用后自由释放,否则多次调用后内存会溢出。结果,下面的cJSON_Print将无法申请内存

最后附上修改方法

打开启动文件并修改。这是我修改后的版本。修改cjson后,就可以解析长数据了。

推荐阅读