发现问题:
在近期参与的一个项目开发中,笔者遇到了一个比较头疼的问题。每当准备调用到一个函数时,程序就会出现直接跑飞的现象。
进入Debug查看,也看不出有什么逻辑性的错误出现。但是笔者发现,函数内局部变量进行声明之后,整个全局变量的值会被全部清零。

后来笔者对局部变量地址进行查看,发现局部变量地址已经超出栈的范围。以此可以确定,是栈溢出了。
因此我们需要对栈进行粗略的了解,否则在项目开发过程中可能会遇到很多奇奇怪怪的错误。

什么是栈?
在计算机的系统之中,栈既是数据存放方式,也是代码运行方式,同时,它也是内存区域。栈空间一般用于局部变量。
堆空间主要用于动态内存的分配。栈在程序的运行中,有着非常重要的地位。因为栈中保存了一个函数调用时所需要的各种维护信息。

问题解决:
当发现STM32堆栈溢出时,我们可以这样操作来解决:
STM32堆栈定义在启动文件中定义,默认是1K(0x00000400)
堆:存放全局变量的一些参数。
栈:存放局部变量以及一些参数返回值。如果定义栈空间1K,申请的局部变量不能大于1024Byte.若大于1024,则程序会出现意料不到的错误以至于崩溃。因此若想申请大内存,则需要更改stack的值。
堆在STM32中,若没有使用到malloc,则堆是没有用到的。
Yunxion研发的A46资产监控终端,基于无线传感器技术,研发了货护卫智能资产跟踪监测设备。可以用于不同资产设备的监控和管理。可以对资产从在仓库,到运输到交付的全部状态进行检测,成本低廉,易于操作。