stm32如何判断是否有堆栈溢出 (如何查看stm32堆栈溢出)

发现问题:

在近期参与的一个项目开发中,笔者遇到了一个比较头疼的问题。每当准备调用到一个函数时,程序就会出现直接跑飞的现象。

进入Debug查看,也看不出有什么逻辑性的错误出现。但是笔者发现,函数内局部变量进行声明之后,整个全局变量的值会被全部清零。

stm32怎么查堆栈溢出,如何查看stm32的堆栈溢出的情况

后来笔者对局部变量地址进行查看,发现局部变量地址已经超出栈的范围。以此可以确定,是栈溢出了。

因此我们需要对栈进行粗略的了解,否则在项目开发过程中可能会遇到很多奇奇怪怪的错误。

stm32怎么查堆栈溢出,如何查看stm32的堆栈溢出的情况

什么是栈?

在计算机的系统之中,栈既是数据存放方式,也是代码运行方式,同时,它也是内存区域。栈空间一般用于局部变量。

堆空间主要用于动态内存的分配。栈在程序的运行中,有着非常重要的地位。因为栈中保存了一个函数调用时所需要的各种维护信息。

stm32怎么查堆栈溢出,如何查看stm32的堆栈溢出的情况

问题解决:

当发现STM32堆栈溢出时,我们可以这样操作来解决:

STM32堆栈定义在启动文件中定义,默认是1K(0x00000400)

堆:存放全局变量的一些参数。

栈:存放局部变量以及一些参数返回值。如果定义栈空间1K,申请的局部变量不能大于1024Byte.若大于1024,则程序会出现意料不到的错误以至于崩溃。因此若想申请大内存,则需要更改stack的值。

堆在STM32中,若没有使用到malloc,则堆是没有用到的。

Yunxion研发的A46资产监控终端,基于无线传感器技术,研发了货护卫智能资产跟踪监测设备。可以用于不同资产设备的监控和管理。可以对资产从在仓库,到运输到交付的全部状态进行检测,成本低廉,易于操作。