在我碰到的那次中,问题主要是因为编译器对不同类型cpu产生的指令类型和代码位置不同造成的。
1、arm9内核中是不支持非对齐访问的,而编译器不能够检查类似于strd和ldrd这样的八字节对齐操作的,所以在arm9中所有用到64位变量的地方都得注意。
2、即使是字访问或者半字访问,如果arm11打开了非对齐访问允许并关闭了非对齐检查(U位和A位,自己在ARM手册的cp15操作中都能查到),也可以正常访问到,但是在arm9中遇到这样的非对齐访问,要么是直接data abort,要么是给出错误数据,导致后续问题。
这两个问题一般是需要用仿真器并且能够读懂汇编之后比较好查。
|