[ZLG-ARM] ARM内存中数据是如何放置的?

[复制链接]
2325|2
 楼主| cbqcgq 发表于 2008-4-2 21:35 | 显示全部楼层 |阅读模式
我在程序中定义了一个数据结构类型,并用此类型定义了一个数据结构,如下:<br />&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;struct<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//同步ID<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;ID_COM0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;ID_COM1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;ID_COM2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;ID_COM3;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//版本号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;EDIT_ID1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;EDIT_ID2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;EDIT_ID3;<br />&nbsp;&nbsp;&nbsp;&nbsp;}ID_SET;<br />&nbsp;&nbsp;&nbsp;&nbsp;ID_SET&nbsp;Id;<br />仿真运行时发现定义的Id的地址为奇地址,0x0c007867;<br />对于ARM来讲,当选择ARM模式或者THUMB模式,小端对齐,选择16位的SDRAM,那么给变量分配地址时,这个变量的地址是任意形式的还是位数一定为0?<br />我的理解是:<br />a,ARM是32位系统,如果选择ARM模式,小端对齐,指令地址最后两位必须是00;<br />b,如果存储器选择16位,那么给变量(包括全局变量)分配的地址单元是偶地址。例如:INT8U&nbsp;tmp;那么这个tmp所在的内存单元可能是0x0c00_1200,但是不可能是0x0c00_1201.<br /><br />请高人指点!
lyl831015 发表于 2008-4-4 14:04 | 显示全部楼层

你的理解是对的

数据的存储都是字对齐的。<br />
zlgarm 发表于 2008-4-8 09:39 | 显示全部楼层

TO cbqcgq

cbqcgq您好:<br />&nbsp;&nbsp;&nbsp;&nbsp;ARM处理器支持对齐存放的半字或字数据的存取:以能被4整除的地址开始连续的4个字节构成一个字,特征是Bit1=0,Bit0=0;从偶数地址开始连续的2个字节构成一个半字,特征是Bit0=0。ARM指令的长度是一个字,Thumb指令的长度是半个字。<br />By&nbsp;zlgarm_glh
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

53

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部