单片机的堆栈空间分配在.s文件中,如下:
Stack_Size EQU 0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x00000200
一般不使用malloc/free分配内存时,不涉及堆操作。
而使用多层函数嵌套,或者进出中断,则需要栈空间。
但是MDK并不支持具体的栈空间使用率查看,查找MDK用户手册,发现可以以以下方法评估栈空间使用情况:
(1)link中加入--info stack
生产的.map文件中会出现以下内容:
Image Stack Usage Information.
Maximum stack usage for Image.
Maximum Stack Usage for __rt_entry_main 0x300 bytes.
此处的数值可以作为参考,为了保险起见,设置值应该大于此值
(2)持续跟踪SP指针地址,观察是否出现了SP越界,超过了最大的栈空间
(3)更改RAM对应栈空间数值,然后全速运行,并测试完所有分支后,观察被更改的默认数值有多少