使用MDK观察单片机堆栈使用情况

单片机的堆栈空间分配在.s文件中,如下:

Stack_Size      EQU     0x00000400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


; Heap Configuration
;    Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;

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对应栈空间数值,然后全速运行,并测试完所有分支后,观察被更改的默认数值有多少

 

你可能感兴趣的:(工作总结)