简 介 例 如 , 如 果 代 码 从 指 针 指 向 的 地 址 0x8006 载 入 数 据 , 则 期 望 从 0x8006、 0x8007、 0x8008 和 0x8009 载 入 字 节 的 内 容 。 但 是 , 在 <strong>ARM</strong> 处 理 器 上 , 这 个 存 取 载 入 了 0x8004、 0x8005、 0x8006 和 0x8007 字 节 的 循 环 移 位 内 容 。 因 而 , 如 果 想 将 指 针 定 义 到 一 个 可 在 任 何 地 址 ( 即 非 自 然 对 齐 ) 的 字 中 , 那 么 在 定 义 该 指 针 时 , 必 须 使 用 __packed 限 定 符 来 定 义 指 针 : __packed int *pi; // pointer to unaligned int 然 后 ,<strong>ARM</strong> 编 译 程 序 不 使 用 LDR, 而 是 生 成 正 确 存 取 该 值 的 代 码 , 而 不 必 考 虑 指 针 对 齐 状 况 。 所 生 成 的 代 码 是 字 节 存 取 的 一 个 序 列 , 或 者 取 决 于 编 译 选 项 、 跟 变 量 对 齐 相 关 的 移 位 和 屏 蔽 。 这 会 导 致 性 能 和 代 码 大 小 的 损 失 。 备 注 千 万 不 要 用 __packed 来 存 取 存 储 器 映 射 的 外 围 寄 存 器 , 因 为 <strong>ARM</strong> 编 译 程 序 可 使 用 多 个 存 储 器 存 取 来 重 新 获 取 数 据 。 因 而 , 可 对 附 近 的 位 置 进 行 存 取 , 它 们 可 能 对 应 于 其 它 外 部 寄 存 器 。 当 使 用 了 位 字 段 时 , <strong>ARM</strong> 编 译 程 序 当 前 存 取 整 个 部 分 , 而 不 只 是 所 指 定 的 字 段 。 1.2.3 结 构 中 的 未 对 齐 字 段 与 全 局 变 量 位 于 其 自 然 尺 寸 边 界 相 同 , 结 构 中 的 字 段 也 如 此 。 就 是 说 编 译 程 序 经 常 要 在 字 段 间 插 入 填 充 字 节 来 确 保 字 段 对 齐 。 当 编 译 程 序 插 入 填 充 字 节 时 , 使 用 选 项 -W+s 编 译 产 生 一 个 警 告 。 有 时 , 可 能 不 希 望 这 样 的 情 况 发 生 。 可 使 用 __packed 限 定 符 来 创 建 字 段 之 间 没 有 填 充 字 节 的 结 构 , 且 这 些 结 构 需 要 非 对 齐 存 取 。 如 果 <strong>ARM</strong> 编 译 程 序 知 道 特 定 结 构 的 对 齐 , 它 可 以 确 定 所 存 取 的 字 段 是 否 在 一 个 充 填 结 构 中 是 对 齐 的 。 在 这 些 情 况 下 , 编 译 程 序 尽 可 能 地 采 用 更 有 效 的 对 齐 字 或 半 字 存 取 。 否 则 , 编 译 程 序 使 用 多 个 对 齐 存 储 器 存 取 (LDR、STR、LDM 和 STM) 与 固 定 移 位 和 屏 蔽 相 结 合 来 存 取 存 储 器 中 正 确 的 字 节 。 对 非 对 齐 元 素 的 存 取 是 通 过 内 联 还 是 通 过 调 用 一 个 函 数 来 完 成 , 由 编 译 程 序 -Ospace( 默 认 , 调 用 一 个 函 数 ) 和 -Otime( 执 行 非 对 齐 存 取 内 联 ) 选 项 来 控 制 。 1-6 © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 <strong>ARM</strong> DUI 0203BSC
简 介 例 如 : 1. 创 建 一 个 文 件 foo.c, 它 包 括 : __packed struct mystruct { int aligned_i; short aligned_s; int unaligned_i; }; struct mystruct S1; int foo (int a, short b) { S1.aligned_i=a; S1.aligned_s=b; return S1.unaligned_i; } 2. 使 用 armcc -c -Otime foo.c 编 译 。 所 生 成 的 代 码 为 : MOV r2,r0 LDR r0,|L1.84| MOV r12,r2,LSR #8 STRB r2,[r0,#0] STRB r12,[r0,#1] MOV r12,r2,LSR #16 STRB r12,[r0,#2] MOV r12,r2,LSR #24 STRB r12,[r0,#3] MOV r12,r1,LSR #8 STRB r1,[r0,#4] STRB r12,[r0,#5] ADD r0,r0,#6 BIC r3,r0,#3 AND r0,r0,#3 LDMIA r3,{r3,r12} MOV r0,r0,LSL #3 MOV r3,r3,LSR r0 RSB r0,r0,#0x20 ORR r0,r3,r12,LSL r0 BX lr 然 而 , 可 以 给 编 译 程 序 更 多 的 信 息 , 使 其 能 知 道 哪 个 字 段 是 对 齐 的 , 哪 个 字 段 不 是 。 为 此 , 必 须 将 未 对 齐 字 段 声 明 为 __packed, 并 从 struct 本 身 除 去 __packed 属 性 。 这 是 推 荐 的 方 法 , 并 且 是 保 证 struct 中 自 然 对 齐 成 员 快 速 存 取 的 唯 一 方 法 。 而 且 , 哪 个 字 段 是 未 对 齐 的 也 更 清 楚 , 但 在 struct 中 增 加 或 删 除 字 段 时 需 要 小 心 。 3. 现 在 , 修 改 foo.c 中 的 结 构 定 义 为 : <strong>ARM</strong> DUI 0203BSC © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 1-7
- Page 1 and 2: RealView 编 译 工 具 2.0 版
- Page 3 and 4: 目 录 RealView 编 译 工 具
- Page 5 and 6: 序 言 本 序 言 介 绍 RealVie
- Page 7 and 8: 序 言 第 6 章 处 理 处 理
- Page 9 and 10: 序 言 反 馈 ARM Limited 欢 迎
- Page 11 and 12: 第 1 章 简 介 本 章 介 绍
- Page 13 and 14: 简 介 cached_dhry 该 目 录 包
- Page 15: 简 介 1.2 通 用 程 序 设 计
- Page 19 and 20: 简 介 1.2.5 移 植 代 码 并
- Page 21 and 22: 简 介 嵌 入 式 系 统 通 常
- Page 23 and 24: 简 介 中 断 (IRQ) 处 理 器
- Page 25 and 26: 第 2 章 嵌 入 式 软 件 开
- Page 27 and 28: 嵌 入 式 软 件 开 发 在 Int
- Page 29 and 30: 嵌 入 式 软 件 开 发 备 注
- Page 31 and 32: 嵌 入 式 软 件 开 发 2.2.4
- Page 33 and 34: 嵌 入 式 软 件 开 发 然 后
- Page 35 and 36: 嵌 入 式 软 件 开 发 示 例
- Page 37 and 38: 嵌 入 式 软 件 开 发 2.4 调
- Page 39 and 40: 嵌 入 式 软 件 开 发 2.4.3
- Page 41 and 42: 嵌 入 式 软 件 开 发 2.4.5
- Page 43 and 44: 嵌 入 式 软 件 开 发 如 果
- Page 45 and 46: 嵌 入 式 软 件 开 发 LDR r2,
- Page 47 and 48: 嵌 入 式 软 件 开 发 2.5 复
- Page 49 and 50: 嵌 入 式 软 件 开 发 备 注
- Page 51 and 52: 嵌 入 式 软 件 开 发 示 例
- Page 53 and 54: 嵌 入 式 软 件 开 发 2.5.6
- Page 55 and 56: 嵌 入 式 软 件 开 发 } int_e
- Page 57 and 58: 嵌 入 式 软 件 开 发 2.6 进
- Page 59 and 60: 嵌 入 式 软 件 开 发 示 例
- Page 61 and 62: 嵌 入 式 软 件 开 发 示 例
- Page 63 and 64: 嵌 入 式 软 件 开 发 2.6.3
- Page 65 and 66: 第 3 章 使 用 过 程 调 用
- Page 67 and 68:
使 用 过 程 调 用 标 准 3.1
- Page 69 and 70:
使 用 过 程 调 用 标 准 3.2
- Page 71 and 72:
使 用 过 程 调 用 标 准 图
- Page 73 and 74:
使 用 过 程 调 用 标 准 3.4
- Page 75 and 76:
使 用 过 程 调 用 标 准 3.5
- Page 77 and 78:
使 用 过 程 调 用 标 准 使
- Page 79 and 80:
使 用 过 程 调 用 标 准 3.7
- Page 81 and 82:
使 用 过 程 调 用 标 准 3.9
- Page 83 and 84:
使 用 过 程 调 用 标 准 要
- Page 85 and 86:
使 用 过 程 调 用 标 准 3.9
- Page 87 and 88:
第 4 章 ARM 和 Thumb 交 互 操
- Page 89 and 90:
ARM 和 Thumb 交 互 操 作 异
- Page 91 and 92:
ARM 和 Thumb 交 互 操 作 4.2
- Page 93 and 94:
ARM 和 Thumb 交 互 操 作 第
- Page 95 and 96:
ARM 和 Thumb 交 互 操 作 4.2.5
- Page 97 and 98:
ARM 和 Thumb 交 互 操 作 备
- Page 99 and 100:
ARM 和 Thumb 交 互 操 作 4.3.2
- Page 101 and 102:
ARM 和 Thumb 交 互 操 作 使
- Page 103 and 104:
ARM 和 Thumb 交 互 操 作 按
- Page 105 and 106:
第 5 章 混 合 使 用 C、 C++
- Page 107 and 108:
混 合 使 用 C、C++ 和 汇 编
- Page 109 and 110:
混 合 使 用 C、C++ 和 汇 编
- Page 111 and 112:
混 合 使 用 C、C++ 和 汇 编
- Page 113 and 114:
混 合 使 用 C、C++ 和 汇 编
- Page 115 and 116:
混 合 使 用 C、C++ 和 汇 编
- Page 117 and 118:
混 合 使 用 C、C++ 和 汇 编
- Page 119 and 120:
混 合 使 用 C、C++ 和 汇 编
- Page 121 and 122:
混 合 使 用 C、C++ 和 汇 编
- Page 123 and 124:
混 合 使 用 C、C++ 和 汇 编
- Page 125 and 126:
混 合 使 用 C、C++ 和 汇 编
- Page 127 and 128:
混 合 使 用 C、C++ 和 汇 编
- Page 129 and 130:
混 合 使 用 C、C++ 和 汇 编
- Page 131 and 132:
混 合 使 用 C、C++ 和 汇 编
- Page 133 and 134:
混 合 使 用 C、C++ 和 汇 编
- Page 135 and 136:
第 6 章 处 理 处 理 器 异
- Page 137 and 138:
处 理 处 理 器 异 常 6.1.1
- Page 139 and 140:
处 理 处 理 器 异 常 6.2 确
- Page 141 and 142:
处 理 处 理 器 异 常 6.3 进
- Page 143 and 144:
处 理 处 理 器 异 常 6.3.3
- Page 145 and 146:
处 理 处 理 器 异 常 从 数
- Page 147 and 148:
处 理 处 理 器 异 常 6.5 安
- Page 149 and 150:
处 理 处 理 器 异 常 6.5.2
- Page 151 and 152:
处 理 处 理 器 异 常 } *vect
- Page 153 and 154:
处 理 处 理 器 异 常 ; LDMFD
- Page 155 and 156:
处 理 处 理 器 异 常 这 使
- Page 157 and 158:
处 理 处 理 器 异 常 其 参
- Page 159 and 160:
处 理 处 理 器 异 常 示 例
- Page 161 and 162:
处 理 处 理 器 异 常 6.7 中
- Page 163 and 164:
处 理 处 理 器 异 常 BLEQ MO
- Page 165 and 166:
处 理 处 理 器 异 常 6.7.3
- Page 167 and 168:
处 理 处 理 器 异 常 可 通
- Page 169 and 170:
处 理 处 理 器 异 常 上 下
- Page 171 and 172:
处 理 处 理 器 异 常 6.9 未
- Page 173 and 174:
处 理 处 理 器 异 常 6.11
- Page 175 and 176:
处 理 处 理 器 异 常 6.12
- Page 177 and 178:
处 理 处 理 器 异 常 6.13
- Page 179 and 180:
第 7 章 调 试 通 信 通 道
- Page 181 and 182:
调 试 通 信 通 道 7.2 目 标
- Page 183 and 184:
调 试 通 信 通 道 7.3.2 目
- Page 185 and 186:
调 试 通 信 通 道 AREA Storag
- Page 187 and 188:
调 试 通 信 通 道 7.5 从 Thu
- Page 189 and 190:
词 汇 表 Angel Angel 是 一 个
- Page 191 and 192:
词 汇 表 库 (Library) 由 汇
- Page 193 and 194:
索 引 本 索 引 中 的 条 目
- Page 195 and 196:
索 引 L 链 接 和 交 互 操