[ZLG-ARM] 谢谢computer00阁下

[复制链接]
2826|12
 楼主| zhulijun1 发表于 2007-10-11 16:13 | 显示全部楼层 |阅读模式
computer00:<br />&nbsp;&nbsp;&nbsp;&nbsp;你在昨夜对我问题的再次回复我真的很感动:<br />“UsrStackSpace是一个标号,它里面的内容是UsrStack的地址(这个地址在RAM中).<br /><br />而StackUsr&nbsp;DCD&nbsp;UsrStackSpace,则是将UsrStackSpace这个标号的地址(这个地址在ROM中)放在了StackUsr里面,所以两者不一样了。<br /><br />通过StackUsr里面的值,可以找到UsrStackSpace的地址,这个地址里面的内容才是堆栈.<br /><br />而你前面正确的,StackUsr里面的值就是堆栈.”<br /><br />你的分析应该是正确的,我对“disassemble”出来的东东一知半解。<br /><br />现在是否说明&nbsp;&nbsp;书上所给的初如化堆栈的方法有问题,因为正如你所分析的不能指向RAM地址:<br />===========================================================================<br />StackUsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UsrStackSpace&nbsp;+&nbsp;(USR_STACK_LEGTH&nbsp;-&nbsp;1)*4<br />StackSvc&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SvcStackSpace&nbsp;+&nbsp;(SVC_STACK_LEGTH&nbsp;-&nbsp;1)*4<br />StackIrq&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IrqStackSpace&nbsp;+&nbsp;(IRQ_STACK_LEGTH&nbsp;-&nbsp;1)*4<br />StackFiq&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FiqStackSpace&nbsp;+&nbsp;(FIQ_STACK_LEGTH&nbsp;-&nbsp;1)*4<br />StackAbt&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbtStackSpace&nbsp;+&nbsp;(ABT_STACK_LEGTH&nbsp;-&nbsp;1)*4<br />StackUnd&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UndtStackSpace&nbsp;+&nbsp;(UND_STACK_LEGTH&nbsp;-&nbsp;1)*4<br /><br /><br />;&nbsp;分配堆栈空间&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;MyStacks,&nbsp;DATA,&nbsp;NOINIT,&nbsp;ALIGN=2<br />UsrStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USR_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;用户(系统)模式堆栈空间<br />SvcStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SVC_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;管理模式堆栈空间<br />IrqStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IRQ_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;中断模式堆栈空间<br />FiqStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIQ_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;快速中断模式堆栈空间<br />AbtStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ABT_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;中止义模式堆栈空间<br />UndtStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UND_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;未定义模式堆栈&nbsp;<br />============================================================================&nbsp;&nbsp;&nbsp;<br />因为要实现堆栈向下递减,所以只能像书上所讲的方法,我该怎么办呢?
computer00 发表于 2007-10-11 17:11 | 显示全部楼层

你的编译器我不熟,不知道用EQU行不行。

你可以去下载一些别人的启动文件来参考。
wj77317 发表于 2007-10-11 20:15 | 显示全部楼层

看来你是要自己移植操作系统啊

你研究的很深啊,周立功移植好的操作系统都研究啊。有志气。
 楼主| zhulijun1 发表于 2007-10-12 07:59 | 显示全部楼层

回复computer00

用EQU也不行,
 楼主| zhulijun1 发表于 2007-10-12 08:16 | 显示全部楼层

另外

<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 />...<br />AREA&nbsp;&nbsp;&nbsp;&nbsp;MyStacks,&nbsp;DATA,&nbsp;NOINIT<br />UsrStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;USR_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;<br />...<br /><br />我认为并没有为“UsrStackSpace”这个标号分配一字的内存空间,也就是说这个标号没有存放的地址;而为“StackUsr”这个标号分配了一个字的单元,里面的内容为数据结构的首地址
computer00 发表于 2007-10-13 00:22 | 显示全部楼层

具体是怎样,你可以写程序测试的。

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

回复

测试了一下,结果:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,StackUsr<br />StackUsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UsrStackSpace&nbsp;<br />...<br />AREA&nbsp;&nbsp;&nbsp;&nbsp;MyStacks,&nbsp;DATA,&nbsp;NOINIT<br />UsrStackSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;USR_STACK_LEGTH&nbsp;*&nbsp;4&nbsp;<br />...<br /><br />结果把“StackUsr”的地址附给了SP,而实际是需要把“StackUsr”里的内容(即数据结构的首地址)附给SP...
computer00 发表于 2007-10-14 11:41 | 显示全部楼层

那你就可以修改一下启动代码啊

使用间接寻址的方式,两那个里面的内容弄出来就行了。
 楼主| zhulijun1 发表于 2007-10-15 08:48 | 显示全部楼层

回复

ldr&nbsp;sp&nbsp;[sp]&nbsp;&nbsp;&nbsp;?
xiao李 发表于 2007-10-15 09:51 | 显示全部楼层

re

StackUsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UsrStackSpace&nbsp;<br />StackUsr&nbsp;不是变量,只是一个标号,该标号的地址位置上存放的是后面那个标号的地址。
computer00 发表于 2007-10-15 10:20 | 显示全部楼层

那么多工作寄存器,随便借助一个,前面的R2什么的

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

oo

我想看看你的&nbsp;ARM_00_OS
computer00 发表于 2007-10-17 09:35 | 显示全部楼层

直接去我的博客里面的初学ARM里面找,有几个版本了。

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

20

帖子

0

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