2440地址映射问题,求教!

[复制链接]
3245|4
 楼主| tnt505man 发表于 2008-3-18 10:08 | 显示全部楼层 |阅读模式
我使用仿真器调试我自己的裸机程序,在一块2440开发板上。<br /><br />开发板能够正常运行wince,但没有任何源码,我想自己开发裸机程序。我目前正在调试串口中断,我先把开发板自带的boot烧到flash的bank0,然后打开仿真器,使用ads来调试。有以下问题请教:<br /><br />1.调试串口中断可以用仿真器进行单步吗?或是一定要烧到flash里进行盲调?<br /><br />2.我使用仿真器单步跟踪,我对地址做了查看:<br /><br />地址0x30000000以后放的是我工程的异常跳转表;<br /><br />30000000&nbsp;&nbsp;&nbsp;&nbsp;[0xea000074]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResetHandler<br />30000004&nbsp;&nbsp;&nbsp;&nbsp;[0xea000052]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandlerUndef<br />30000008&nbsp;&nbsp;&nbsp;&nbsp;[0xea000057]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandlerSWI<br />3000000c&nbsp;&nbsp;&nbsp;&nbsp;[0xea000062]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandlerPabort<br />30000010&nbsp;&nbsp;&nbsp;&nbsp;[0xea00005b]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandlerDabort<br />30000014&nbsp;&nbsp;&nbsp;&nbsp;[0xeafffffe]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x30000014<br />30000018&nbsp;&nbsp;&nbsp;&nbsp;[0xea000047]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandlerIRQ<br />3000001c&nbsp;&nbsp;&nbsp;&nbsp;[0xea000040]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandlerFIQ<br />30000020&nbsp;&nbsp;&nbsp;&nbsp;[0xea000008]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnterPWDN<br /><br />地址0x0以后放的也是一个跳转表,不过和地址0x30000000处的不一样。<br /><br />00000000&nbsp;&nbsp;&nbsp;&nbsp;[0xea00000a]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x30<br />00000004&nbsp;&nbsp;&nbsp;&nbsp;[0xeafffffe]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x4<br />00000008&nbsp;&nbsp;&nbsp;&nbsp;[0xeafffffe]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x8<br />0000000c&nbsp;&nbsp;&nbsp;&nbsp;[0xeafffffe]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xc<br />00000010&nbsp;&nbsp;&nbsp;&nbsp;[0xeafffffe]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x10<br />00000014&nbsp;&nbsp;&nbsp;&nbsp;[0xeafffffe]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x14<br />00000018&nbsp;&nbsp;&nbsp;&nbsp;[0xeafffffe]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x18<br />0000001c&nbsp;&nbsp;&nbsp;&nbsp;[0xeafffffe]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1c<br /><br />当irq中断来的时候,我的程序开在了地址0x18上:<br /><br />00000018&nbsp;&nbsp;&nbsp;&nbsp;[0xeafffffe]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x18<br /><br />请问为什么两个表不一样呢?另外地址0x30000000是内存起始地址吧,那地址0x0是不是flash上?地址0x0能否修改?<br /><br />怎样才能把我的0x0地址映射到地址0x30000000呢?我用的是2440,没有remap吧,是用MMU吗?还是别的方法?<br /><br />
农民讲习所 发表于 2008-3-18 12:15 | 显示全部楼层

写一段汇编代码:

单独编译生成数据文件,在你程序开始打开中断前,把数据全部写到地址0开始的位置,这样中断就跳转到0x30000000开始<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;PC,&nbsp;Addr_0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;未使用<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;PC,&nbsp;Addr_1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;未使用<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;PC,&nbsp;Addr_2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;软件中断<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;PC,&nbsp;Addr_3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;取指错误中断<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;PC,&nbsp;Addr_4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;取数错误中断<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;PC,&nbsp;Addr_5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;保留<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;PC,&nbsp;Addr_6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;IRQ<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;PC,&nbsp;Addr_7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;FIQ<br /><br />Addr_0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x30000000<br />Addr_1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x30000004<br />Addr_2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x30000008<br />Addr_3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x3000000c<br />Addr_4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x30000010<br />Addr_5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x30000014<br />Addr_6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x30000008<br />Addr_7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x3000001c<br /><br />建议使用MMU映射,还可以大幅度提高运行速度。
农民讲习所 发表于 2008-3-18 10:59 | 显示全部楼层

两个方法:

1)打开MMU,映射。<br />2)在INIT.S中,修改0地址开始数据为&nbsp;0x30000000&nbsp;开始
 楼主| tnt505man 发表于 2008-3-18 11:23 | 显示全部楼层

111

请问方法2详细如何操作?怎么修改为0x30000000?
 楼主| tnt505man 发表于 2008-3-19 11:18 | 显示全部楼层

谢谢

谢谢,我按照你说的已经搞定了,原因是我的小于4K的工程A和后面要运行的工程B的跳转表不一致。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

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