我在stm32做归一化以及自相关的项目时,一开始直接定义了长度为8192的数组,进行自相关,单片机一直没有反应,上位机不输出信息,然后我把点数改为128后就能正常输出了!并且在调试后,我发现最高能运行的点数是512,经过上网查询我终于发现了原因,就是定义的局部变量过大导致栈溢出,解决方法如下。
我的代码是库函数版本,所以找到startup_stm32f40_41xxx.s 文件,默认设置如下,stack值为800,我直接改为8000,后运行成功,不过这个值一般不用设置太大,正常运算1000以内即可。
修改后
第二种解决方法就是把变量定义为全局变量,还有一种方法就是用静态数组代替普通局部数组。这两种方法我没有尝试,大家也可以试试
heap和stack区别:1、heap是堆,stack是栈;2、stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的;3、stack空间有限,heap的空间是很大的自由区。
*栈,用于存放局部变量,局部数组等
*堆,用于保存new 和malloc这些自定义的内存变量;
*全局静态区用于保存全局变量和静态变量;
*字符常量区,用于保存字符串;
*代码区,用于保存程序的二进制代码;