问一个arm中断的问题

tntman 2008-01-22 09:06:53
我的环境:at91rm9200+28F128+dataflash
我运行仿真器时,程序执行起点是__ENTRY,地址是0x20000000,(1)请问这个地址是可变的吗?
1ffffff4 [0xffffffff] dci 0xffffffff ; ? undefined
1ffffff8 [0xffffffff] dci 0xffffffff ; ? undefined
1ffffffc [0xffffffff] dci 0xffffffff ; ? undefined
__ENTRY [0xea000009] b InitReset
undefvec [0xeafffffe] b undefvec
swivec [0xe59ff010] ldr pc,SWI_Addr ; = #SWI_Addr
pabtvec [0xe59ff010] ldr pc,PrefetchAddr ; = #PrefetchAddr
dabtvec [0xe59ff010] ldr pc,DataAbortAddr ; = #DataAbortAddr
rsvdvec [0xeafffffe] b rsvdvec
irqvec [0xe51fff20] ldr pc,0x1ffff100 ; = #0xfffcecec
fiqvec [0xeafffffe] b fiqvec
SWI_Addr [0x2000752c] dcd 0x2000752c ,u.
PrefetchAddr [0x200000e8] dcd 0x200000e8 ...
DataAbortAddr [0x200000ec] dcd 0x200000ec ...
InitReset [0xe59f10dc] ldr r1,0x20000110 ; = #0x200081e0
20000030 [0xe3c11003] bic r1,r1,#3



我执行到软中断后程序死在0x00000008:
00000000 [0xea000007] b 0x24
00000004 [0xeafffffe] b 0x4
00000008 [0xeafffffe] b 0x8
0000000c [0xeafffffe] b 0xc
00000010 [0xeafffffe] b 0x10
00000014 [0xeafffffe] b 0x14
00000018 [0xe51fff20] ldr pc,0xfffff100 ; = #0x00105260
0000001c [0xeafffffe] b 0x1c
00000020 [0x00105448] andeqs r5,r0,r8,asr #8
00000024 [0xe59f1130] ldr r1,0x0000015c ; = #0xfffffc00
00000028 [0xe3e00000] mvn r0,#0
0000002c [0xe5810064] str r0,[r1,#0x64]
00000030 [0xe3e00001] mvn r0,#1
00000034 [0xe5810004] str r0,[r1,#4]



请问为什么呢?
...全文
281 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ialwaysgo 2010-01-29
  • 打赏
  • 举报
回复
哈哈
moyeyu 2010-01-24
  • 打赏
  • 举报
回复
楼上说得对,楼主异常向量大部分都不对
博说医械研发 2010-01-22
  • 打赏
  • 举报
回复
(1)请问这个地址是可变的吗?
这个是可以改的,在你的仿真程序的某个设置项里边设置了程序下载的地址及__ENTRY地址。


00000000 [0xea000007] b 0x24
00000004 [0xeafffffe] b 0x4
00000008 [0xeafffffe] b 0x8
0000000c [0xeafffffe] b 0xc
00000010 [0xeafffffe] b 0x10
00000014 [0xeafffffe] b 0x14
00000018 [0xe51fff20] ldr pc,0xfffff100 ; = #0x00105260
0000001c [0xeafffffe] b 0x1c
从这里可以看到,板子的启动代码中除了复位异常和IRQ异常之外都是进入死循环,因为是跳到当前位置

所以你的程序要能执行软中断的内容,然后将下载及__ENTRY地址设置成0
yangcuncunzhang 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 tntman 的回复:]
我的环境:at91rm9200+28F128+dataflash
我运行仿真器时,程序执行起点是__ENTRY,地址是0x20000000,(1)请问这个地址是可变的吗?
1ffffff4 [0xffffffff]  dci      0xffffffff ; ? undefined
1ffffff8 [0xffffffff]  dci      0xffffffff ; ? undefined
1ffffffc [0xffffffff]  dci      0xffffffff ; ? undefined
__ENTRY         [0xea000009]  b        InitReset
undefvec [0xeafffffe]  b        undefvec
swivec         [0xe59ff010]  ldr      pc,SWI_Addr ; = #SWI_Addr
pabtvec         [0xe59ff010]  ldr      pc,PrefetchAddr ; = #PrefetchAddr
dabtvec         [0xe59ff010]  ldr      pc,DataAbortAddr ; = #DataAbortAddr
rsvdvec         [0xeafffffe]  b        rsvdvec
irqvec         [0xe51fff20]  ldr      pc,0x1ffff100 ; = #0xfffcecec
fiqvec         [0xeafffffe]  b        fiqvec
SWI_Addr [0x2000752c]  dcd      0x2000752c  ,u.
PrefetchAddr [0x200000e8]  dcd      0x200000e8  ...
DataAbortAddr [0x200000ec]  dcd      0x200000ec  ...
InitReset [0xe59f10dc]  ldr      r1,0x20000110 ; = #0x200081e0
20000030 [0xe3c11003]  bic      r1,r1,#3


我执行到软中断后程序死在0x00000008:
00000000 [0xea000007]  b        0x24
00000004 [0xeafffffe]  b        0x4
00000008 [0xeafffffe]  b        0x8
0000000c [0xeafffffe]  b        0xc
00000010 [0xeafffffe]  b        0x10
00000014 [0xeafffffe]  b        0x14
00000018 [0xe51fff20]  ldr      pc,0xfffff100 ; = #0x00105260
0000001c [0xeafffffe]  b        0x1c
00000020 [0x00105448]  andeqs  r5,r0,r8,asr #8
00000024 [0xe59f1130]  ldr      r1,0x0000015c ; = #0xfffffc00
00000028 [0xe3e00000]  mvn      r0,#0
0000002c [0xe5810064]  str      r0,[r1,#0x64]
00000030 [0xe3e00001]  mvn      r0,#1
00000034 [0xe5810004]  str      r0,[r1,#4]


请问为什么呢?

[/Quote]
你在0x08处的指令是又跳转到0x08,所以死循环了!
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
有问题请先GOOGLE,BAIDU
nieyifan 2008-02-22
  • 打赏
  • 举报
回复
楼主你跳到死循环里面了吧?
softnow 2008-02-19
  • 打赏
  • 举报
回复
你是在板子上跑的吧
问题出在你板子上0x8的软中断代码不对,应该把0x8换成一条跳转代码,跳转到0x20000008,否则就死循环了,应该象楼上的说的,你的bootloader没有执行
zgz 2008-01-31
  • 打赏
  • 举报
回复
你需要把entry处的8条指令拷贝到0地址。

你从仿真器里直接从0x20000000运行,可能是错过了某些初始化代码。
tntman 2008-01-23
  • 打赏
  • 举报
回复
请帮忙罗~
jmulxg 2008-01-23
  • 打赏
  • 举报
回复
汇编啊。呵呵

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧