当前位置: 技术问答>linux和unix
关于ARM寻址的问题
来源: 互联网 发布时间:2016-05-30
本文导语: 一个32位的arm,外接了2个16位扩展的相当于32位的SDRAM,通常的接法是,arm的A0,A1地址线不接,A2接到sdram的A0地址线,这样做的好处是什么? 这时候,我如果定义了一个char *p;初始话的时候p为3000,0000的地址,那么p+1应...
一个32位的arm,外接了2个16位扩展的相当于32位的SDRAM,通常的接法是,arm的A0,A1地址线不接,A2接到sdram的A0地址线,这样做的好处是什么?
这时候,我如果定义了一个char *p;初始话的时候p为3000,0000的地址,那么p+1应该位3000,0001的地址;可是上述那种连线方法,怎么寻到这个地址的?因为A0,A1线没有接,它变化的幅度是4个地址。
这时候,我如果定义了一个char *p;初始话的时候p为3000,0000的地址,那么p+1应该位3000,0001的地址;可是上述那种连线方法,怎么寻到这个地址的?因为A0,A1线没有接,它变化的幅度是4个地址。
|
这个就取决于 cpu 具体实现了,如果 cpu 有 io bus buffer,那么可以先读取从 0x3000,0000 的一个 cacheline,然后根据具体在 cacheline 中的 off,返回该值给用户,也就是在 io bus buffer 中透明完成分片与重组,用户感觉不到。
不过 arm 是 32 位的,那么也可以用 32 位来访问它吧,根据你的需要将其左移或右移来获取某个字节吧。
不过 arm 是 32 位的,那么也可以用 32 位来访问它吧,根据你的需要将其左移或右移来获取某个字节吧。
|
这样可以保证arm按字节对齐的访问方式.访问3000,0000,3000,0001到3000,0003会一起有反应的.
|
楼主可以把帖子转到嵌入式硬件板块里