⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 impdet5.htm

📁 ST20 Embedded Toolset R2.0.5用于开发基于ST20芯片机顶盒软件的开发平台,2.0.5版本,国内找不到的.在国外论坛上花了N天才找到!
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Quadralay WebWorks Publisher Professional Edition 6.0.5">
<meta name="TEMPLATEBASE" content="book_html">
<meta name="LASTUPDATED" content="12/04/03 16:06:26">
<title>13.1.3 Structures and unions  </title>

<STYLE TYPE="text/css">
<!--
	span.Signal { text-transform: uppercase; font-family: Verdana }
-->
</STYLE>

</head>

<body link="#3366CC" vlink="#9999CC" text="#000000" alink="#0000CC" bgcolor="#FFFFFF"
background="images/backgrnd.gif">

<p><img src="images/stlogo.gif" width="106" height="83" align="left"
alt="logo here!"> </p>

<table width="331" border="0" align="right" cellpadding="0" cellspacing="0">
  <tr>
    <td><a href="a_refman.htm"><img src="images/navtoc.gif" width="84" height="23"
    border="0" alt="TOC"> </a></td>
    <td><a href="impdet4.htm"><img src="images/navprev.gif" width="80" height="23"
    border="0" alt="PREV"> </a></td>
    <td><a href="impdet6.htm"><img src="images/navnext.gif" width="83" height="23"
    border="0" alt="NEXT"> </a></td>
    <td><a href="a_refmaa.htm"><img src="images/navidx.gif" width="84" height="23"
    border="0" alt="INDEX"> </a></td>
  </tr>
</table>

<p><br clear="all">
</p>

<hr align="left">

<blockquote>
<h3>
  <a name="1204593"> </a><font color="#003366"  face="Verdana, Arial, Helvetica, sans-serif">13.1.3 	 Structures and unions</font>
</h3>


<p>
  <a name="1204594"> </a><font size=2  face="Verdana, Arial, Helvetica, sans-serif">Layout of structures is very much dependent upon the particular compiler and the architecture of the target processor. The rules described here are very specific to the STMicroelectronics ISO (ANSI) C compiler, used by <strong>st20cc</strong> and the ST20 family of processors; they should not be treated as general rules for laying out structures.</font>
</p>


<p>
  <a name="1204595"> </a><font size=2  face="Verdana, Arial, Helvetica, sans-serif">Each field of a union is represented as it would be if it was not in a union.</font>
</p>


<p>
  <a name="1204596"> </a><font size=2  face="Verdana, Arial, Helvetica, sans-serif">The compiler uses the following rules when laying out the fields within a structure.</font>
</p>

<ul>
<p>  <font size=2  face="Verdana, Arial, Helvetica, sans-serif"><li ><a name="1204597"> </a>C requires that structure fields are laid out in memory in the same order that they are in the source code.</font></p>
<p>  <font size=2  face="Verdana, Arial, Helvetica, sans-serif"><li ><a name="1204598"> </a>chars (represented in one byte) may have any alignment.</font></p>
<p>  <font size=2  face="Verdana, Arial, Helvetica, sans-serif"><li ><a name="1204599"> </a>shorts (represented in two bytes) are aligned on an even boundary.</font></p>
<p>  <font size=2  face="Verdana, Arial, Helvetica, sans-serif"><li ><a name="1204600"> </a>Adjacent bit-fields are packed into the same word if possible: the first bit-field is placed in the least significant bits of the word. If there is not enough room left after a previous bit-field, a bit-field is placed in the least significant bits of the next word.</font></p>
<p>  <font size=2  face="Verdana, Arial, Helvetica, sans-serif"><li ><a name="1204601"> </a>Word-sized or larger objects are aligned on a word boundary.</font></p>
<p>  <font size=2  face="Verdana, Arial, Helvetica, sans-serif"><li ><a name="1204602"> </a>Structures and unions are aligned on a word boundary.</font></p>
<p>  <font size=2  face="Verdana, Arial, Helvetica, sans-serif"><li ><a name="1204603"> </a>Arrays are aligned in accordance with the alignment rules of the elements of the array.</font></p>
</ul>

<p>
  <a name="1204604"> </a><font size=2  face="Verdana, Arial, Helvetica, sans-serif"><font size=2 face=Courier><strong>char</strong></font> and <font size=2 face=Courier><strong>short</strong></font> fields are packed into the same word, where possible without breaking any of the above rules.</font>
</p>


<h5>
  <a name="1210547"> </a><i><font color="#003366"  face="Verdana, Arial, Helvetica, sans-serif">Example 1 (default layout)
<br><br>
<table border="0" cellpadding="5" cellspacing="0">
  <caption><b><i><font face="Verdana, Arial, Helvetica, sans-serif"></font></i></b></caption>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210550"> </a><div ><font size=2><font size=2 face=Courier><strong>struct燿爗</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210552"> </a><div ><font size=2><br></font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210554"> </a><div ><font size=2><font size=2 face=Courier><strong>char爃id[8];</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210556"> </a><div ><font size=2>The first byte of <font size=2 face=Courier><strong>hid</strong></font> is on a word boundary (as the first byte of structure is on a word boundary); it occupies 8燽ytes (2 whole words). </font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210558"> </a><div ><font size=2><font size=2 face=Courier><strong>unsigned爏hort爄nuse;</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210560"> </a><div ><font size=2>This occupies the lower two bytes of the following word.</font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210562"> </a><div ><font size=2><font size=2 face=Courier><strong>char爁lags1;</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210564"> </a><div ><font size=2>This is packed into byte 2 of the same word as <font size=2 face=Courier><strong>inuse</strong></font>.</font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210566"> </a><div ><font size=2><font size=2 face=Courier><strong>char爁lags2;</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210568"> </a><div ><font size=2>This is packed into the upper byte of the same word as <font size=2 face=Courier><strong>inuse</strong></font> and <font size=2 face=Courier><strong>flags1</strong></font>.</font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210570"> </a><div ><font size=2><font size=2 face=Courier><strong>unsigned爈ong爐key;</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210572"> </a><div ><font size=2>This occupies the following word.</font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210574"> </a><div ><font size=2><font size=2 face=Courier><strong>unsigned爏hort爐fil;</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210576"> </a><div ><font size=2>This occupies the lower two bytes of the following word.</font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210578"> </a><div ><font size=2><font size=2 face=Courier><strong>long爊pos;</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210580"> </a><div ><font size=2>This has to be allocated on the next word boundary, so two bytes are left unused.</font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210582"> </a><div ><font size=2><font size=2 face=Courier><strong>unsigned爏hort爇mod;</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210584"> </a><div ><font size=2>This occupies the lower two bytes of the following word.</font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210586"> </a><div ><font size=2><font size=2 face=Courier><strong>unsigned爏hort爇bhz;</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210588"> </a><div ><font size=2>This is packed into the upper two bytes of the same word as <font size=2 face=Courier><strong>kmod</strong></font>; 16-bit objects are placed at even addresses (rule 2), not word-addresses.</font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210590"> </a><div ><font size=2><font size=2 face=Courier><strong>unsigned爏hort爎mod;</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210592"> </a><div ><font size=2>This occupies the lower two bytes of the following word.</font></div></font></td>
  </tr>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210594"> </a><div ><font size=2><font size=2 face=Courier><strong>}爏tructure;</strong></font></font></div></font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210596"> </a><div ><font size=2>Two bytes are left unused.</font></div></font></td>
  </tr>
</table>



</font></i>
</h5>


<p>
  <a name="1210768"> </a><font size=2  face="Verdana, Arial, Helvetica, sans-serif">This can be represented diagramatically as follows:
<br><br>
<table border="1" cellpadding="5" cellspacing="0">
  <caption><b><i><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210767"> </a><font face="Helvetica">Figure 28:  Scalar types structures and unions - example 1</font></font></i></b></caption>
  <tr>
    <td><font face="Verdana, Arial, Helvetica, sans-serif"><a name="1210765"> </a><div ><font size=2><img src="images/impdeta.gif" height="226" width="528">
</font></div></font></td>
  </tr>
</table>



</font>
</p>


<h5>
  <a name="1204831"> </a><i><font color="#003366"  face="Verdana, Arial, Helvetica, sans-serif">Example 2 (default layout)</font></i>
</h5>


<p>
  <a name="1204832"> </a><font size=2  face="Verdana, Arial, Helvetica, sans-serif">If the structure fields are reordered, by moving <font size=2 face=Courier><strong>tfil</strong></font> so that it is no longer word aligned, then a more efficient packing could be obtained:</font>
</p>


<a name="1204833"> </a><font size=2 face=Courier><strong>struct d {<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -