您的位置 首页 方案

关于STM32局部变量问题 数组过大,栈溢出了怎么办

关于STM32局部变量问题 数组过大,栈溢出了怎么办-当在一个函数中声明一个较大的局部 数组 变量时,程序可以编译通过,但运行时,老是进入hardfaulthandler,导致出现改问题的原因可能是栈溢出。因为 局部变量 是存放在栈区的,而全局变量在全局区(静态区),如果栈区较小,会产生溢出。 解决这种问题的方法: 方法1:启动文件里面对栈的大小有固定的值。

当在一个函数中声明一个较大的部分数组变量时,程序能够编译经过,但运行时,老是进入hardfaulthandler,导致呈现改问题的原因或许是栈溢出。由于部分变量是寄存在栈区的,而大局变量在大局区(静态区),假如栈区较小,会发生溢出。

处理这种问题的办法:

办法1:发动文件里边临栈的巨细有固定的值。函数里边的数组是在调用该函数的时分,才给你分配空间。将发动文件下的仓库改大

Stack_Size EQU 0x00000400 。

Stack Size,一般小工程0X400满足,大工程才设置0X1000就够用,所以默许无需设置太大。

办法2:用静态数组替代一般部分数组。

办法3:数组过大,栈溢出了,有或许覆盖了其他大局变量的值。假如运用很大的数组,能够界说成一个大局变量。假如运用的有os。就运用内存办理。

堆是在程序运行时,而不是在程序编译时,请求某个巨细的内存空间。即动态分配内存,对其拜访和对一般内存的拜访没有差异。{堆是指程序运行时请求的动态内存,而栈仅仅指一种运用堆的办法(即先进后出)。}

栈是先进后出的,可是关于堆而言却没有这个特性,两者都是寄存暂时数据的当地。 关于堆,咱们能够为所欲为的进行添加变量和删去变量,不要遵从什么次第,不论巨细,只需你喜爱

*栈,用于寄存部分变量,部分数组等

*堆,用于保存new 和malloc这些自界说的内存变量;

*大局静态区用于保存大局变量和静态变量;

*字符常量区,用于保存字符串;

*代码区,用于保存程序的二进制代码;

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/347524.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部