新闻  |   论坛  |   博客  |   在线研讨会
IAR STACK SIZE 设置影响什么
电子禅石 | 2017-06-23 15:05:33    阅读:11188   发布文章

影响最后 map (内存映射)文件 中RAM 的大小。IAR 的STACK 是预设的,我再STM8L101F3P6使用过程中,默认是0X100  即256字节。

试验:将STACK 设为:0X420  则查看MAP 文件最后 1090 BYTES

将STACK 设为:0X 100    RAM 占用 290 BYTES

将STACK 设为:0x 200   RAM 占用  546 BYTES    可以看出 RAM 实际占用都是 34 个字节。

一般默认的没有问题,还需具体问题具体分析。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
电子禅石  2017-12-13 04:32:26 

如果使用了HEAP,则必须设置HEAP大小。 如果是STACK,可以设置为0,不影响程序运行。 IAR STM8定义STACK,是预先在RAM尾端分配一个字节的区域作为堆栈预留区域。 当程序静态变量,全局变量,或者堆与预留堆栈区域有冲突,编译器连接的时候就会报错。 你可以吧STACK设置为0,并不影响运行。(会影响调试,调试会报堆栈溢出警告)。 其实没必要这么做。 一般程序,(在允许范围内)设置多少STACK,并不影响程序真实使用的RAM大小, (可以试验,把STACK设置多少,编译出来的HEX文件都是一样), 程序还是按照它原本的状态使用RAM,把STACK设置为0,并不是真实地减少RAM使用。 仅仅是欺骗一下编译器,让程序表面上看起来少用了RAM。 而设置一定size的STACK,也并不是真的就多使用了RAM,只是让编译器帮你 检查一下,是否能够保证有size大小的RAM没有被占用,可以用来作为堆栈。 以上仅针对IAR STM8.

电子禅石  2017-12-13 04:28:15 

什么情况下,堆栈会溢出?原因是变量太多,或者调用的次数太多,比如有个10000次的循环嵌套调用。 如果变量不能减少,可以手动更改堆栈的大小,在工程名上点右键,Option-General Options的Stack/Heap标签页中可以自己更改。

推荐文章
最近访客