23.10.2014 Views

RealView - ARM Information Center

RealView - ARM Information Center

RealView - ARM Information Center

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

命 令 参 考<br />

7.7.9 EXTERN<br />

EXTERN 命 令 为 汇 编 程 序 提 供 一 个 未 在 当 前 汇 编 代 码 中 定 义 的 名 称 。<br />

EXTERN 与 IMPORT 非 常 类 似 , 只 是 如 果 在 当 前 汇 编 代 码 中 未 找 到 其 引 用 , 则 不 导 入<br />

该 名 称 ( 请 参 阅 第 7-65 页 的 IMPORT 和 第 7-61 页 的 EXPORT 或 GLOBAL)。<br />

语 法<br />

EXTERN symbol{[WEAK]}<br />

其 中 :<br />

symbol 是 在 一 个 单 独 汇 编 的 源 文 件 、 目 标 文 件 或 库 中 定 义 的 一 个 符 号 名 。<br />

符 号 名 是 区 分 大 小 写 的 。<br />

[WEAK]<br />

用 法<br />

如 果 符 号 未 在 其 它 文 件 中 定 义 , 防 止 链 接 程 序 产 生 错 误 信 息 。 也 防<br />

止 链 接 程 序 搜 索 还 未 包 括 的 库 。<br />

在 链 接 时 , 将 名 称 确 定 为 在 一 个 单 独 的 目 标 文 件 中 定 义 的 符 号 。 该 符 号 被 当 作 一<br />

个 程 序 地 址 。 如 果 未 指 定 [WEAK], 那 么 如 果 在 链 接 时 没 有 找 到 相 应 的 符 号 , 则 链<br />

接 程 序 产 生 一 个 错 误 。<br />

如 果 指 定 了 [WEAK] 且 在 链 接 时 没 有 找 到 相 应 的 符 号 :<br />

• 如 果 该 引 用 是 一 个 B 或 BL 指 令 的 目 标 , 则 将 下 一 指 令 的 地 址 作 为 该 符 号 的<br />

值 。 这 样 就 有 效 地 使 B 或 BL 指 令 变 成 一 个 NOP。<br />

• 否 则 , 该 符 号 的 值 取 为 零 。<br />

示 例<br />

此 例 测 试 检 查 是 否 已 链 接 C++ 库 , 并 根 据 结 果 执 行 条 件 跳 转 。<br />

AREA Example, CODE, READONLY<br />

EXTERN __CPP_INITIALIZE[WEAK] ; If C++ library linked, gets the address of<br />

; __CPP_INITIALIZE function.<br />

LDR r0,=__CPP_INITIALIZE ; If not linked, address is zeroed.<br />

CMP r0,#0 ; Test if zero.<br />

BEQ nocplusplus ; Branch on the result.<br />

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

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

Saved successfully!

Ooh no, something went wrong!