iar 堆栈设置_IAR集成开发环境如何设置堆栈大小

[

] IAR

集成开发环境如何设置堆栈大小

GCC

IAR

分配堆栈的方式不同,

IAR

先分配堆栈空间,相当于定义一个

全局数组为堆栈空间,堆栈初始为堆栈空间最高地址;

GCC

不用先分配堆栈,

自动把

RAM

剩余空间作为堆栈空间,堆栈初始为

RAM

最高地址。

初学者很容易忽视这个问题,造成程序跑飞而找不到问题的症结,我在用

IAR For MSP430

的时候没遇到过这个问题,

因为

MSP430

RAM

比较大,

IAR

默认是

80

字节,足够一般程序使用。

但是使用

IAR For SAM8

的时候,

有一个比较耗费堆栈的程序运行一段时间

后出问题,

由于要记录一个

24

小时的数组,

而数组元素的值是在堆栈里改变的,

所以,记录到一定时间以后,出现了堆栈不足的情况,初学者如果没有仿真器,

是很难发现这个问题的,还好我用的仿真器在

Debug

的时候出现了堆栈不足的

警告,我才意识到是这里问题。

IAR For SAM8

默认堆栈是

32

字节,

既然不够用,

那么就要增大,

但是设置

到多少合适呢?

首先编译你的程序,看程序用了多少自己的

RAM

转载

]IAR

Data stack(CSTACK)

的设置问题

" alt="[

转载

]IAR

Data stack(CSTACK)

的设置问题

"

src="http://s13.sinaimg.cn/middle/51f1a413g82a17692080c&690">

在看看芯片的

Datasheet

,看看芯片总共有多大的

RAM

转载

]IAR

Data stack(CSTACK)

的设置问题

" alt="[

转载

]IAR

Data stack(CSTACK)

的设置问题

"

src="http://s7.sinaimg.cn/middle/51f1a413gd1a4eeb64da6&690"

real_src="http://s7.sinaimg.cn/middle/51f1a413gd1a4eeb64da6&690">

好了现在你就知道剩余多少

RAM

了:

208-142=66

(

Byte

)

前面说过

IAR

CSTACK,NEAR_HEAP

RSTACK

是预先分配好的,占

用存储空间是固定不变的,相当于定义了一个全局数组,

GCC

堆栈策略与

IAR

不同,堆栈大小不是预先分配好的,而是把

SRAM

里面剩余空间作为堆栈空间。

如果是

GCC

那么编译器就会自动设置剩余的

RAM

为数据堆栈

(和数据返

回堆栈

RSTACK

NEAR_HEAP

等)。

IAR

里,

STACK

应该设置到多少呢?

在工程

-

Options-

Linker-

List

(不同的

IAR

版本会稍有不同),选择生

LIST

文件,并包含

stack

选项

转载

]IAR

Data stack(CSTACK)

的设置问题

" alt="[

转载

]IAR

Data stack(CSTACK)

的设置问题

"

src="http://s11.sinaimg.cn/middle/51f1a413g82a19e1658ea&690"

real_src="http://s11.sinaimg.cn/middle/51f1a413g82a19e1658ea&690">

./Debug/list

目录下,得到

.map

(可能是

.lst

等其他格式)文件,用记事本

打开,找到以下内容:

****************************************

* *

* CALL GRAPH *

* *

****************************************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值