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

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

 

Keil uVision 5是一个广泛用于开发8位和32位嵌入式系统的集成开发环境(IDE),对于AT89C51这样的51单片机,它提供了全面的支持。在使用Keil5进行AT89C51相关的项目设置时,您需要完成以下几个步骤: 1. **安装Keil MDK (μVision) for 8051**:确保你已经安装了Keil MDK版本5,针对8051系列的版本。 2. **创建新工程**:启动Keil5,点击"File" -> "New" -> "Project",选择"8051 Family"模板。 3. **选择芯片类型**:在创建工程界面,选择"Device"选项,找到并选择"AT89C51"或类似型号。 4. **配置工具链**:在"C Compiler"部分,确保"Toolchain"选择的是支持8051的工具链,如Keil C51或 iar EWARM。 5. **设置代码存储器**:在"Memory Configuration",分配适当的内存空间给程序、数据和堆栈。AT89C51有外部RAM,可能还需要配置外部断矢量地址等。 6. **添加源文件**:点击"Add Source File",将你的C或汇编源代码添加到工程。 7. **配置调试器**:如果打算使用调试功能,配置调试器设置,如选择"ST-Link"或"ISP"等调试器。 8. **编译和下载**:完成设置后,编译工程以生成可执行文件。在"Project"菜单选择"Build",然后选择"Download"选项将程序烧录到AT89C51单片机上。 **相关问题--:** 1. Keil5支持哪些类型的8051设备? 2. 如何在Keil5检查和更改调试器配置? 3. 如果在编译过程遇到错误,如何排查是工具链还是代码问题?
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值