我有用於Cortex-A5對齊訪問例外中的某些問題的Cortex-A5對齊訪問異常
基本系統信息吹
- 我和d緩存啓用。
- 禁用的MMU。
- 固件基地
在開發DMA驅動程序代碼,我寫了下面的C代碼。
UINT32 DMA_InstMOV(UINT8 *buf, tENC_RD rd, UINT32 val)
{
buf[0] = CMD_DMAMOV;
buf[1] = rd;
*((UINT32 *)&buf[2]) = val; // this line is exception occur
return SIZE_DMAMOV;
}
Dissamber上面的代碼來檢查它們如下
DMA_InstMOV
0x00000bf8: e1a03000 .0.. MOV r3,r0
0x00000bfc: e3a000bc .... MOV r0,#0xbc
0x00000c00: e5c30000 .... STRB r0,[r3,#0]
0x00000c04: e5c31001 .... STRB r1,[r3,#1]
0x00000c08: e5832002 . .. STR r2,[r3,#2]
0x00000c0c: e3a00006 .... MOV r0,#6
0x00000c10: e12fff1e ../. BX lr
R3值是0x08040000 STR指令與未對齊地址異常執行(數據中止)發生。 Cortex A5不支持未對齊訪問?
In DDI0406C_b_arm_architecture_reference_manual.pdf(表A3-1加載/存儲指令的對齊要求) LDM,STR不支持未對齊訪問。 因此發生數據異常。
但我仍然有一些問題
此驅動程序代碼中的Cortex-R4核心工作良好。它沒有任何問題。 拆解代碼是相同的。 這更令人困惑
許多linux驅動程序也使用上面的代碼。 如果MMU已打開,哪個可以解決這個問題?
讓我知道什麼是我的工作?
你能顯示一些成功完成此操作的linux驅動程序代碼嗎? –