打印

lpc2200工程模板中的startup.s文件的堆栈定义问题

[复制链接]
1976|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yamaki|  楼主 | 2007-10-29 21:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
lpc2200工程模板中的startup.s文件第250行至254行
StackSvc           DCD     SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4
StackIrq           DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
StackFiq           DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
StackUnd           DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)* 4
括号中的STACK长度为何要减1呢?这样第一个StackSvc的地址为0x3ffffffc,虽然这个STACK的长度为0。这里如果不减1,可以么?
 
 

相关帖子

沙发
yamaki|  楼主 | 2007-10-30 08:48 | 只看该作者

re

如果不减1的话,StackSvc的地址为0x40000000,这样是不是更好一点?

使用特权

评论回复
板凳
computer00| | 2007-10-30 09:28 | 只看该作者

也许是空栈 吧

使用特权

评论回复
地板
yujun0834| | 2007-10-30 09:31 | 只看该作者

re

应该是考虑到地址对齐的问题吧

使用特权

评论回复
5
250147449| | 2007-10-30 09:33 | 只看该作者

我是新手多指教

我是新手多指教

使用特权

评论回复
6
yamaki|  楼主 | 2007-10-30 09:46 | 只看该作者

结论

查了一些资料,将(SVC_STACK_LEGTH - 1)* 4改写成SVC_STACK_LEGTH * 4 - 4。如果不减4的话,则是栈顶之外的第一个地址;如果减4,则是栈内的最高字地址。ARM栈是递减栈。

使用特权

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

本版积分规则

14

主题

53

帖子

1

粉丝