通过试验验证有以下结论,如有错误,万望各位指出:<br />在Startup.s中有<br /> AREA Stacks, DATA, NOINIT<br />StackUsr <br />在mem_c.scf中有<br />STACKS 0x40008000 UNINIT ; <br /> {<br /> Startup.o (Stacks)<br /> }<br />上面两段实际是将分配给RW,ZI和Heap后剩余的RAM全部设置为堆栈(Stacks)。<br />若IRQ专门使用的堆栈大小不足时,系统自动将Stacks作为堆栈使用。即使IRQ专门使用的堆栈为0,只要Stacks容量足够大,程序就可以正常运行。<br />若IRQ专门使用的堆栈+Stacks的总量小于IRQ实际需要的内存大小,程序就会出问题。<br />例如我的IRQ中断实际需要的堆栈大小约为1.5K,但是定义的IRQ专门堆栈为256*4=1K,以前程序运行正常是因为我的32K RAM只用了30K,余量足够大,IRQ实际可以使用的堆栈有1K+2k=3K。如果不满足1K+RAM余量>=1.5K,就会出错。<br />但是还有一个问题,应该按照什么原则来估算专用堆栈的大小呢?
|