打印

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

[复制链接]
8824|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianying1|  楼主 | 2007-4-21 18:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    书上说Data Abort是由于对一个无效地址进行读/写造成的。比如store r0,地址A,如果地址A是一个Flash地址,就会发生data abort;如果从某个地址读取数据,而这个地址上并没有存储器,也会发生data abort.

    问题:CPU如何知道写操作或读操作无效,存储器并没有向CPU反馈任何信息啊?

    为了验证我的想法,我在一个程序中加入下列代码
    #define ryx (*(volatile unsigned *)0x0)
    ryx = 0xfd;
    地址0是Flash地址
    #define ryr (*(volatile unsigned *)0x20000000)
    int i = ryr;
    地址0x20000000处并没有存储器。
    但是,程序执行后并没有产生data abort,我在SYSCFG中已经使能data abort了。
   
    难道说书上的说法错了,那么Data Abort到底是如何产生的呢?




相关帖子

沙发
wowow| | 2007-4-22 10:04 | 只看该作者

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

原来我把char型的数组地址赋给short型指针,而数组地址刚好是奇数,就发生了Data Abort。

我觉得应该是数据总线检测到访问错误,与有没有存贮器无关。

使用特权

评论回复
板凳
tianying1|  楼主 | 2007-4-22 21:37 | 只看该作者

如果你把Cache关掉呢?

又发现了一种说法,说data abort就是dcache abort,而prefetch abort就是icache abort,也就是说这两种abort都与Cache有关
 
   您试试把Cache关掉,看看还会不会发生data abort?

使用特权

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

本版积分规则

23

主题

36

帖子

0

粉丝