7147|12

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

问一个arm中断的问题 [复制链接]

我的环境: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]



请问为什么呢?
此帖出自ARM技术论坛

最新回复

哈哈   详情 回复 发表于 2010-1-29 12:32
点赞 关注
 

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
汇编啊。呵呵
此帖出自ARM技术论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
请帮忙罗~
此帖出自ARM技术论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
你需要把entry处的8条指令拷贝到0地址。

你从仿真器里直接从0x20000000运行,可能是错过了某些初始化代码。
此帖出自ARM技术论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
你是在板子上跑的吧
问题出在你板子上0x8的软中断代码不对,应该把0x8换成一条跳转代码,跳转到0x20000008,否则就死循环了,应该象楼上的说的,你的bootloader没有执行
此帖出自ARM技术论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
1.请问这个地址是可变的吗?
可以变,我觉得要看你的板子的硬件环境而定。

2.00000008 [0xeafffffe]       b                 0x8

自己跳到自己怎么能不死呢...
此帖出自ARM技术论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
楼主你跳到死循环里面了吧?
此帖出自ARM技术论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
有问题请先GOOGLE,BAIDU
此帖出自ARM技术论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 
我也想知道,正在找這方面的資料~~~~~
此帖出自ARM技术论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用楼主 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]


请问为什么呢?


你在0x08处的指令是又跳转到0x08,所以死循环了!
此帖出自ARM技术论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
(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
此帖出自ARM技术论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(中级)

12
 
楼上说得对,楼主异常向量大部分都不对
此帖出自ARM技术论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

13
 
哈哈
此帖出自ARM技术论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表