Keil 调试之堆栈溢出调查

在嵌入式多任务系统开发中,堆栈溢出问题可能随机出现,通过Keil的数据断点功能能有效定位问题。本文介绍了如何设置数据断点来跟踪堆栈溢出:1) 获取栈底地址,可通过.map文件或任务创建时获取;2) 对堆栈地址设置数据写入断点;3) 根据系统情况设置Count值;4) 当堆栈溢出时,程序会暂停,从而找到溢出源。
摘要由CSDN通过智能技术生成

在进行嵌入式多任务系统软件开发,可能会出现堆栈溢出的问题,并且该问题可能是随机出现,因此调查较麻烦。借助keil 的数据断点功能,可以轻松找到产生堆栈溢出的位置。

在程序调试时,常规使用的断点是程序断点,本文提到的则是一种数据断点。以下将列出具体的调试方法。

1、任务的堆栈溢出一般是栈底溢出,在编译完成之后。如果堆栈通过固定地址分配,则通过查询keil 生成的.map获取栈底地址;否则需要在任务创建过程中分配的堆栈时获取栈底地址,将堆栈地址变量“pxNewTCB->pxStack”添加到变量监视区。

2、在获取到堆栈地址之后,在该变量上单击右键选择“数据访问断点”

3、在弹出的对话框中,选中“Write”选项,根据需要设置Count的值。如果stack堆栈在系统初始化时有初始化过程,则需要将该值Count值设置为2,否则一般设置为1即可以捕获程序意外设置该堆栈的位置。

  • 0
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值