打印
[ZLG-ARM]

堆栈大小的设置

[复制链接]
2718|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiuzhou|  楼主 | 2008-1-16 16:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zlgarm| | 2008-1-17 08:44 | 只看该作者

xiuzhou,您好!

       已记录您的问题,我将将在2007年1月17日9:20之前,给出详尽答复,感谢您对广州周立功单片机发展有限公司的支持!

                                                                                                                       By   zlgarm_zxm

使用特权

评论回复
板凳
zlgarm| | 2008-1-17 09:08 | 只看该作者

xiuzhou,您好!

中断堆栈大小与能否进入中断是没有关系的,而是与中断程序切换需要保存的数据大小有关系的。你可以把中断服务程序写大一些,或者中断中调用其他函数试试,看看您的程序还能否正常运行。

                                                                   By zlgarm_zxm

使用特权

评论回复
地板
xiuzhou|  楼主 | 2008-1-17 10:34 | 只看该作者

zlgarm_zxm你好!

既然中断堆栈是为进入中断后局部变量和函数调用开辟的存储区,那如果将堆栈大小设为0,进入中断后也不可能进行其他处理。哪怕我只定义一个局部变量或调用一个函数,中断处理也不可能发生。例如:
void f1(void);

void __irq SSP_IRQ( void )
{
     unsigned char ch;
     f1();
}
我按照你的方法,IRQ_STACK_LEGTH  EQU  0,在中断处理函数中调用了5个函数,增加了几个数组,仍然能够正常运行,好像跟堆栈大小没有关系。
怀疑是不是如果在IRQ_STACK_LEGTH  EQU  0的条件下,还有其他程序自动设置中断堆栈的大小?

使用特权

评论回复
5
zlgarm| | 2008-1-17 12:44 | 只看该作者

xiuzhou,您好!

当堆栈设置为0时,说明提供给IRQ堆栈专门使用的空间是0。但是当IRQ堆栈使用的空间没有被其他程序或数据使用时,程序还是可以正常运行的。而如果被其他程序或数据使用时,那么就可能会导致程序运行不正常。
                                                                                                                       By   zlgarm_zxm

使用特权

评论回复
6
xiuzhou|  楼主 | 2008-1-17 14:37 | 只看该作者

zlgarm_zxm你好!

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

使用特权

评论回复
7
zlgarm| | 2008-1-17 17:43 | 只看该作者

堆栈

xiuzhou 您好!
    堆栈的大小与程序的变量和算法有直接关系。
                                      By zlgarm_ljt

使用特权

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

本版积分规则

16

主题

33

帖子

1

粉丝