我是建设基于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
发布评论