[ZLG-ARM] 没人肯帮忙?

[复制链接]
1983|4
 楼主| zhulijun1 发表于 2007-10-10 10:41 | 显示全部楼层 |阅读模式
AC, ST, Stack, ck, ce
<br /><br /><br />为什么这样程序能运行(lpc2292):<br /><br />;/*&nbsp;分配堆栈空间&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;MyStacks,&nbsp;DATA,&nbsp;NOINIT,&nbsp;ALIGN=2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />SpaceForWriteflash&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;0x400<br />SpaceForStackUsr&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;USR_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;&nbsp;<br />StackUsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;USR_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;UsrStackSpace&nbsp;StackUsr//0x100<br />StackUnd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;UND_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;<br />StackAbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;ABT_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;Stack&nbsp;spaces&nbsp;for&nbsp;Suspend&nbsp;Mode&nbsp;中止义模式堆栈空间<br />StackFiq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;FIQ_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;Stack&nbsp;spaces&nbsp;for&nbsp;Fast&nbsp;Interrupt&nbsp;reQuest&nbsp;Mode&nbsp;快速中断模式堆栈空间<br />StackIrq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;IRQ_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;Stack&nbsp;spaces&nbsp;for&nbsp;Interrupt&nbsp;ReQuest&nbsp;Mode&nbsp;中断模式堆栈空间<br />StackSvc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;SVC_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />但如下却不正常:<br /><br />StackUsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UsrStackSpace&nbsp;<br />StackUnd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UndtStackSpace<br />StackAbt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbtStackSpace<br />StackFiq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FiqStackSpace<br />StackIrq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IrqStackSpace<br />StackSvc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SvcStackSpace<br />;/*&nbsp;分配堆栈空间&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;MyStacks,&nbsp;DATA,&nbsp;NOINIT,&nbsp;ALIGN=2<br />SpaceForWriteflash&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;0x400<br />SpaceForStackUsr&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;USR_STACK_LEGTH&nbsp;*&nbsp;4<br />UsrStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;USR_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;UsrStackSpace&nbsp;StackUsr//0x100<br />UndtStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;UND_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;<br />AbtStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;ABT_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;Stack&nbsp;spaces&nbsp;for&nbsp;Suspend&nbsp;Mode&nbsp;中止义模式堆栈空间<br />FiqStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;FIQ_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;Stack&nbsp;spaces&nbsp;for&nbsp;Fast&nbsp;Interrupt&nbsp;reQuest&nbsp;Mode&nbsp;快速中断模式堆栈空间<br />IrqStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;IRQ_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;;Stack&nbsp;spaces&nbsp;for&nbsp;Interrupt&nbsp;ReQuest&nbsp;Mode&nbsp;中断模式堆栈空间<br />SvcStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;SVC_STACK_LEGTH&nbsp;*&nbsp;4<br /><br />调试一直在如下转圈:<br />_zero_loop&nbsp;&nbsp;&nbsp;&nbsp;[0xe2555004]&nbsp;&nbsp;&nbsp;subs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r5,r5,#4<br />000001c0&nbsp;&nbsp;&nbsp;&nbsp;[0x24847004]&nbsp;&nbsp;&nbsp;strcs&nbsp;&nbsp;&nbsp;&nbsp;r7,[r4],#4<br />000001c4&nbsp;&nbsp;&nbsp;&nbsp;[0x8afffffc]&nbsp;&nbsp;&nbsp;bhi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_zero_loop<br /><br /><br />
computer00 发表于 2007-10-10 10:49 | 显示全部楼层

没看出什么区别....

  
 楼主| zhulijun1 发表于 2007-10-10 13:08 | 显示全部楼层

谢谢

首先感谢computer00的关注,<br />是看不出什么区别<br />但就是行不通,我头都想破了
computer00 发表于 2007-10-10 13:10 | 显示全部楼层

看看生成的汇编是咋样的

  
computer00 发表于 2007-10-10 22:54 | 显示全部楼层

应该是这里的问题吧:

UsrStackSpace是一个标号,它里面的内容是UsrStack的地址(这个地址在RAM中).<br /><br />而StackUsr&nbsp;DCD&nbsp;UsrStackSpace,则是将UsrStackSpace这个标号的地址(这个地址在ROM中)放在了StackUsr里面,所以两者不一样了。<br /><br />通过StackUsr里面的值,可以找到UsrStackSpace的地址,这个地址里面的内容才是堆栈.<br /><br />而你前面正确的,StackUsr里面的值就是堆栈.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部