嵌入式开发:创建堆栈监视器的7个步骤

  在嵌入式系统中寻找最痛苦的错误之一是堆栈溢出其边界并开始覆盖附近的内存区域。堆栈溢出的症状通常在发生完美的中断和函数调用风暴时随机出现,这导致它们难以检测。为了通过使用堆栈监视器来防止堆栈溢出,嵌入式开发人员可以采取七个步骤来确保堆栈保留在其分配的内存区域中。

  步骤 1 – 执行最坏情况堆栈分析

  许多编译器和工具链会自动将堆栈大小设置为 0x400 字节,相当于一千字节的 RAM。对于许多应用程序来说,一千字节的堆栈大小通常就足够了,但这是计算机科学而不是猜谜游戏,那么工程师如何确保堆栈大小合适呢?答案是执行最坏情况堆栈分析。

  最坏情况堆栈分析可以通过许多不同的方式执行,超出了本文的范围。一般来说,开发人员有许多项目需要完全理解。首先,有必要了解其应用程序的调用深度;有多少函数正在调用在返回链之前调用函数的函数。每个返回地址都存储在堆栈中。其次,开发人员需要了解这些函数中每个变量的数量和大小,以估计每个函数将使用多少堆栈空间。最后,嵌入式开发人员需要确定可以同时触发多少个中断以及每个中断帧的大小。

  步骤 2 – 设置堆栈大小

  最坏情况堆栈分析的输出将导致堆栈的大小。尽管对系统进行了仔细分析,但计算堆栈大小可能很困难且很难做到,将最终数字乘以 1.5 并没有什么坏处,只是为了确保包含一个合理的缓冲区以应对不可预见的情况。然后可以通过项目属性或链接器文件更改堆栈大小,具体取决于首选项和工具功能。

  步骤 3 – 选择一种保护方法

  正确调整堆栈大小是防止堆栈溢出和破坏附近内存区域的良好进展,但它仍然不允许检测此类溢出事件。在嵌入式系统中,有多种方法可以检测到此类事件。首先,是使用内存保护单元并设置堆栈的边界,以便如果堆栈越过边界,则会触发中断,然后系统可以记录问题并按照程序恢复系统。其次,如果正在使用 RTOS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值