引用:STM32栈stack 堆栈 注意事项 Stack_Size EQU 0x00000400
1.定义了几个结构体,其中每个机构体都有二维数组,并且二维数组非常大,例如a[5][3300]。
2.发现结构体不能malloc及初始化。
3.查找网上资料发现,Heap_Size 太小了。
4.看GD32启动文件,startup_gd32f10x_hd.s
5.默认,Stack_Size EQU 0x000002000和Heap_Size EQU 0x00002000
工程中栈(0x2000/0x400)*1024字节,局部变量不能超过8k。堆(0x2000/0x400)*1024字节,全局变量不能超过8k。为什么0x400是1Kb,0x400 = 1024(10进制)。
6.后来修改了启动文件里,堆栈大小
后注:这样设置也行
7.结构才能分配空间。
8.
Code:表示程序所占用 FLASH 的大小(FLASH)。
RO-data:即 Read Only-data, 表示程序定义的常量,如 const 类型(FLASH)。
RW-data:即 Read Write-data, 表示已被初始化的全局变量(SRAM)
ZI-data:即 Zero Init-data, 表示未被初始化的全局变量(SRAM)
有了这个就可以知道你当前使用的 flash 和 sram 大小了, 所以,一定要注意的是程序的大小不是.hex 文件的大小,而是编译后的 Code 和 RO-data 之和。
9.我是用的是GD32F101RCT6,SRAM32K
10.查看工程map文件