📄 arm数据对齐 ----- ads1_2编译_linux技术文章_linux_操作系统.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0070)http://www.diybl.com/course/6_system/linux/Linuxjs/20071019/78326.html -->
<HTML><HEAD><TITLE>ARM数据对齐 ----- ADS1.2编译_Linux技术文章_Linux_操作系统</TITLE>
<META http-equiv=Content-Type content=text/html;charset=gb2312>
<META content=www.diybl.com,DIY部落版权所有 name=Copyright>
<META content="ARM数据对齐 ----- ADS1.2编译_Linux技术文章_Linux_操作系统" name=keywords>
<META content="ARM数据对齐 ----- ADS1.2编译_Linux技术文章_		 <span styl.."
name=description>
<META content=index,follow name=robots>
<META content=INDEX,FOLLOW name=GOOGLEBOT><LINK href="article2.css"
type=text/css rel=stylesheet><LINK
href="ARM数据对齐 ----- ADS1_2编译_Linux技术文章_Linux_操作系统.files/article2.css"
type=text/css rel=stylesheet>
<SCRIPT src="ARM数据对齐 ----- ADS1_2编译_Linux技术文章_Linux_操作系统.files/article.js"
type=text/javascript></SCRIPT>
<SCRIPT src="ARM数据对齐 ----- ADS1_2编译_Linux技术文章_Linux_操作系统.files/1060103.js"
type=text/javascript></SCRIPT>
<META content="MSHTML 6.00.2900.5512" name=GENERATOR></HEAD>
<BODY><INPUT type=hidden value=78326 name=passage_id><INPUT type=hidden
value=1060103 name=catalog_id>
<DIV id=wrap>
<DIV class=top_bar align=center>
<TABLE cellSpacing=0 width=935>
<TBODY>
<TR>
<TD><A href="http://www.diybl.com/">网站首页</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://news.diybl.com/" target=_blank>新闻首页</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/1_web/">网页设计</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/2_picdesign/">图形动画</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/3_program/">软件编程</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/4_webprogram/">网站开发</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/5_office/">办公软件</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/6_system/">操作系统</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/7_databases/">数据库</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/webjsh/">网络技术</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/comshiti/">认证考试</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/fwzl/">范文资料</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/course/hack/">黑客攻防</A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://www.diybl.com/chm/" target=_blank><FONT
color=red>书籍教程</FONT></A></TD>
<TD class=top_bar_sline></TD>
<TD><A href="http://bbs.diybl.com/"
target=_blank>进入论坛</A></TD></TR></TBODY></TABLE></DIV>
<TABLE class=adNone id=PublicRelation cellSpacing=0 cellPadding=0 width=950
border=0>
<TBODY>
<TR>
<TD vAlign=top width=864>
<DIV class=logo><A href="http://www.diybl.com/" target=_blank><IMG
height=60 src="ARM数据对齐 ----- ADS1_2编译_Linux技术文章_Linux_操作系统.files/logo.gif"
width=200></A></DIV>
<DIV class=ad_f1 id=ad_f1>
<SCRIPT
src="ARM数据对齐 ----- ADS1_2编译_Linux技术文章_Linux_操作系统.files/ad_f1.js"></SCRIPT>
</DIV><!--<div class="top_bar2">-->
<UL class=menu>
<LI><A href="http://www.diybl.com/course/6_system/linux/"
target=_blank><SPAN>Linux</SPAN></A>
<LI><A href="http://www.diybl.com/course/6_system/linux/Linuxxl/"
target=_blank><SPAN>Linux系列教程</SPAN></A>
<LI><A href="http://www.diybl.com/course/6_system/linux/linuxjq/"
target=_blank><SPAN>Linux应用技巧</SPAN></A>
<LI><A
href="http://www.diybl.com/course/6_system/linux/Linuxjs/849ftkfztk.html"
target=_blank><SPAN>Linux技术文章</SPAN></A></LI></UL><!--</div>--></TD>
<TD width=6></TD>
<TD vAlign=top align=middle width=100>
<DIV class=hotNCout>
<DIV class=hotNC>
<UL>
<LI><A
href="javascript:window.external.addFavorite('http://www.diybl.com/','DIY部落');">加入收藏</A>
<LI><A href="http://www.diybl.com/map.html" target=_blank>网站地图</A>
<LI><A href="http://www.diybl.com/chm/" target=_blank>书籍教程</A>
<LI><A href="http://www.diybl.com/user/register.asp"
target=_blank>会员注册</A> </LI></UL></DIV></DIV></TD></TR></TBODY></TABLE>
<DIV class=split style="HEIGHT: 3px"></DIV>
<DIV class=ad_ftop id=ad_ftop>
<SCRIPT
src="ARM数据对齐 ----- ADS1_2编译_Linux技术文章_Linux_操作系统.files/ad_ftop.js"></SCRIPT>
</DIV>
<DIV class=subNav>
<DIV style="FLOAT: right"><INPUT name=wd1> <INPUT onclick=tosearch(document.all.wd1); type=button value=" 千寻搜索 "></DIV><SPAN><A
href="http://www.diybl.com/">DIY部落</A> >> <A
href="http://www.diybl.com/course/6_system/">操作系统</A> >> <A
href="http://www.diybl.com/course/6_system/linux/">Linux</A> >> <A
href="http://www.diybl.com/course/6_system/linux/Linuxjs/849ftkfztk.html">Linux技术文章</A>
>> 正文</SPAN></DIV>
<DIV class=split></DIV>
<DIV class=main>
<DIV class=lc_blue>
<DIV class=lcBlk>
<H1>ARM数据对齐 ----- ADS1.2编译</H1>
<DIV class=from_info>http://www.diybl.com/ 2007-10-19 网络 点击:<SPAN
style="FONT-WEIGHT: bold; COLOR: #ff0000">
<SCRIPT src="ARM数据对齐 ----- ADS1_2编译_Linux技术文章_Linux_操作系统.files/p_count.htm"
lanuage="javascript"></SCRIPT>
</SPAN> <A
href="http://www.diybl.com/course/6_system/linux/Linuxjs/20071019/78326.html#comment">[
评论 ]</A></DIV>
<DIV class=artibody>
<DIV class=ad_f2 id=ad_f2>
<SCRIPT
src="ARM数据对齐 ----- ADS1_2编译_Linux技术文章_Linux_操作系统.files/ad_f2.js"></SCRIPT>
</DIV>
<DIV class=ad_f3 id=ad_f3>
<SCRIPT
src="ARM数据对齐 ----- ADS1_2编译_Linux技术文章_Linux_操作系统.files/ad_f3.js"></SCRIPT>
</DIV>文章搜索: <INPUT maxLength=255 size=30 name=wd2> <INPUT onclick=tosearch(document.all.wd2); type=button value=千寻搜索><A
class=redlink
href="javascript:self.location='/user/chm/rar.asp?c_id=48375'">【点击打包该文章】</A>
<SCRIPT
src="ARM数据对齐 ----- ADS1_2编译_Linux技术文章_Linux_操作系统.files/art_top.js"></SCRIPT>
<P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN></SPAN><SPAN><FONT
size=5>ARM</FONT></SPAN><FONT size=5><SPAN
style="FONT-FAMILY: 宋体">数据对齐</SPAN><SPAN lang=EN-US><SPAN>
</SPAN>-----<SPAN> </SPAN>ADS1.2</SPAN><SPAN
style="FONT-FAMILY: 宋体">编译</SPAN></FONT></P>
<P class=MsoNormal><SPAN lang=EN-US><O:P></O:P></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt"><!--[if
!supportLists]--><FONT size=4><STRONG><SPAN lang=EN-US
style="FONT-SIZE: 14pt"><SPAN>一、<SPAN
style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">
</SPAN></SPAN></SPAN></STRONG><STRONG><SPAN
style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">问题来源</SPAN></STRONG></FONT><!--[endif]--><STRONG><SPAN
lang=EN-US style="FONT-SIZE: 14pt"><O:P></O:P></SPAN></STRONG></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">且看下面一段代码:</SPAN></P>
<P><SPAN lang=EN-US>char buff[8] = {0x12, 0x34, 0x56, 0x78,
0x<ST1:CHMETCNV unitname="a" sourcevalue="9" hasspace="False" negative="False"
numbertype="1" tcsc="0" w:st="on">9a</ST1:CHMETCNV>, 0xab, 0xbc,
0xcd};</SPAN></P>
<P><SPAN lang=EN-US>int v32, *p32;</SPAN></P>
<P><SPAN lang=EN-US>short v16, *p16;</SPAN></P>
<P><SPAN lang=EN-US>p32 = (int*)&( buff[1] ); </SPAN></P>
<P><SPAN lang=EN-US>p16 = (short*)&( buff[1] ); </SPAN></P>
<P><SPAN lang=EN-US>v32 = *p32; </SPAN></P>
<P><SPAN lang=EN-US>v16 = *p16; </SPAN></P>
<P>我们来看看在<SPAN lang=EN-US>ADS1.2</SPAN>编译后,执行的结果如下:</P>
<P><SPAN lang=EN-US>v32 = 0x12785634</SPAN></P>
<P><SPAN lang=EN-US>v16 = 0x1234</SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋体">不管数据模式是大端结构,还是小端结构,结果都不对。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><O:P></O:P></SPAN></P>
<P class=MsoNormal
style="FONT-WEIGHT: bold; MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt"><!--[if
!supportLists]--><FONT size=4><SPAN lang=EN-US><SPAN>二、</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋体">分析原因</SPAN></FONT><!--[endif]--></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">默认情况下,</SPAN><SPAN lang=EN-US>ADS</SPAN><SPAN
style="FONT-FAMILY: 宋体">编译器使用的是数据类型的自然边界对其方式。数据的自然对其方式是指:如果该数据类型是</SPAN><SPAN
lang=EN-US>n</SPAN><SPAN style="FONT-FAMILY: 宋体">个字节的,那么该数据类型就按</SPAN><SPAN
lang=EN-US>n</SPAN><SPAN style="FONT-FAMILY: 宋体">字节对齐。例如:</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>
</SPAN>1.</SPAN><SPAN style="FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US>Usigned
char </SPAN><SPAN style="FONT-FAMILY: 宋体">是</SPAN><SPAN lang=EN-US>1</SPAN><SPAN
style="FONT-FAMILY: 宋体">字节的,那么数据就按</SPAN><SPAN lang=EN-US>1</SPAN><SPAN
style="FONT-FAMILY: 宋体">字节对齐。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 42pt"><SPAN
style="FONT-FAMILY: 宋体">定义两个变量如下:</SPAN><SPAN lang=EN-US> usigned
char<SPAN> </SPAN>a08,b08;</SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 42pt; TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">如果</SPAN><SPAN lang=EN-US>a08</SPAN><SPAN
style="FONT-FAMILY: 宋体">所在的地址为,</SPAN><SPAN lang=EN-US>0x80000002</SPAN><SPAN
style="FONT-FAMILY: 宋体">,则</SPAN><SPAN lang=EN-US>b08</SPAN><SPAN
style="FONT-FAMILY: 宋体">所在的地址为</SPAN><SPAN lang=EN-US>0x80000003</SPAN><SPAN
style="FONT-FAMILY: 宋体">,两个变量是连续分配的。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><SPAN>
</SPAN>2</SPAN><SPAN style="FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US>Usigned
short </SPAN><SPAN style="FONT-FAMILY: 宋体">是</SPAN><SPAN
lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体">字节的,那么数据就按</SPAN><SPAN
lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体">字节对齐。</SPAN></P>
<P class=MsoNormal><SPAN
lang=EN-US><SPAN>
</SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">定义两个变量如下:</SPAN><SPAN lang=EN-US>
usigned char<SPAN> </SPAN>a08;</SPAN></P>
<P class=MsoNormal><SPAN
lang=EN-US><SPAN>
</SPAN>Usigned short<SPAN> </SPAN>a16;</SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 42pt; TEXT-INDENT: -42pt"><SPAN
lang=EN-US><SPAN>
</SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">如果</SPAN><SPAN
lang=EN-US>a08</SPAN><SPAN style="FONT-FAMILY: 宋体">所在的地址为</SPAN><SPAN
lang=EN-US>0x80000002</SPAN><SPAN style="FONT-FAMILY: 宋体">,那么</SPAN><SPAN
lang=EN-US>a16</SPAN><SPAN style="FONT-FAMILY: 宋体">所在的地址为</SPAN><SPAN
lang=EN-US>0x80000004</SPAN><SPAN style="FONT-FAMILY: 宋体">,</SPAN><SPAN
lang=EN-US>a16</SPAN><SPAN style="FONT-FAMILY: 宋体">不会分配到</SPAN><SPAN
lang=EN-US>0x80000003</SPAN><SPAN
style="FONT-FAMILY: 宋体">,默认情况下,编译器为</SPAN><SPAN lang=EN-US>usigned
short</SPAN><SPAN style="FONT-FAMILY: 宋体">类型的变量分配到</SPAN><SPAN
lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体">的倍数的地址处。</SPAN></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -