请问arm的data abort是如何发生的

[复制链接]
10110|2
 楼主| tianying1 发表于 2007-4-21 18:32 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;书上说Data&nbsp;Abort是由于对一个无效地址进行读/写造成的。比如store&nbsp;r0,地址A,如果地址A是一个Flash地址,就会发生data&nbsp;abort;如果从某个地址读取数据,而这个地址上并没有存储器,也会发生data&nbsp;abort.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;问题:CPU如何知道写操作或读操作无效,存储器并没有向CPU反馈任何信息啊?<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;为了验证我的想法,我在一个程序中加入下列代码<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;ryx&nbsp;(*(volatile&nbsp;unsigned&nbsp;*)0x0)<br />&nbsp;&nbsp;&nbsp;&nbsp;ryx&nbsp;=&nbsp;0xfd;<br />&nbsp;&nbsp;&nbsp;&nbsp;地址0是Flash地址<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;ryr&nbsp;(*(volatile&nbsp;unsigned&nbsp;*)0x20000000)<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i&nbsp;=&nbsp;ryr;<br />&nbsp;&nbsp;&nbsp;&nbsp;地址0x20000000处并没有存储器。<br />&nbsp;&nbsp;&nbsp;&nbsp;但是,程序执行后并没有产生data&nbsp;abort,我在SYSCFG中已经使能data&nbsp;abort了。<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;难道说书上的说法错了,那么Data&nbsp;Abort到底是如何产生的呢?<br /><br /><br /><br /><br />
wowow 发表于 2007-4-22 10:04 | 显示全部楼层

试试用16位指针访问奇数地址看看

原来我把char型的数组地址赋给short型指针,而数组地址刚好是奇数,就发生了Data&nbsp;Abort。<br /><br />我觉得应该是数据总线检测到访问错误,与有没有存贮器无关。
 楼主| tianying1 发表于 2007-4-22 21:37 | 显示全部楼层

如果你把Cache关掉呢?

又发现了一种说法,说data&nbsp;abort就是dcache&nbsp;abort,而prefetch&nbsp;abort就是icache&nbsp;abort,也就是说这两种abort都与Cache有关<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;您试试把Cache关掉,看看还会不会发生data&nbsp;abort?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

36

帖子

0

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