STM32/STM8技术论坛
直播中

王英

8年用户 1390经验值
私信 关注
[问答]

请问STM32F407启动文件里面堆和栈的大小可以设置吗?

请问STM32F407启动文件里面堆和栈的大小可以设置吗?我有一个函数局部变量占用了16K的数组做了个fft,做完就把我原始数据改乱了,还有一个函数局部变量有64K,进去就跑飞了,怎么更改可以解决这些问题呢?

回帖(16)

王英

2018-11-28 11:37:49
13.png
1 举报

李斌

2018-11-28 11:43:58
局部变量就是放在 栈里面的,你定义的局部变量大小把栈击穿了,你可以把那个局部变量数组变定义成全局变量,也可以吧栈的空间 Stack Size 改成64K 加 其他栈需要,那就定义成70K吧
举报

陈敏

2018-11-28 11:49:20
可以配置
外扩RAM吧
举报

h1654155275.5614

2018-11-28 11:49:30
改成全局变量试一下
举报

张超

2018-11-28 11:49:39
全局变量,或者局部静态变量,这样编译器会提前分配好内存,不需要动态分配使用堆栈了
举报

李红

2018-11-28 11:49:48
局部变量分配在栈(STACK)上,你的2个变量占用16+64=80KByte的栈空间。
举报

张桂兰

2018-11-28 11:49:59
F407有192KByte的SRAM,所以你可以把栈分的大些,因为还要考虑其它变量的占用
举报

王萍

2018-11-28 11:51:03
80KByte=0x14000Byte,故Stack_Size>0x14000。
举报

李桂英

2018-11-28 11:51:17
局部变量一般是加在stack了,5000那个可以改大地点,heap也可以大点,200也才512字节,有点小了
举报

刘强

2018-11-28 11:51:26
可以用个数组来存放数据,而不用堆栈。
举报

王萍

2018-11-28 11:51:41
可以自己配置,但是你要懂该怎么配置,局部变量64k也是够大的了,看看手册sram有多大吧,有可能堆栈越界
举报

张娟

2018-11-28 11:51:51
局部变量,定义到64K,也是神了..这个东西,几十个字节以上的,都建议定全局或是静态变量.
举报

王英

2018-11-28 11:53:10
F407ram是190k的
举报

张桂英

2018-11-28 11:53:20
感觉是不是越界了导致的
举报

杨秀英

2018-11-28 11:53:41
根据自己的需要,一般在跑操作系统的时候需要修改
举报

陈勇

2018-11-28 11:53:57
自己平时写裸机程序不需要修改堆栈
举报

更多回帖

发帖
×
20
完善资料,
赚取积分