第
1
页
IAR
设置堆栈大小的问题
GCC
和
IAR
分配堆栈的方式不同,
IAR
先分配堆栈空间,相当于定义一个全局数组为堆栈
空间,堆栈初始为堆栈空间最高地址;
GCC
不用先分配堆栈,自动把
RAM
剩余空间作为
堆栈空间,堆栈初始为
RAM
最高地址。
初学者很容易忽视这个问题,造成程序跑飞而找不到问题的症结,我在用
IAR For MSP430
的时候没遇到过这个问题,因为
MSP430
的
RAM
比较大,
IAR
默认是
80
字节,足够一般
程序使用。
但是使用
IAR For SAM8
的时候,有一个比较耗费堆栈的程序运行一段时间后出问题,由于
要记录一个
24
小时的数组,而数组元素的值是在堆栈里改变的,所以,记录到一定时间以
后,出现了堆栈不足的情况,初学者如果没有仿真器,是很难发现这个问题的,还好我用的
仿真器在
Debug
的时候出现了堆栈不足的警告,我才意识到是这里问题。
IAR For SAM8
默认堆栈是
32
字节,
既然不够用,
那么就要增大,
但是设置到多少合适呢?
首先编译你的程序,看程序用了多少自己的
RAM
,