01.12.2014 Views

RealView Compilation Tools Developer Guide - ARM Information ...

RealView Compilation Tools Developer Guide - ARM Information ...

RealView Compilation Tools Developer Guide - ARM Information ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

简 介<br />

例 如 :<br />

1. 创 建 一 个 文 件 foo.c, 它 包 括 :<br />

__packed struct mystruct {<br />

int aligned_i;<br />

short aligned_s;<br />

int unaligned_i;<br />

};<br />

struct mystruct S1;<br />

int foo (int a, short b)<br />

{<br />

S1.aligned_i=a;<br />

S1.aligned_s=b;<br />

return S1.unaligned_i;<br />

}<br />

2. 使 用 armcc -c -Otime foo.c 编 译 。 所 生 成 的 代 码 为 :<br />

MOV r2,r0<br />

LDR r0,|L1.84|<br />

MOV r12,r2,LSR #8<br />

STRB r2,[r0,#0]<br />

STRB r12,[r0,#1]<br />

MOV r12,r2,LSR #16<br />

STRB r12,[r0,#2]<br />

MOV r12,r2,LSR #24<br />

STRB r12,[r0,#3]<br />

MOV r12,r1,LSR #8<br />

STRB r1,[r0,#4]<br />

STRB r12,[r0,#5]<br />

ADD r0,r0,#6<br />

BIC r3,r0,#3<br />

AND r0,r0,#3<br />

LDMIA r3,{r3,r12}<br />

MOV r0,r0,LSL #3<br />

MOV r3,r3,LSR r0<br />

RSB r0,r0,#0x20<br />

ORR r0,r3,r12,LSL r0<br />

BX lr<br />

然 而 , 可 以 给 编 译 程 序 更 多 的 信 息 , 使 其 能 知 道 哪 个 字 段 是 对 齐 的 , 哪 个<br />

字 段 不 是 。 为 此 , 必 须 将 未 对 齐 字 段 声 明 为 __packed, 并 从 struct 本 身 除<br />

去 __packed 属 性 。 这 是 推 荐 的 方 法 , 并 且 是 保 证 struct 中 自 然 对 齐 成 员 快<br />

速 存 取 的 唯 一 方 法 。 而 且 , 哪 个 字 段 是 未 对 齐 的 也 更 清 楚 , 但 在 struct 中<br />

增 加 或 删 除 字 段 时 需 要 小 心 。<br />

3. 现 在 , 修 改 foo.c 中 的 结 构 定 义 为 :<br />

<strong>ARM</strong> DUI 0203BSC © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 1-7

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!