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 />

1.2.5 移 植 代 码 并 检 测 非 对 齐 存 取<br />

其 它 体 系 结 构 ( 如 x86 CISC) 所 遗 留 的 代 码 , 可 能 会 使 用 在 <strong>ARM</strong> 处 理 器 上 不<br />

起 作 用 的 指 针 执 行 对 非 对 齐 数 据 的 存 取 。 这 是 不 可 移 植 的 代 码 , 在 期 望 对 齐 数 据<br />

的 RISC 体 系 结 构 中 , 必 须 识 别 并 更 改 此 类 存 取 才 能 使 其 发 生 正 确 存 取 数 据 。<br />

识 别 非 对 齐 存 取 可 能 会 很 困 难 , 因 为 使 用 非 对 齐 地 址 进 行 的 载 入 或 存 储 操 作 产<br />

生 不 正 确 的 动 作 。 追 踪 到 底 是 哪 部 分 的 C 源 程 序 造 成 了 这 个 问 题 是 很 困 难 的 。<br />

具 有 完 整 存 储 器 管 理 单 元 (MMUs) 的 <strong>ARM</strong> 处 理 器 , 例 如 ,<strong>ARM</strong>920T , 支 持 可<br />

选 的 对 齐 检 测 , 处 理 器 检 测 每 一 次 的 存 取 以 确 保 其 被 正 确 地 对 齐 。 如 果 出 现 不 正<br />

确 的 对 齐 存 取 , MMU 产 生 数 据 中 断 。<br />

对 于 <strong>ARM</strong>7TDMI ® 等 简 单 的 内 核 , 建 议 在 ASIC/ASSP 内 部 实 现 对 齐 检 测 。 可 以<br />

使 用 相 对 <strong>ARM</strong> 内 核 是 额 外 的 外 部 硬 件 体 来 完 成 这 一 点 , 由 其 监 控 每 次 数 据 的 存<br />

取 规 模 和 存 取 地 址 总 线 的 最 低 有 效 位 。 在 非 对 齐 存 取 的 情 况 下 , 可 以 通 过 配 置<br />

ASIC/ASSP 来 产 生 中 断 信 号 。 <strong>ARM</strong> Limited 建 议 从 其 它 体 系 结 构 移 植 代 码 的<br />

ASIC/ASSP 设 备 中 要 包 含 这 样 的 逻 辑 。<br />

如 果 将 系 统 配 置 为 非 对 齐 存 取 进 行 中 断 , 则 必 须 安 装 数 据 中 断 异 常 处 理 程 序 。 出<br />

现 非 对 齐 存 取 时 , 进 入 数 据 中 断 处 理 程 序 , 并 由 此 识 别 位 于 (r14-8) 的 出 错 数 据<br />

存 取 指 令 。<br />

一 旦 识 别 出 , 必 须 通 过 改 变 C 源 程 序 来 修 复 数 据 的 存 取 。 使 用 下 列 指 令 可 有 条<br />

件 地 完 成 修 复 :<br />

#ifdef __arm<br />

#define PACKED __packed<br />

#else<br />

#define PACKED<br />

#endif<br />

:<br />

PACKED int *pi;<br />

:<br />

由 于 代 码 大 小 和 性 能 上 的 开 销 , 最 好 尽 可 能 少 采 用 存 取 非 对 齐 数 据 。<br />

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

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

Saved successfully!

Ooh no, something went wrong!