打印
[STM32F1]

STM32如何把剩余内存当做栈?

[复制链接]
1134|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
billypeng|  楼主 | 2016-12-14 13:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如题,在程序中不打算使用堆(堆要自己申请内存以及释放内存,比较麻烦,栈由系统自己管理)。那么系统中除掉全局变量和静态变量,省下的内存都可以给栈用。这样可以在函数中定义比较大的数组或者结构,函数退出时内存自动释放,重复利用率高。否则,必须在全局变量中定义,没有办法重复利用了。

但 startup_stm32f10x_hd.s 中限定了堆和栈的大小,我不知道限制这个干什么,除掉全局变量静态变量,栈和堆后,其他内存都用不上了。
有办法自动把所有剩余内存当作栈吗?
沙发
feelhyq| | 2016-12-14 14:23 | 只看该作者
     只要合理的设置 startup_stm32f10x_hd.s 中定义的栈的大小就行了,这个大小是可以改的。你的工程编译完成后会生成一个.map文件,     最后一行有栈的起始位置和大小,将起始位置和大小加起来只要不超过RAM的总大小就可以了。






使用特权

评论回复
板凳
billypeng|  楼主 | 2016-12-14 14:39 | 只看该作者
试了把所有内存64K分配给栈,发现全局变量没有地方放了。你说的办法虽然可以实现,但每编译一次就来修改一次,也嫌烦。最好是系统自动处理,毕竟剩下的内存没有什么用。AVR好象是系统自动处理。

使用特权

评论回复
地板
feelhyq| | 2016-12-14 14:54 | 只看该作者
那就这样,写个windows的exe小程序,将生成的.bin文件的前四个字节内容改成RAM的最高地址。这个exe文件可以放在Run#1 哪里执行,每次编译完工程后自动执行windows的exe的小程序,去改变SP的值

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

235

帖子

0

粉丝