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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>ARM</strong> 和 Thumb 交 互 操 作<br />

4.3 C 和 C++ 交 互 操 作 和 胶 合 代 码<br />

可 以 自 由 地 混 合 为 <strong>ARM</strong> 和 Thumb 而 编 译 的 C 和 C++ 代 码 , 但 是 , 在 <strong>ARM</strong> 体<br />

系 结 构 4T 版 中 ,<strong>ARM</strong> 和 Thumb 代 码 之 间 需 要 一 小 段 称 为 胶 合 代 码 的 代 码 , 才<br />

能 执 行 状 态 更 改 。<strong>ARM</strong> 链 接 程 序 在 检 测 到 交 互 操 作 调 用 时 生 成 这 些 交 互 操 作 胶<br />

合 代 码 。<br />

4.3.1 为 交 互 操 作 编 译 代 码<br />

--apcs /interwork 编 译 程 序 选 项 使 <strong>ARM</strong> 编 译 程 序 能 够 编 译 包 括 例 程 的 C 和 C++<br />

模 块 , 而 该 例 程 可 以 由 其 它 处 理 器 状 态 编 译 的 例 程 进 行 调 用 :<br />

armcc --thumb --apcs /interwork<br />

armcc --arm --apcs /interwork<br />

armcc --cpp --thumb --apcs /interwork<br />

armcc --cpp --arm --apcs /interwork<br />

备 注<br />

--arm 为 默 认 选 项 。<br />

为 <strong>ARM</strong> 体 系 结 构 4T 版 上 交 互 操 作 而 编 译 的 模 块 生 成 稍 大 的 代 码 , 通 常 对 于<br />

Thumb 大 2%, 对 于 <strong>ARM</strong> 大 1% 以 下 。 对 于 <strong>ARM</strong> 体 系 结 构 5 版 没 有 区 别 。<br />

在 叶 函 数 ( 其 函 数 体 不 包 含 函 数 的 调 用 ) 中 , 由 编 译 程 序 生 成 的 代 码 的 唯 一 更<br />

改 是 用 BX lr 替 换 MOV pc,lr。 MOV 指 令 不 造 成 必 要 的 状 态 更 改 。<br />

在 Thumb 模 式 下 为 <strong>ARM</strong> 体 系 结 构 4T 版 而 编 译 的 非 叶 函 数 中 , 编 译 程 序 必 须 替<br />

换 单 个 指 令 ( 举 例 说 明 ):<br />

POP {r4,r5,pc}<br />

成 为 序 列 :<br />

POP {r4,r5}<br />

POP {r3}<br />

BX r3<br />

这 对 性 能 有 一 点 影 响 。 为 交 互 操 作 编 译 所 有 源 模 块 , 除 非 能 够 确 保 它 们 永 远 不 会<br />

用 于 交 互 操 作 。<br />

--apcs /interwork 选 项 还 为 编 译 模 块 的 目 标 代 码 区 域 而 设 置 交 互 操 作 属 性 。 链 接<br />

程 序 检 测 此 属 性 并 插 入 相 应 的 胶 合 代 码 。<br />

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

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

Saved successfully!

Ooh no, something went wrong!