同步外部中止对ARM [英] Synchronous External Abort on ARM

查看:2333
本文介绍了同步外部中止对ARM的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是建设基于ARM的Cortex A9 PANDABOARD裸机应用程序,和我取指令中止频繁。当我倾倒IFSR注册我0x1008。我读过的参考手册,据我所知,1008是同步外部中止。问题是同步的外部中止手段,它从何而来?感谢您的帮助。

I was building a bare metal application on ARM Cortex A9 Pandaboard, and I got Instruction Fetch Abort frequently. When I dump IFSR Register I got 0x1008. I've read the reference manual, and I understand that 1008 was Synchronous External Abort. The problem is what synchronous external abort means and where does it come from? Thanks for your help.

推荐答案

的ARMv7 ARM 部分VMSA内存中止作为全面涵盖这是人们所期望的(因为它的建筑的权威定义),但略低于14页总结;

The ARMv7 ARM section "VMSA Memory aborts" covers this as thoroughly as one would expect (given that it's the authoritative definition of the architecture), but to summarise in slightly less than 14 pages;

中止表示CPU试图让一个内存访问,这是什么原因,无法完成这样引发一个例外。

An abort means the CPU tried to make a memory access, which for whatever reason, couldn't be completed so raises an exception.

外部中止是从,那么,内外兼修的处理器,即在公共汽车上的东西。换句话说,访问在MMU没有过错,出门上车,要么和一些设备或互联本身回来说:嘿,我不能处理这个。

An external abort is one from, well, externally to the processor, i.e. something on the bus. In other words, the access didn't fault in the MMU, went out onto the bus, and either some device or the interconnect itself came back and said "hey, I can't deal with this".

A 同步外部中断意味着你是相当幸运的,因为它不会是完全可怕的调试 - 在一个prefetch的情况下中止,这意味着 IFAR 是要包含一个有效的VA的错误指令,让你清楚知道什么原因造成的。不愉快的选择是一个的异步的外部中止,这比一个中断多一点的说:嘿,是你做了,而以前实际上并没有工作。不,我不知道什么是要么。

A synchronous external abort means you're rather fortunate, in that it's not going to be utterly hideous to debug - in the case of a prefetch abort, it means the IFAR is going to contain a valid VA for the faulting instruction, so you know exactly what caused it. The unpleasant alternative is an asynchronous external abort, which is little more than an interrupt to say "hey, something you did a while ago didn't actually work. No I don't know what is was either."

所以,你想执行从东西,你的想说明的是内存,但并非如此。没有任何进一步的细节,实际原因可能是从typoed硬codeD地址有的话,狡猾的页表,陈旧的TLB项,高速缓存一致性等等。

So, you're trying to execute instructions from something that you think is memory, but isn't. Without any further details, the actual cause could be anything from a typoed hard-coded address, to dodgy page tables, stale TLB entries, cache coherency, etc. etc.

这篇关于同步外部中止对ARM的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆