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

6.5.2 从 C 安 装 处 理 程 序<br />

开 发 过 程 中 有 时 必 需 从 主 应 用 程 序 直 接 将 异 常 处 理 程 序 安 装 在 向 量 中 。 结 果 , 所<br />

需 的 指 令 编 码 必 须 被 写 到 相 应 的 向 量 地 址 中 。 这 可 由 跳 转 和 载 入 PC 两 种 方 法 来<br />

转 到 该 处 理 程 序 。<br />

跳 转 方 法<br />

所 需 的 指 令 可 按 如 下 方 法 构 成 :<br />

1. 获 取 异 常 处 理 程 序 的 地 址 。<br />

2. 减 去 相 应 向 量 的 地 址 。<br />

3. 减 去 0x8 以 便 预 取 。<br />

4. 将 结 果 右 移 两 位 给 出 一 个 字 的 偏 移 , 而 不 是 一 个 字 节 的 偏 移 。<br />

5. 测 试 其 高 八 位 为 清 除 , 确 保 结 果 仅 为 24 位 长 ( 因 为 跳 转 的 偏 移 被 限 制 为<br />

此 长 度 )。<br />

6. 把 它 与 0xEA000000 ( 跳 转 指 令 操 作 码 ) 进 行 逻 辑 “ 或 ” 运 算 , 生 成 要 放 在<br />

向 量 中 的 值 。<br />

示 例 6-4 展 示 了 实 现 该 算 法 的 C 函 数 。 它 占 用 了 以 下 几 个 自 变 量 :<br />

• 处 理 程 序 的 地 址 ;<br />

• 将 处 理 程 序 安 装 在 其 中 的 向 量 地 址 。<br />

该 函 数 可 以 安 装 处 理 程 序 并 返 回 该 向 量 的 初 始 内 容 。 这 个 结 果 可 以 用 来 为 一 个<br />

特 定 的 异 常 创 建 一 系 列 的 处 理 程 序 。 详 细 信 息 请 参 阅 第 6-41 页 的 链 结 异 常 处 理<br />

程 序 。<br />

示 例 6-4<br />

unsigned Install_Handler (unsigned routine, unsigned *vector)<br />

/* Updates contents of 'vector' to contain branch instruction */<br />

/* to reach ’routine’ from ’vector’. Function return value is */<br />

/* original contents of 'vector'.*/<br />

/* NB: ’Routine’ must be within range of 32MB from ’vector’.*/<br />

{ unsigned vec, oldvec;<br />

vec = ((routine - (unsigned)vector - 0x8)>>2);<br />

if ((vec & 0xFF000000))<br />

{<br />

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

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

Saved successfully!

Ooh no, something went wrong!