搜索
bottom↓
回复: 16

请问如何大概计算stm32所需的堆栈空间的大小,望知道的大侠指教指教……

[复制链接]

出0入0汤圆

发表于 2011-11-3 12:56:58 | 显示全部楼层 |阅读模式
最近在用stm32做电子相册实验,开发板是安富莱的,实验是:stm32f103zet6 + SDIO + FATFS +FSMC ->TFT,目前已经能读取SD卡里面的BMP图片到TFT上显示了。

而stm32f103zet6有64K的ram(试验中还没有使用外部SRAM),现在想充分利用芯片自身的资源,定义一个尽量大的buffer,以便一次性在SD卡中读取更多的字节数来提高速度。

我在在实验中一步一步的增大buffer,增大到一定程度时,出现了hard default。后来我将堆栈增大,他又正常了。

目前定义了5120个字节的数组来缓存数据,还只是占芯片资源的一小部分,想继续增大,但不知道如何设置堆栈大小才合适,所以想问下大家怎么计算堆栈的大小,谢谢!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2011-11-3 20:43:42 | 显示全部楼层
自己顶下!!

出0入0汤圆

发表于 2011-11-3 23:03:40 | 显示全部楼层
编译出来的outpu里面,有个工程名.html的文件,会列出最大函数调用路径所消耗的stack估算。

出0入0汤圆

 楼主| 发表于 2011-11-4 10:44:30 | 显示全部楼层
回复【2楼】huatuizh
编译出来的outpu里面,有个工程名.html的文件,会列出最大函数调用路径所消耗的stack估算。
-----------------------------------------------------------------------

正解,文件找到了,谢谢!!

出0入0汤圆

发表于 2013-3-31 11:13:00 | 显示全部楼层
danielmi 发表于 2011-11-4 10:44
回复【2楼】huatuizh
编译出来的outpu里面,有个工程名.html的文件,会列出最大函数调用路径所消耗的stack ...

1.楼主,请问STM32的堆栈大小设置为多少合适呢?
2.全局数组的大小最大可以定义为多少呢?是不是只要不超出SRAM的范围就行,还是数组的大小跟堆栈的大小相关?

出0入0汤圆

发表于 2013-3-31 16:37:24 | 显示全部楼层
本帖最后由 adce 于 2013-3-31 16:39 编辑

5120这个大小略显奇葩....应该是512的2次倍数...比如4096 8192什么的....
另外...
你究竟是要放堆里...还是要放栈里?....这是两个地方啊....
这种Buffer放在堆里明显比栈里合适的多....

我测试的是8192的时候基本提升就很小了...4096更具性价比...

出0入0汤圆

发表于 2013-10-12 22:55:06 | 显示全部楼层
danielmi 发表于 2011-11-4 10:44
回复【2楼】huatuizh
编译出来的outpu里面,有个工程名.html的文件,会列出最大函数调用路径所消耗的stack ...

STM32中一个栈的大小有多大?

出0入0汤圆

发表于 2014-2-18 11:02:25 | 显示全部楼层
请注意区分 全局变量以及局部变量的区别,局部变量才会在堆栈中,全局变量是在静态存储区,不会出现在堆栈内,全局变量的大小受到SRAM大小的影响,局部变量的大小受到STACK大小的影响

出0入0汤圆

发表于 2014-6-19 17:59:27 | 显示全部楼层
正好碰到这个问题,谢谢楼主

出0入0汤圆

发表于 2015-1-23 07:34:17 | 显示全部楼层
正是我要找的东西

出0入0汤圆

发表于 2015-1-23 07:48:32 | 显示全部楼层
这个BUFFER你做全局的就不存在问题了吧,

出0入0汤圆

发表于 2015-1-23 09:01:02 | 显示全部楼层
堆和栈 是分开的。堆是用户设置的,栈是编译器分配的。 其实简单的理解堆栈最大的空间,其实就是你X函数里面定义的最大局部变量 即动态变量大小决定的。 参看http://hi.baidu.com/19014299/item/d84fe4a6f8b4bf706cd455de

出0入0汤圆

发表于 2015-1-23 09:19:22 | 显示全部楼层
本帖最后由 xizi 于 2015-1-23 09:21 编辑

大数组,大结构最好都定义在堆里,即定义全局静态变量类型。不论定义多大,栈一毛影响都没有。

出0入42汤圆

发表于 2015-1-23 09:51:53 | 显示全部楼层
danielmi 发表于 2011-11-4 10:44
回复【2楼】huatuizh
编译出来的outpu里面,有个工程名.html的文件,会列出最大函数调用路径所消耗的stack ...

LZ能否截图明示?

出0入0汤圆

发表于 2015-1-23 11:19:29 | 显示全部楼层
这种情况是不是你定义缓冲的时候定义在了堆栈,而不是静态区或者用堆或者pool来申请存储

出0入0汤圆

发表于 2015-1-23 11:19:57 | 显示全部楼层
定义缓冲一般不用使用堆栈的空间

出0入4汤圆

发表于 2018-11-30 12:02:38 | 显示全部楼层
huatuizh 发表于 2011-11-3 23:03
编译出来的outpu里面,有个工程名.html的文件,会列出最大函数调用路径所消耗的stack估算。 ...

找到了,很有用,多谢多年前的前辈!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-2 11:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表