打印

初看ARM,提问,希望大家多多回复支持别笑我菜:)

[复制链接]
2173|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ilovemysel|  楼主 | 2007-10-31 20:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天按照书上,写了段arm汇编代码.
在ADS1.2下设置-R0(默认)从0x80000000开始,
然后用AXD仿真调试的时候,我看PC值是0x80000000开始的
<疑问1>:程序不都是存储在FLASH中,怎么可以跑到0x80000000开始呢,
我看资料0x80000000开始的位置是属于外部存储器的,也就是说程序
存储到外部存储器去了?

另外我在ADS1.2下设置-R0从0x00000000开始,
同样用AXD软件仿真,观察CPSR下的PC,也是从0x00000000开始的,
然后单步运行,PC=0x00000004
<疑问2>:我看资料,0x0000004是属于中断入口地址,那么程序刚单步就
跑到中断入口那边去了?
                                           

等大家回复...

相关帖子

来自 2楼
wishcom| | 2007-10-31 21:28 | 只看该作者

仿真与真实情况有差别的

AXD在把程序加载进区后PC会自动跳转到程序的入口点处。
真实的ARM芯片(ARM7为例)一般在0x0地址处是中断向量表的起始地址,换句话讲:开机后,程序会从0x0开始运行。

关于程序入口点:
如果程序编译时指定了 -entry参数,则也就指定了入口点
如果程序编译时没有指定-entry参数,则程序中汇编的伪指令“ENTRY”处就是程序入口点
如果程序编译时没有指定-entry参数,且汇编中伪指令“ENTRY”有多个,则会报错。
每一个汇编文件中最多只能有一个汇编中伪指令“ENTRY”

关于中断向量表:
首先复位中断是在0地址的,那么0地址的指令就是由用户自己写的,通常写法是一个跳转命令如:b reset_handler 或者 ldr pc, =reset_handler
如果把ARM当成单片机用,你也可以不写跳转指令,直接将程序从头写到尾,这样写的前提就是你不能用中断。

建议:
1.有了一定了解后买一块开发板,如果嫌贵,可以买ARM7的。虽然ARM7不能跑WinCE,Linux等强大的操作系统,但是我可以大言不惭的说一句:如果你能用ARM7写出自己的操作系统,那么你绝对比那些整天只知道移植的人NB.
2.需要了解ARM程序到底是如何运行的(ARM程序运行机制),强烈建议学习bootloader,不要听信所谓的“现在的芯片都自带bootloader了”,要知道:有些知识永远不会过时。君不见现在x86汇编的学习仍然还是以086为原型机的。
3.对于ARM9,如果你的ARM7知识过关,那么到ARM9上边不过是类似于盛饭的东西从碗换成了盘子一样,几乎没什么变化,仅仅需要多了解一点MMU相关知识即可,而以前的ARM7的知识都可以继续使用。

一时兴起,多言了。。。

使用特权

评论回复
板凳
HWM| | 2007-11-1 08:27 | 只看该作者

楼上所言正中要的。

使用特权

评论回复
地板
桂电飞天鼠| | 2007-11-4 00:59 | 只看该作者

学习了!谢谢分享!

使用特权

评论回复
5
zhengjily| | 2007-11-16 17:02 | 只看该作者

建议不错

使用特权

评论回复
6
Ice_River| | 2007-11-16 17:54 | 只看该作者

小疑问!

学习中,有个小疑问
如果把ARM当成单片机用,你也可以不写跳转指令,直接将程序从头写到尾,这样写的前提就是你不能用中断!
可以使用向量中断吧?

使用特权

评论回复
7
computer00| | 2007-12-21 00:13 | 只看该作者

哈哈~~~2楼的是个ARM高手~~~~~

使用特权

评论回复
8
qihao| | 2007-12-22 01:47 | 只看该作者

初看ARM,提问,希望大家多多回复支持别笑我菜:)

使用特权

评论回复
9
Ice_River| | 2007-12-24 17:17 | 只看该作者

看过,学过,走过!佩服了!

使用特权

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

本版积分规则

7

主题

17

帖子

0

粉丝