25.11.2014 Views

RealView ARMulator ISS User Guide - ARM Information Center

RealView ARMulator ISS User Guide - ARM Information Center

RealView ARMulator ISS User Guide - ARM Information Center

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.

<strong>RealView</strong><br />

®<br />

<strong><strong>ARM</strong>ulator</strong><br />

<strong>ISS</strong><br />

1.3 <br />

<br />

Copyright © 2002, 2003 <strong>ARM</strong> Limited<br />

<strong>ARM</strong> DUI 0207ASC-00<br />

版 权 所 有


<strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong><br />

<br />

Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有<br />

<br />

本 书 进 行 了 以 下 更 改<br />

<br />

<br />

2002 年 8 月 A 1.3 版<br />

<br />

标 有 ® 或 的 词 语 和 徽 标 是 <strong>ARM</strong> Limited 拥 有 的 注 册 商 标 或 商 标<br />

是 其 相 关 所 有 者 的 商 标<br />

此 处 提 及 的 其 它 品 牌 和 名 称 可 能<br />

除 非 事 先 得 到 版 权 所 有 人 的 书 面 许 可<br />

部 或 部 分 信 息<br />

否 则 不 得 以 任 何 形 式 改 编 或 复 制 本 文 档 包 含 或 产 品 描 述 的 全<br />

本 文 档 描 述 的 产 品 将 进 行 持 续 的 开 发 和 改 进 <strong>ARM</strong> 将 如 实 提 供 所 有 产 品 特 性 以 及 本 文 档 包 含 的 使<br />

用 方 法 但 是 所 有 暗 示 或 明 示 的 担 保 包 括 但 不 限 于 对 特 定 用 途 适 销 性 或 适 用 性 的 暗 示 担 保 均<br />

不 包 括 在 内<br />

本 文 档 的 目 的 仅 在 于 帮 助 读 者 使 用 产 品 对 由 于 使 用 本 文 档 中 的 任 何 信 息 这 些 信 息 中 的 任 何 错 误<br />

或 遗 漏 或 任 何 不 正 确 的 使 用 产 品 而 导 致 的 任 何 损 失 或 损 害 <strong>ARM</strong> Limited 概 不 负 责<br />

ii Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


目 录<br />

<strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> <br />

<br />

关 于 本 书 ......................................................................................................... vi<br />

反 馈 ................................................................................................................ ix<br />

1 <br />

2 <br />

3 <br />

<br />

1.1 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 概 述 .................................................................... 1-2<br />

<strong><strong>ARM</strong>ulator</strong> <br />

2.1 关 于 <strong><strong>ARM</strong>ulator</strong> ........................................................................................... 2-2<br />

2.2 <strong><strong>ARM</strong>ulator</strong> 组 件 ........................................................................................... 2-3<br />

2.3 跟 踪 器 ......................................................................................................... 2-5<br />

2.4 Profiler ....................................................................................................... 2-12<br />

2.5 <strong><strong>ARM</strong>ulator</strong> 周 期 类 型 .................................................................................. 2-14<br />

2.6 页 表 模 块 .................................................................................................... 2-19<br />

2.7 缺 省 存 储 器 模 型 ......................................................................................... 2-27<br />

2.8 使 用 映 射 文 件 进 行 存 储 器 建 模 ................................................................... 2-28<br />

2.9 Semihosting .............................................................................................. 2-31<br />

2.10 外 围 设 备 模 型 ............................................................................................ 2-32<br />

<strong><strong>ARM</strong>ulator</strong> <br />

3.1 <strong><strong>ARM</strong>ulator</strong> 扩 展 套 件 .................................................................................... 3-2<br />

3.2 写 新 外 围 设 备 模 型 ....................................................................................... 3-6<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 iii


3.3 构 建 新 模 型 .................................................................................................. 3-8<br />

3.4 配 置 <strong><strong>ARM</strong>ulator</strong> 以 使 用 新 模 型 .................................................................. 3-10<br />

3.5 配 置 <strong><strong>ARM</strong>ulator</strong> 以 禁 用 模 型 ..................................................................... 3-12<br />

4 <br />

<strong><strong>ARM</strong>ulator</strong> <br />

4.1 <strong><strong>ARM</strong>ulator</strong> 模 型 .......................................................................................... 4-2<br />

4.2 与 内 核 进 行 通 信 .......................................................................................... 4-3<br />

4.3 基 本 模 型 接 口 ............................................................................................ 4-12<br />

4.4 协 处 理 器 模 型 接 口 ..................................................................................... 4-15<br />

4.5 异 常 .......................................................................................................... 4-26<br />

4.6 事 件 .......................................................................................................... 4-29<br />

4.7 处 理 程 序 ................................................................................................... 4-33<br />

4.8 存 储 器 访 问 函 数 ........................................................................................ 4-38<br />

4.9 事 件 调 度 函 数 ............................................................................................ 4-40<br />

4.10 通 用 函 数 ................................................................................................... 4-41<br />

4.11 访 问 调 试 器 ................................................................................................ 4-54<br />

4.12 跟 踪 器 ....................................................................................................... 4-58<br />

4.13 映 射 文 件 ................................................................................................... 4-60<br />

4.14 <strong><strong>ARM</strong>ulator</strong> 配 置 文 件 ................................................................................. 4-64<br />

4.15 ToolConf ................................................................................................... 4-69<br />

4.16 外 围 设 备 参 考 ............................................................................................ 4-74<br />

<br />

iv Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


此 前 言 对 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> ® 指 令 集 模 拟 器 (<strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong>) 目 标 进<br />

行 了 介 绍 它 包 含 以 下 内 容<br />

• 第 vi 页 关 于 本 书<br />

• 第 ix 页 反 馈<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 v


前 言<br />

<br />

本 书 提 供 了 有 关 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 即 <strong>ARM</strong> 处 理 器 模 拟 器 的 参 考 信 息<br />

<br />

本 书 专 为 使 用 远 程 调 试 接 口 1.5.1 兼 容 调 试 器 的 所 有 开 发 人 员 而 写 前 提 是 假 定<br />

您 是 一 位 有 经 验 的 软 件 开 发 人 员 并 且 您 熟 悉 ADS v1.2 Getting Started <strong>Guide</strong> 或<br />

<strong>RealView</strong> Compilation Tools v1.2 Getting Started <strong>Guide</strong> 中 描 述 的 <strong>ARM</strong> 开 发 工 具<br />

<br />

本 书 由 以 下 章 节 组 成<br />

1 简 介<br />

阅 读 本 章 以 简 单 了 解 本 书 内 容 以 及 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 的 概 要<br />

描 述<br />

第 2 章 <strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

阅 读 本 章 以 简 单 了 解 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong><br />

拟 器<br />

即 <strong>ARM</strong> 指 令 集 模<br />

第 3 章 编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

阅 读 本 章 以 帮 助 您 记 录 您 对 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 的 扩 展 和 修 改<br />

第 4 章 <strong><strong>ARM</strong>ulator</strong> 参 考<br />

本 章 提 供 帮 助 您 使 用 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 的 更 多 详 细 内 容<br />

vi Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


前 言<br />

<br />

本 书 使 用 了 以 下 印 刷 惯 例<br />

斜 体 突 出 显 示 重 要 注 释 介 绍 特 殊 术 语 表 示 内 部 交 叉 链 接 和 引 用<br />

突 出 显 示 界 面 要 素 如 菜 单 名 称 必 要 时 也 用 于 强 调 说 明 列 表 中<br />

的 重 点 以 及 <strong>ARM</strong> 处 理 器 信 号 名 称<br />

等 宽 表 示 可 以 从 键 盘 输 入 的 文 本 如 命 令 文 件 和 程 序 名 以 及 源 代 码<br />

等 宽 表 示 允 许 的 命 令 或 选 项 缩 写 可 只 输 入 下 划 线 标 记 的 文 本 无 需<br />

输 入 命 令 或 选 项 的 全 名<br />

等 宽 斜 体<br />

<br />

表 示 此 处 的 命 令 和 函 数 变 量 可 用 特 定 值 代 替<br />

表 示 使 用 示 例 代 码 以 外 的 语 言 关 键 字<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 vii


前 言<br />

<br />

本 部 分 列 出 了 <strong>ARM</strong> Limited 和 第 三 方 发 布 的<br />

发 代 码 附 加 信 息 的 相 关 读 物<br />

可 提 供 有 关 <strong>ARM</strong> 系 列 处 理 器 开<br />

<strong>ARM</strong> 将 定 期 对 其 文 档 进 行 更 新 和 更 正 有 关 最 新 勘 误 表 附 录 以 及 <strong>ARM</strong> 常 见<br />

问 题 请 访 问 http://www.arm.com<br />

<strong>ARM</strong> <br />

本 书 包 含 特 定 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 的 信 息 有 关 将 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong><br />

与 调 试 器 配 合 使 用 的 信 息 请 参 阅 调 试 器 说 明 文 档<br />

viii Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


前 言<br />

<br />

<strong>ARM</strong> Limited 乐 于 收 到 有 关 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 及 其 文 档 的 任 何 反 馈<br />

<strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> <br />

如 果 您 对 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 有 任 何 疑 问 请 与 供 应 商 联 系 为 便 于 供 应<br />

商 提 供 快 捷 有 用 的 答 复 请 提 供<br />

• 您 的 姓 名 和 公 司<br />

• 产 品 序 列 号<br />

• 您 所 用 的 版 本 的 详 情<br />

• 您 运 行 的 平 台 的 详 情 如 硬 件 平 台 操 作 系 统 类 型 和 版 本<br />

• 再 现 问 题 发 生 的 独 立 样 本 代 码<br />

• 您 期 望 发 生 和 实 际 发 生 的 情 况 的 详 细 说 明<br />

• 您 使 用 的 命 令 包 括 所 有 命 令 行 选 项<br />

• 解 释 问 题 的 示 例 输 出<br />

• 工 具 的 版 本 字 符 串 包 括 版 本 号 和 日 期<br />

<br />

如 果 您 对 本 书 有 任 何 问 题 请 发 送 电 子 邮 件 到 errata@arm.com 并 提 供<br />

• 文 档 标 题<br />

• 文 档 编 号<br />

• 您 有 意 见 的 页 码<br />

• 您 的 意 见 的 简 单 说 明<br />

我 们 还 欢 迎 您 对 新 增 和 改 进 之 处 提 出 一 般 建 议<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 ix


前 言<br />

x Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


第 1 章<br />

<br />

本 章 介 绍 了 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> 指 令 集 模 拟 器 (<strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong>) 1.3 版<br />

提 供 的 调 试 支 持 工 具 本 章 包 含 以 下 内 容<br />

• 第 1-2 页 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 概 述<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 1-1


简 介<br />

1.1 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> <br />

您 可 以 使 用 远 程 调 试 接 口 (RDI) 1.5.1 兼 容 调 试 器 调 试 您 的 原 型 软 件<br />

主 计 算 机 上 运 行 并 连 接 至 运 行 原 型 软 件 的 目 标 系 统<br />

调 试 器 在<br />

您 的 目 标 系 统 可 以 是 以 下 任 何 一 个<br />

• 软 件 模 拟 器 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 模 拟 <strong>ARM</strong> 硬 件<br />

• <strong>ARM</strong> 评 估 或 开 发 板<br />

• 基 于 <strong>ARM</strong> 的 第 三 方 开 发 板<br />

• 您 自 己 设 计 的 基 于 <strong>ARM</strong> 的 硬 件<br />

本 文 档 只 介 绍 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 有 关 其 它 目 标 系 统 的 详 情 请 参 阅 该 目<br />

标 的 说 明 文 档<br />

1.1.1 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong><br />

<strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong> 后 文 称 为 <strong><strong>ARM</strong>ulator</strong> 随 <strong>ARM</strong> 调 试 器 提 供 是 一 个<br />

独 立 产 品 <strong><strong>ARM</strong>ulator</strong> 在 与 调 试 器 相 同 的 主 计 算 机 上 运 行 并 且 包 括 与 调 试 器<br />

通 信 的 工 具<br />

<strong><strong>ARM</strong>ulator</strong> 是 一 个 指 令 集 模 拟 器 (<strong>ISS</strong>) 它 与 存 储 器 系 统 和 外 围 设 备 一 起 可 以<br />

模 拟 指 令 集 和 <strong>ARM</strong> 处 理 器 的 结 构 您 还 可 以 将 其 扩 展 至 模 拟 其 它 外 围 设 备 和<br />

自 定 义 存 储 器 系 统 请 参 阅 第 3 章 编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

您 可 以 将 <strong><strong>ARM</strong>ulator</strong> 用 于 软 件 开 发 也 可 以 将 其 作 为 以 <strong>ARM</strong> 为 目 标 的 软 件 的<br />

基 准 程 序 它 可 以 模 拟 指 令 集 和 计 数 周 期 作 为 基 准 程 序 的 精 度 会 受 到 限 制<br />

请 参 阅 第 2-2 页 精 度<br />

1.1.2 Semihosting<br />

您 可 以 使 用 主 计 算 机 上 的 I/O 设 备 而 非 目 标 系 统 提 供 的 设 备 这 就 是 所 谓 的<br />

semihosting 有 关 详 情 请 参 阅 <strong>RealView</strong> Compilation Tools v1.2 Compilers and<br />

Libraries <strong>Guide</strong><br />

缺 省 情 况 下<br />

<strong>ARM</strong> C 和 C++ 代 码 使 用 semihosting 设 备<br />

要 从 汇 编 代 码 访 问 semihosting 设 备 请 使 用 semihosting 软 件 中 断 (SWI)<br />

<strong><strong>ARM</strong>ulator</strong> 中 止 semihosting SWI 并 从 主 计 算 机 请 求 服 务<br />

1-2 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


第 2 章<br />

<strong><strong>ARM</strong>ulator</strong> <br />

本 章 描 述 <strong><strong>ARM</strong>ulator</strong> 即 提 供 <strong>ARM</strong> 处 理 器 软 件 模 拟 的 程 序 集 成 它 包 含 以 下<br />

内 容<br />

• 第 2-2 页 关 于 <strong><strong>ARM</strong>ulator</strong><br />

• 第 2-3 页 <strong><strong>ARM</strong>ulator</strong> 组 件<br />

• 第 2-5 页 跟 踪 器<br />

• 第 2-12 页 Profiler<br />

• 第 2-14 页 <strong><strong>ARM</strong>ulator</strong> 周 期 类 型<br />

• 第 2-19 页 页 表 模 块<br />

• 第 2-27 页 缺 省 存 储 器 模 型<br />

• 第 2-28 页 使 用 映 射 文 件 进 行 存 储 器 建 模<br />

• 第 2-31 页 Semihosting<br />

• 第 2-32 页 外 围 设 备 模 型<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-1


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.1 <strong><strong>ARM</strong>ulator</strong><br />

2.1.1 <br />

<strong><strong>ARM</strong>ulator</strong> 是 一 种 指 令 集 模 拟 器 它 可 以 模 拟 指 令 集 和 各 种 <strong>ARM</strong> 处 理 器 结 构<br />

要 在 <strong><strong>ARM</strong>ulator</strong> 上 运 行 软 件 请 通 过 RDI 1.5.1 兼 容 调 试 器 进 行 访 问<br />

<strong><strong>ARM</strong>ulator</strong> 适 用 于 软 件 开 发 并 可 作 为 以 <strong>ARM</strong> 为 目 标 的 软 件 的 基 准 程 序 它 可<br />

以 模 拟 指 令 集 和 计 数 周 期 请 参 阅 第 2-14 页 <strong><strong>ARM</strong>ulator</strong> 周 期 类 型 作 为 基 准<br />

程 序 的 精 度 和 周 期 计 数 精 度 会 受 到 一 定 限 制 请 参 阅 精 度<br />

<strong><strong>ARM</strong>ulator</strong> 可 提 供 使 全 部 C 或 C++ 程 序 在 模 拟 系 统 上 运 行 所 需 的 全 部 工 具<br />

有 关 <strong><strong>ARM</strong>ulator</strong> 支 持 的 C 库 semihosting SWI 的 信 息 另 请 参 阅 <strong>RealView</strong><br />

Compilation Tools v1.2 Compilers and Libraries <strong>Guide</strong><br />

<strong><strong>ARM</strong>ulator</strong> 不 能 达 到 100% 的 精 度 因 为 它 并 不 是 基 于 真 实 处 理 器 的 一 般 而<br />

言 不 是 很 复 杂 非 高 速 缓 存 的 <strong>ARM</strong> 处 理 器 内 核 模 型 精 度 较 高 而 带 高 速 缓<br />

存 的 那 些 内 核 模 型 可 能 与 实 际 硬 件 的 精 度 不 完 全 相 同<br />

<strong><strong>ARM</strong>ulator</strong> 适 合 用 作 系 统 设 计 的 软 件 开 发 工 具 但 如 果 需 要 100% 的 精 度 则 必<br />

须 使 用 硬 件 模 型<br />

在 以 下 情 况 下 您 可 以 使 用 <strong><strong>ARM</strong>ulator</strong> 作 为 基 准 程 序<br />

• 您 正 在 建 模 的 内 核 没 有 高 速 缓 存<br />

• 您 只 需 要 近 似 比 较<br />

<strong><strong>ARM</strong>ulator</strong> 不 会 在 高 速 缓 存 内 核 上 建 立 Asynchronous Mode 模 型 如 果 您 在<br />

CP15 中 设 置 了 控 制 位 以 便 指 定 Asynchronous Mode <strong><strong>ARM</strong>ulator</strong> 将 会 发 出 警 告<br />

Set to Asynch mode, WARNING this is not supported<br />

您 可 以 继 续 调 试<br />

但 <strong><strong>ARM</strong>ulator</strong> 将 完 全 按 照 Synchronous Mode 的 方 式 运 行<br />

2-2 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.2 <strong><strong>ARM</strong>ulator</strong> <br />

<strong><strong>ARM</strong>ulator</strong> 由 一 系 列 模 块 组 成 可 作 为 动 态 链 接 库 Windows 的 .dll 文 件 或<br />

共 享 对 象 Linux 或 Solaris 的 .so 文 件 或 所 有 平 台 上 的 .sdi 文 件 来 执 行<br />

主 模 块 是<br />

• <strong>ARM</strong> 处 理 器 内 核 模 型<br />

• 处 理 器 所 用 存 储 器 的 模 型<br />

这 些 部 件 中 的 每 一 个 均 有 备 选 的 预 定 义 模 块<br />

储 器 模 型 组 合<br />

您 可 以 选 择 要 使 用 的 处 理 器 和 存<br />

其 中 一 个 预 定 义 的 存 储 器 模 型 mapfile 允 许 您 详 细 指 定 模 拟 的 存 储 器 系 统<br />

mapfile 允 许 您 指 定 窄 内 存 和 等 待 状 态 请 参 阅 第 2-28 页 使 用 映 射 文 件 进 行 存<br />

储 器 建 模<br />

另 外 还 有 其 它 您 可 以 使 用 的 预 定 义 模 块<br />

• 建 立 附 加 硬 件 模 型 例 如 协 处 理 器 或 外 围 设 备<br />

• 建 立 预 安 装 的 软 件 模 型 例 如 C 库 semihosting SWI 处 理 程 序 或 操 作 系 统<br />

• 抽 取 调 试 或 基 准 信 息 请 参 阅 第 2-5 页 跟 踪 器 和 第 2-12 页 Profiler<br />

您 可 以 使 用 不 同 的 预 定 义 模 块 组 合 和 不 同 的 存 储 器 映 射<br />

<strong><strong>ARM</strong>ulator</strong><br />

请 参 阅 第 2-4 页 配 置<br />

如 果 提 供 的 模 块 不 符 合 您 的 要 求 您 也 可 以 写 自 己 的 模 块 或 者 编 辑 预 定 义 模 块<br />

的 副 本 例 如<br />

• 建 立 不 同 外 围 设 备 协 处 理 器 或 操 作 系 统 的 模 型<br />

• 建 立 不 同 存 储 器 系 统 的 模 型<br />

• 提 供 其 它 调 试 或 基 准 信 息<br />

一 些 模 块 的 源 代 码 已 提 供 您 可 以 这 些 模 块 为 示 例 来 写 自 己 的 模 块 请 参 阅<br />

第 3 章 编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-3


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.2.1 <strong><strong>ARM</strong>ulator</strong><br />

您 可 以 从 RDI 1.5.1 兼 容 调 试 器 配 置 一 些 <strong><strong>ARM</strong>ulator</strong> 的 详 细 资 料<br />

要 进 行 其 它 配 置 调 整 您 必 须 编 辑 .ami 文 件 副 本 随 <strong><strong>ARM</strong>ulator</strong> 提 供 以 下 .ami<br />

文 件<br />

• bustypes.ami<br />

• default.ami<br />

• example1.ami<br />

• peripherals.ami<br />

• processors.ami<br />

• vfp.ami<br />

这 些 文 件 位 于<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/<strong><strong>ARM</strong>ulator</strong>/1.3/release/platform<br />

在 此 路 径 中<br />

• platform 指<br />

— Windows win_32-pentium<br />

— Linux linux-pentium<br />

— Solaris solaris-sparc<br />

• 对 于 Windows 请 用 \ 替 换 /<br />

如 果 要 写 自 己 的 任 何 <strong><strong>ARM</strong>ulator</strong> 模 型 请 先 生 成 其 它 的 .ami 文 件 以 允 许 配 置<br />

您 的 模 型 有 关 如 何 操 作 的 详 情 请 参 阅 第 4-64 页 <strong><strong>ARM</strong>ulator</strong> 配 置 文 件<br />

调 试 器 启 动 <strong><strong>ARM</strong>ulator</strong> 后 <strong><strong>ARM</strong>ulator</strong> 会 读 取 环 境 变 量 <strong>ARM</strong>CONF 中 定 义 的 所 有 路<br />

径 上 的 .ami 文 件 初 始 设 置 为 <strong><strong>ARM</strong>ulator</strong> 目 录<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/<strong><strong>ARM</strong>ulator</strong>/1.3/release/platform<br />

以 下 小 节 依 次 描 述 每 个 预 定 义 模 块 以 及 如 何 配 置 这 些 模 块<br />

<br />

如 果 .ami 文 件 中 的 配 置 设 置 与 您 在 调 试 器 中 的 设 置 发 生 冲 突<br />

试 器 设 置<br />

则 将 优 先 采 用 调<br />

2-4 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.3 <br />

您 可 以 使 用 跟 踪 器 跟 踪 指 令 存 储 器 访 问 和 事 件 由 配 置 文 件 peripherals.ami<br />

来 控 制 跟 踪 内 容 请 参 阅 第 4-64 页 <strong><strong>ARM</strong>ulator</strong> 配 置 文 件<br />

本 节 包 括 以 下 小 节<br />

• 调 试 器 跟 踪 支 持<br />

• 第 2-6 页 解 释 跟 踪 文 件 输 出<br />

• 第 2-10 页 配 置 跟 踪 器<br />

2.3.1 <br />

如 果 您 的 调 试 器 不 直 接 支 持 跟 踪 功 能 跟 踪 器 将 使 用 RDI 记 录 级 别 变 量 的<br />

第 4 位 来 启 用 或 禁 用 跟 踪 功 能 记 录 级 别 变 量 为 以 下 其 中 之 一<br />

• $rdi_log<br />

• <strong>RealView</strong> 调 试 器 中 的 @mdebug_rdi_log<br />

• 调 试 器 当 量<br />

有 关 通 过 <strong><strong>ARM</strong>ulator</strong> 使 用 跟 踪 功 能 的 详 情<br />

请 参 阅 调 试 器 文 档<br />

<br />

跟 踪 器 由 调 试 器 开 启 或 关 闭<br />

但 由 .ami 文 件 控 制<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-5


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.3.2 <br />

本 节 描 述 如 何 解 释 从 跟 踪 器 输 出 的 信 息<br />

<br />

以 下 示 例 显 示 了 部 分 跟 踪 文 件<br />

Date: Thu Aug 9 16:41:36 2001<br />

Source: Armul<br />

Options: Trace Instructions (Disassemble) Trace Memory Cycles<br />

BNR4O___ A0000000 00000C1E<br />

BNR8O___ 00008000 E28F8090 E898000F<br />

BSR8O___ 00008008 E0800008 E0811008<br />

BSR8O___ 00008010 E0822008 E0833008<br />

BSR8O___ 00008018 E240B001 E242C001<br />

MNR4O___ 00008000 E28F8090<br />

IT 00008000 e28f8090 ADD r8,pc,#0x90 ; #0x8098<br />

MNR4O___ 00008004 E898000F<br />

IT 00008004 e898000f LDMIA r8,{r0-r3}<br />

BNR4O___ A0000000 00000C1E<br />

BNR8O___ 00008098 00007804 00007828<br />

BSR8O___ 00008080 10844009 E3C44003<br />

BSR8O___ 00008088 E2555004 24847004<br />

BSR8O___ 00008090 8AFFFFFC EAFFFFF2<br />

MNR8____ 00008098 00007804 00007828<br />

BNR8O___ 000080A0 00007828 00007840<br />

BSR8O___ 000080A8 E3A00840 E1A0F00E<br />

BSR8O___ 000080B0 E92D400C E28F0014<br />

BSR8O___ 000080B8 E5901000 E5900004<br />

MNR8____ 000080A0 00007828 00007840<br />

MNR4O___ 00008008 E0800008<br />

IT 00008008 e0800008 ADD r0,r0,r8<br />

MNR4O___ 0000800C E0811008<br />

IT 0000800C e0811008 ADD r1,r1,r8<br />

MNR4O___ 00008010 E0822008<br />

以 下 类 型 的 行 可 以 出 现 在 跟 踪 文 件 中<br />

• 第 2-7 页 跟 踪 存 储 器 M 行<br />

• 第 2-8 页 跟 踪 指 令 I 行<br />

• 第 2-8 页 跟 踪 事 件 E 行<br />

• 第 2-9 页 跟 踪 寄 存 器 R 行<br />

• 第 2-9 页 跟 踪 总 线 B 行<br />

2-6 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

<br />

M <br />

M 行 表 示<br />

• 存 储 器 访 问 用 于 不 带 片 上 存 储 器 的 内 核<br />

• 片 内 存 储 器 访 问 用 于 带 片 内 存 储 器 的 内 核<br />

它 们 具 有 以 下 通 用 存 储 器 访 问 格 式<br />

M[O][L][S] <br />

其 中<br />

<br />

<br />

<br />

表 示 周 期 类 型<br />

S 连 续<br />

N 不 连 续<br />

表 示 读 或 写 操 作<br />

R 读<br />

W 写<br />

表 示 存 储 器 访 问 的 大 小<br />

4 字 32 位<br />

2 半 字 16 位<br />

1 字 节 8 位<br />

O 表 示 操 作 码 获 取 指 令 获 取<br />

L 表 示 锁 定 的 访 问 SWP 指 令<br />

S<br />

D<br />

表 示 推 测 性 的 指 令 获 取<br />

表 示 <strong>ARM</strong>9TDMI 数 据 接 口 的 DMORE 信 号 是 HIGH<br />

按 十 六 进 制 格 式 给 出 的 地 址 例 如 00008008<br />

<br />

可 显 示 为 以 下 一 种 模 式<br />

value 给 定 读 / 写 值 例 如 EB00000C<br />

(wait) 表 示 nWAIT 为 LOW 相 对 于 插 入 等 待 状 态 而 言<br />

(abort) 表 示 ABORT 为 HIGH 相 对 于 中 止 访 问 而 言<br />

跟 踪 存 储 器 行 也 可 以 有 以 下 格 式<br />

MI<br />

MC<br />

用 于 空 闲 周 期<br />

用 于 协 处 理 器 周 期<br />

MIO 用 于 Harvard 体 系 结 构 处 理 器 如 <strong>ARM</strong>9TDMI 指 令 总 线 上 的 空<br />

闲 周 期<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-7


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

<br />

I <br />

跟 踪 指 令 (I) 行 的 格 式 如 下<br />

[ IT | IS ] []<br />

例 如<br />

IT 00008044 e04ec00f SUB<br />

r12,r14,pc<br />

其 中<br />

IT<br />

表 示 指 令 被 执 行<br />

IS 表 示 指 令 被 跳 过 几 乎 所 有 <strong>ARM</strong> 指 令 都 能 有 条 件 执 行<br />

按 十 六 进 制 格 式 显 示 指 令 地 址 例 如 00008044<br />

按 十 六 进 制 格 式 给 出 操 作 码 例 如 e04ec00f<br />

表 示 反 汇 编 如 果 指 令 已 被 执 行 则 大 写 例 如 SUB<br />

r12,r14,pc 此 为 可 选 项 可 通 过 在 peripherals.ami 中 设 置<br />

Disassemble=True 启 用<br />

Thumb 代 码 中 带 链 接 的 分 支 显 示 为 两 个 条 目<br />

第 一 个 标 记 为<br />

1st instr of BL pair.<br />

<br />

E <br />

事 件 (E) 行 的 格 式 如 下<br />

E <br />

例 如<br />

E 00000048 00000000 10005<br />

其 中<br />

给 出 一 对 字 的 第 一 个 例 如 pc 值<br />

给 出 一 对 字 的 第 二 个 例 如 中 断 地 址<br />

给 出 事 件 编 号 例 如 0x10005 这 是 MMU Event_ITLBWalk<br />

事 件 在 第 4-29 页 事 件 中 有 描 述<br />

2-8 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

<br />

R <br />

事 件 (R) 行 的 格 式 如 下<br />

R =[,=[...]]<br />

例 如<br />

R r14=20000060, cpsr=200000d3<br />

其 中<br />

<br />

<br />

当 前 指 令 的 结 果 寄 存 器 , 保 存 指 令 执 行 结 果<br />

是 中 的 新 内 容<br />

<br />

B <br />

总 线 (B) 行 的 格 式 与 M 行 的 格 式 相 同<br />

B 行 表 示 片 外 存 储 器 访 问<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-9


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.3.3 <br />

<strong><strong>ARM</strong>ulator</strong> 外 围 设 备 配 置 文 件 (peripherals.ami) 中 有 关 于 跟 踪 器 的 部 分<br />

{ Default_Tracer=Tracer<br />

;; Output options - can be plaintext to file, binary to file or to RDI log<br />

;; window. (Checked in the order RDILog, File, BinFile.)<br />

;VERBOSE=True<br />

;RDILog=True<br />

RDILog=False<br />

File=armul.trc<br />

BinFile=armul.trc<br />

;; Tracer options - what to trace<br />

TraceInstructions=True<br />

TraceRegisters=False<br />

OpcodeFetch=True<br />

;;Normally True is useful, but sometimes it's too expensive.<br />

TraceMemory=True<br />

;TraceMemory=False<br />

TraceIdle=True<br />

TraceNonAccounted=False<br />

TraceEvents=False<br />

;;If there is a non-core bus, do we trace it (as well).<br />

TraceBus=True<br />

;; Flags - disassemble instructions; start up with tracing enabled;<br />

Disassemble=True<br />

TraceEIS=False<br />

StartOn=False<br />

}<br />

其 中<br />

RDILog<br />

指 示 跟 踪 器 输 出 至 调 试 器 的 RDI 日 志 窗 口<br />

File 定 义 写 跟 踪 信 息 的 文 件 另 外 您 还 可 以 使 用 BinFile 按 二<br />

进 制 格 式 存 储 数 据<br />

其 它 选 项 控 制 跟 踪 内 容<br />

TraceInstructions<br />

TraceRegisters<br />

OpcodeFetch<br />

TraceMemory<br />

TraceIdle<br />

跟 踪 指 令<br />

跟 踪 寄 存 器<br />

跟 踪 指 令 获 取 存 储 器 访 问<br />

跟 踪 存 储 器 访 问<br />

跟 踪 空 闲 周 期<br />

TraceNonAccounted 跟 踪 未 统 计 的 RDI 存 储 器 即 那 些 由 调 试 器 产 生 的 访 问<br />

2-10 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

TraceEvents 跟 踪 事 件 有 关 更 多 信 息 请 参 阅 下 面 的 跟 踪 事 件<br />

TraceBus<br />

可 能 是<br />

TRUE 总 线 已 跟 踪 片 外 访 问<br />

FALSE 内 核 未 跟 踪 片 外 访 问<br />

Disassemble 反 汇 编 指 令 如 果 您 启 用 反 汇 编 则 模 拟 速 度 会 较 慢<br />

TraceEIS 如 果 设 为 TRUE 则 将 输 出 格 式 与 其 它 模 拟 器 兼 容 这 可 使 工<br />

具 对 跟 踪 进 行 比 较<br />

StartOn<br />

指 示 <strong><strong>ARM</strong>ulator</strong> 在 执 行 一 开 始 即 进 行 跟 踪<br />

<br />

您 还 可 以 通 过 以 下 指 令 控 制 跟 踪<br />

Range=low address,high address<br />

只 在 指 定 的 地 址 范 围 内 执 行 跟 踪<br />

Sample=n<br />

只 将 每 n 个 跟 踪 条 目 发 送 至 跟 踪 文 件<br />

<br />

跟 踪 事 件 时 您 可 以 选 择 要 跟 踪 的 事 件 方 法 如 下<br />

EventMask=mask,value<br />

只 跟 踪 那 些 编 号 被 mask 屏 蔽 后 位 与 与 value 相 等 的 事 件<br />

Event=number 只 跟 踪 number 这 相 当 于 EventMask=0xFFFFFFFF,number<br />

例 如<br />

以 下 指 令 只 跟 踪 MMU/ 高 速 缓 存 事 件<br />

EventMask=0xFFFF0000,0x00010000<br />

有 关 更 多 信 息<br />

请 参 阅 第 4-29 页 事 件<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-11


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.4 Profiler<br />

Profiler 由 调 试 器 控 制 有 关 详 情 请 参 阅 调 试 器 文 档<br />

除 配 置 程 序 执 行 时 间 外 Profiler 还 允 许 您 使 用 配 置 机 制 对 事 件 如 高 速 缓 存 错<br />

误 进 行 配 置<br />

从 调 试 器 打 开 配 置 功 能 时 您 应 指 定 一 个 数 字 n 以 便 控 制 配 置 频 率 有 关 详<br />

情 请 参 阅 第 2-13 页 配 置 Profiler<br />

Profiler 可 以 配 置 C 和 汇 编 语 言 函 数 要 配 置 汇 编 语 言 函 数 您 必 须 将 函 数 用<br />

FUNCTION 和 ENDFUNC 指 令 进 行 标 记 有 关 详 情 请 参 阅 <strong>RealView</strong> Compilation Tools<br />

v1.2 Assembler <strong>Guide</strong><br />

2-12 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.4.1 Profiler<br />

<strong><strong>ARM</strong>ulator</strong> 外 围 设 备 配 置 文 件 peripherals.ami 中 有 关 于 Profiler 的 部 分<br />

{ Default_Profiler=Profiler<br />

;VERBOSE=False<br />

;; For example - to profile the PC value when cache misses happen, set:<br />

;Type=Event<br />

;Event=0x00010001<br />

;EventWord=pc<br />

Type=MICROSECOND<br />

;;Alternatives for Type are<br />

;; Event, Cycle, Microsecond.<br />

;;If type is Event then alternatives for EventWord are<br />

;; Word1,Word2,PC.<br />

}<br />

本 部 分 中 的 每 一 行 均 为 一 个 注 释 因 此 <strong><strong>ARM</strong>ulator</strong> 将 执 行 其 缺 省 配 置 缺 省 设<br />

置 是 每 隔 100 微 秒 进 行 一 次 配 置 取 样 有 关 更 多 信 息 请 参 阅 调 试 器 文 档<br />

如 果 本 部 分 未 加 注 释 则 会 配 置 数 据 高 速 缓 存 出 错 有 关 更 多 信 息 请 参 阅<br />

第 4-29 页 事 件<br />

Type 条 目 控 制 配 置 间 隔<br />

Type=Microsecond 指 示 Profiler 每 隔 n 微 秒 进 行 一 次 取 样 此 为 缺 省 值<br />

Type=Cycle 指 示 Profiler 每 隔 n 个 指 令 进 行 一 次 取 样 并 记 录 自 上 次 取<br />

样 后 的 内 存 周 期 数 量<br />

Type=Event 指 示 Profiler 每 隔 一 定 的 相 关 事 件 即 进 行 配 置 请 参 阅<br />

第 4-29 页 事 件 n 被 忽 略<br />

也 允 许 EventMask=mask,value<br />

请 参 阅 第 2-5 页 跟 踪 器<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-13


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.5 <strong><strong>ARM</strong>ulator</strong> <br />

除 模 拟 <strong>ARM</strong> 内 核 上 的 指 令 执 行 之 外 <strong><strong>ARM</strong>ulator</strong> 还 可 以 计 算 总 线 和 处 理 器 周<br />

期 从 调 试 器 您 可 以 以 $statistics 或 调 试 器 当 量 访 问 这 些 计 数<br />

本 节 描 述 所 计 算 的 各 种 周 期 类 型 的 含 义 它 包 含 以 下 部 分<br />

• <strong>RealView</strong> Debugger 中 的 周 期 计 数 器<br />

• 第 2-15 页 未 高 速 缓 存 的 von Neumann 内 核<br />

• 第 2-16 页 未 带 缓 存 的 Harvard 架 构 内 核<br />

• 第 2-16 页 带 MMU 或 PU 和 AMBA ASB 接 口 的 高 速 缓 存 内 核<br />

• 第 2-17 页 带 MMU 或 PU 和 AMBA AHB 接 口 的 高 速 缓 存 内 核<br />

• 第 2-17 页 带 高 速 缓 存 内 核 的 内 部 周 期 类 型<br />

• 第 2-18 页 内 核 相 关 的 详 细 统 计 数 据<br />

2.5.1 <strong>RealView</strong> Debugger <br />

<strong><strong>ARM</strong>ulator</strong> 可 以 按 RDI 中 周 期 计 数 器 调 用 所 报 告 的 那 样 增 加 周 期 计 数 器 有 关<br />

详 情 请 参 阅 第 4-35 页 未 知 的 RDI 信 息 处 理 程 序 如 果 RDI 周 期 计 数 器 名 称 是<br />

X 则 符 号 @rdi_X 即 为 周 期 计 数 器 名 称 其 中 X 可 将 所 有 非 字 母 数 字 字 符 转 换 为<br />

带 下 划 线 字 符 这 些 计 数 器 出 现 在 寄 存 器 选 项 卡 中<br />

然 而 <strong>RealView</strong> Debugger 跟 踪 不 使 用 $statistics <strong>RealView</strong> Debugger 使 用<br />

@cycle_count 这 由 监 测 内 核 和 高 速 缓 存 或 存 储 器 之 间 总 线 的 存 储 器 回 调 服 务 提<br />

供 并 提 供 合 理 的 时 间 定 义<br />

<br />

尽 管 @cycle_count 可 能 与 周 期 计 数 器 如 Total 不 同 但 这 种 差 别 并 不 重 要<br />

内 核 内 部 和 外 部 之 间 的 总 线 比 率 意 味 着 @cycle_count 是 其 它 时 钟 值 的 数 倍<br />

2-14 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.5.2 von Neumann <br />

表 2-1 显 示 了 未 高 速 缓 存 的 von Neumann 内 核 的 周 期 类 型 的 含 义<br />

<strong>ARM</strong>7TDMI ® 即 是 一 个 未 带 高 速 缓 存 的 von Neumann 型 内 核<br />

例 如<br />

2-1 von Neumann <br />

<br />

SEQ<br />

<br />

nMREQ<br />

<br />

<br />

S_Cycles 1 1 连 续 周 期 有 关 详 情 请 参 阅 连 续 周 期<br />

N_Cycles 0 1 非 连 续 周 期 CPU 从 与 前 述 周 期 所 用 地 址 无 关 的 地 址 请 求 转 移 或 者<br />

转 移 到 该 地 址<br />

I_Cycles 1 0 内 部 周 期 CPU 不 需 要 请 求 转 移 因 为 它 正 在 执 行 内 部 函 数<br />

C_Cycles 0 0 协 处 理 器 周 期<br />

Total - - S_Cycles N_Cycles I_Cycles C_Cycles 和 Waits 的 总 和<br />

IS - - 合 并 的 I-S 周 期 有 关 详 情 请 参 阅 合 并 的 I-S 周 期<br />

<br />

CPU 可 从 以 下 地 址 请 求 转 移 或 转 移 到 以 下 地 址<br />

• 与 前 述 周 期 访 问 地 址 相 同 的 地 址<br />

• 在 前 述 周 期 访 问 地 址 一 字 之 后 的 地 址<br />

• 在 前 述 周 期 访 问 地 址 一 个 半 字 之 后 的 地 址 仅 限 于 Thumb 指 令 获 取<br />

I-S <br />

内 存 控 制 器 可 以 在 I-Cycle 期 间 推 测 性 地 开 始 解 码 地 址 如 果 I_Cycle 后 跟 随 一<br />

个 S_Cycle 则 内 存 控 制 器 可 以 比 其 它 方 式 更 早 启 动 此 周 期 的 计 时 功 能 取 决 于<br />

内 存 控 制 器 的 实 施<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-15


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.5.3 Harvard <br />

表 2-2 显 示 了 未 带 高 速 缓 存 的 Harvard 型 内 核 的 周 期 类 型 的 含 义<br />

<strong>ARM</strong>9TDMI 即 是 一 个 没 有 高 速 缓 存 的 Harvard 内 核<br />

例 如<br />

2-2 Harvard <br />

<br />

内 核 周 期 - - 内 核 时 钟 运 行 的 总 数 这 包 括 由 于 互 锁 和 指 令 需 要 多 个 周 期 而<br />

导 致 的 管 道 中 断<br />

ID_Cycles 活 动 活 动 -<br />

I_Cycles 活 动 空 闲 -<br />

空 闲 周 期 空 闲 空 闲 -<br />

D_Cycles 空 闲 活 动 -<br />

Total - - 内 核 周 期 ID_Cycles I_Cycles Idle_Cycles D_Cycles 和<br />

Waits 的 总 和<br />

2.5.4 MMU PU AMBA ASB <br />

表 2-3 显 示 了 带 AMBA ASB 接 口 的 高 速 缓 存 内 核 的 总 线 周 期 类 型 的 含 义 有 关<br />

这 些 内 核 的 其 它 周 期 类 型 请 参 阅 第 2-17 页 带 高 速 缓 存 内 核 的 内 部 周 期 类 型<br />

例 如 <strong>ARM</strong>920T 即 是 带 MMU 和 高 速 缓 存 的 内 核 <strong>ARM</strong>940T 是 带 PU 和 高 速<br />

缓 存 的 内 核 示 例<br />

2-3 AMBA ASB <br />

<br />

<br />

A_Cycles 地 址 预 测 无 数 据 转 移 在 $statistics 中 作 为 I_Cycles 或 调 试 器 当 量 列 出<br />

S_Cycles<br />

从 当 前 地 址 连 续 传 输 数 据<br />

这 些 内 核 没 有 N_Cycles 非 连 续 访 问 使 用 A_Cycle 后 面 跟 随 S_Cycle 这 与 合<br />

并 的 I-S 周 期 相 同<br />

2-16 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.5.5 MMU PU AMBA AHB <br />

表 2-4 说 明 了 在 先 进 高 速 总 线 (AHB) 上 使 用 的 传 输 类 型 例 如 <strong>ARM</strong>946E-S 即<br />

是 带 AHB 接 口 的 高 速 缓 存 内 核 有 关 这 些 内 核 的 其 它 周 期 类 型 请 参 阅 带 高 速<br />

缓 存 内 核 的 内 部 周 期 类 型<br />

2-4 AMBA AHB <br />

<br />

<br />

IDLE 总 线 主 控 器 不 想 使 用 总 线 从 属 器 必 须 以 HRESP 上 的 零 等 待 状 态 OKAY 进 行 响 应<br />

BUSY 总 线 主 控 器 位 于 分 段 传 输 中 间 但 不 能 进 行 下 一 个 连 续 访 问 从 属 器 必 须 以 HRESP<br />

上 的 零 等 待 状 态 OKAY 进 行 响 应<br />

NON-SEQ 分 段 传 输 或 单 个 访 问 的 开 始 地 址 与 上 次 访 问 的 地 址 没 有 关 联<br />

SEQ 继 续 进 行 分 段 传 输 地 址 等 于 前 一 个 地 址 加 上 数 据 长 度<br />

2.5.6 <br />

表 2-5 显 示 了 高 速 缓 存 内 核 的 内 部 周 期 类 型 的 含 义<br />

2-5 <br />

<br />

<br />

F_Cycles 快 速 时 钟 (FLCK) 周 期 这 些 是 访 问 高 速 缓 存 的 内 部 内 核 周 期 对 于 非 高 速 缓 存 的<br />

访 问 由 于 内 核 时 钟 转 换 为 总 线 时 钟 因 此 F_Cycles 不 会 增 加<br />

Core Cycles 内 核 周 期 是 指 内 核 时 钟 的 跳 转 每 次 时 钟 跳 转 Core Cycles 均 会 增 加 无 论 内 核 是<br />

运 行 在 FCLK 高 速 缓 存 访 问 还 是 总 线 时 钟 BCLK 非 高 速 缓 存 访 问 下<br />

True Idle Cycles<br />

空 闲 周 期 并 不 是 I-S 合 并 周 期 的 一 部 分<br />

<br />

如 果 您 希 望 计 算 执 行 时 间 请 使 用 外 部 总 线 周 期 计 数 请 参 阅 第 2-16 页 带<br />

MMU 或 PU 和 AMBA ASB 接 口 的 高 速 缓 存 内 核 或 带 MMU 或 PU 和 AMBA AHB<br />

接 口 的 高 速 缓 存 内 核 您 不 能 使 用 F_Cycles 计 算 执 行 时 间 因 为 对 于 未 经 高<br />

速 缓 存 的 访 问 F_Cycles 不 会 增 加<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-17


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.5.7 Strong<strong>ARM</strong>1<br />

表 2-6 显 示 了 Strong<strong>ARM</strong>1 周 期 类 型 的 含 义<br />

2-6 Strong<strong>ARM</strong> <br />

<br />

<br />

Core_Idle 未 从 指 令 高 速 缓 存 获 取 指 令 未 从 数 据 高 速 缓 存 获 取 数 据<br />

Core_IOnly 从 指 令 高 速 缓 存 获 取 指 令 未 从 数 据 高 速 缓 存 获 取 数 据<br />

Core_DOnly 未 从 指 令 高 速 缓 存 获 取 指 令 从 数 据 高 速 缓 存 获 取 数 据<br />

Core_ID 从 指 令 高 速 缓 存 获 取 指 令 从 数 据 高 速 缓 存 获 取 数 据<br />

2.5.8 <br />

在 default.ami 文 件 中 有 以 下 一 行<br />

Counters=False<br />

您 可 以 将 其 更 改 为<br />

Counters=True<br />

这 样 <strong><strong>ARM</strong>ulator</strong> 会 计 算 其 它 统 计 数 据 如 高 速 缓 存 命 中 数 和 高 速 缓 存 未 命 中<br />

数 并 显 示 在 $statistics 或 调 试 器 当 量 中 这 些 统 计 数 据 是 特 定 内 核 相<br />

关 的<br />

2-18 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.6 <br />

本 节 包 括 以 下 小 节<br />

• 页 表 模 块 概 述<br />

• 第 2-20 页 控 制 MMU 或 PU 和 高 速 缓 存<br />

• 第 2-21 页 控 制 寄 存 器 2 和 3<br />

• 第 2-22 页 存 储 区 域<br />

• 第 2-24 页 页 表 模 块 和 存 储 器 管 理 单 元<br />

• 第 2-25 页 页 表 模 块 和 保 护 单 元<br />

2.6.1 <br />

页 表 模 块 可 使 您 在 带 存 储 器 管 理 单 元 (MMU) 或 保 护 单 元 (PU) 的 系 统 模 型 上 运<br />

行 代 码 而 无 需 为 MMU 或 PU 写 初 始 化 代 码<br />

<br />

此 模 块 允 许 您 调 试 代 码 或 执 行 近 似 的 基 准 对 于 真 实 系 统 您 必 须 写 初 始 化 代<br />

码 才 能 设 置 MMU 或 PU 您 可 以 通 过 禁 用 页 表 模 块 在 <strong><strong>ARM</strong>ulator</strong> 上 调 试 初 始 化<br />

代 码<br />

在 带 MMU 的 <strong>ARM</strong> v4 和 v5 处 理 器 架 构 模 型 上 页 表 模 块 可 以 设 置 页 表 并 初 始<br />

化 MMU 在 带 PU 的 处 理 器 上 页 表 模 块 可 以 设 置 PU 要 控 制 是 否 包 括 页 表<br />

模 型 请 在 <strong><strong>ARM</strong>ulator</strong> 配 置 文 件 default.ami 中 查 找 PAGETAB 变 量 并 根 据 需 要 进<br />

行 修 改 另 请 参 阅 本 文 件 中 的 Pagetables=$PAGETAB<br />

{PAGETAB=Default_Pagetables<br />

}<br />

或<br />

{PAGETAB=No_Pagetables<br />

}<br />

peripherals.ami 的 Pagetables 部 分 可 控 制 页 表 内 容 以 及 高 速 缓 存 和 MMU 或 PU<br />

的 配 置 要 找 到 Pagetables 部 分 请 查 找 以 下 行<br />

{Default_Pagetables=PageTables<br />

有 关 本 节 所 述 的 标 记 控 制 寄 存 器 和 页 表 的 完 整 详 情 请 参 阅 <strong>ARM</strong> Architecture<br />

Reference Manual 或 您 模 拟 的 处 理 器 的 技 术 参 考 手 册<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-19


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.6.2 MMU PU <br />

第 一 个 标 记 集 可 以 启 用 或 禁 用 高 速 缓 存 和 MMU 或 PU 的 功 能<br />

MMU=Yes<br />

AlignFaults=No<br />

Cache=Yes<br />

WriteBuffer=Yes<br />

Prog32=Yes<br />

Data32=Yes<br />

LateAbort=Yes<br />

BigEnd=No<br />

BranchPredict=Yes<br />

ICache=Yes<br />

HighExceptionVectors=No<br />

FastBus=No<br />

每 个 标 记 对 应 系 统 控 制 寄 存 器 中 的 一 个 位<br />

即 CP15 中 的 c1<br />

一 些 标 记 只 适 用 于 特 定 处 理 器<br />

例 如<br />

• BranchPredict 只 适 用 于 <strong>ARM</strong>810 <br />

• ICache 适 用 于 Strong<strong>ARM</strong> ® -110 和 <strong>ARM</strong>940T 处 理 器 但 不 适 用 于<br />

<strong>ARM</strong>720 处 理 器<br />

这 些 标 记 会 被 其 它 处 理 器 模 型 忽 略<br />

<br />

有 关 支 持 的 处 理 器 详 情<br />

请 参 阅 调 试 器 文 档<br />

FastBus 标 记 被 一 些 诸 如 <strong>ARM</strong>940T 之 类 的 内 核 使 用 请 参 阅 适 用 于 您 的 内 核 的<br />

技 术 参 考 手 册 如 果 您 的 系 统 使 用 FastBus Mode 请 设 置 FastBus=Yes 以 便 作 为<br />

基 准 如 果 设 置 FastBus=No 则 由 于 MCCFG 因 素 的 影 响 <strong><strong>ARM</strong>ulator</strong> 会 假 定 存 储<br />

器 时 钟 比 内 核 时 钟 慢 <strong><strong>ARM</strong>ulator</strong> 不 会 建 立 非 同 步 模 式 的 模 型<br />

MMU 标 记 用 于 在 带 PU 的 处 理 器 中 启 用 PU<br />

2-20 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.6.3 2 3<br />

以 下 选 项 只 适 用 于 带 MMU 的 处 理 器<br />

PageTableBase=0xA0000000<br />

DAC=0x00000001<br />

它 们 控 制<br />

• 转 换 表 基 址 寄 存 器 系 统 控 制 寄 存 器 2<br />

• 域 访 问 控 制 寄 存 器 系 统 控 制 寄 存 器 3<br />

转 换 表 基 址 寄 存 器 中 的 地 址 必 须 与 16KB 界 限 相 匹 配<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-21


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.6.4 <br />

其 它 页 表 配 置 部 分 定 义 了 一 组 存 储 区 域<br />

每 个 区 域 均 有 自 己 的 属 性<br />

缺 省 情 况 下<br />

peripherals.ami 包 含 两 个 区 域 的 说 明<br />

{ Region[0]<br />

VirtualBase=0<br />

PhysicalBase=0<br />

Size=4GB<br />

Cacheable=No<br />

Bufferable=No<br />

Updateable=Yes<br />

Domain=0<br />

AccessPermissions=3<br />

Translate=Yes<br />

}<br />

{ Region[1]<br />

VirtualBase=0<br />

PhysicalBase=0<br />

Size=128Mb<br />

Cacheable=Yes<br />

Bufferable=Yes<br />

Updateable=Yes<br />

Domain=0<br />

AccessPermissions=3<br />

Translate=Yes<br />

}<br />

您 可 以 按 相 同 的 通 用 格 式 添 加 更 多 区 域<br />

Region[n] 为 区 域 命 名 以 Region[0] 开 始 n 是 一 个 整 数<br />

VirtualBase 只 适 用 于 带 MMU 的 处 理 器 它 给 出 了 处 理 器 虚 拟 地 址 空 间<br />

中 的 区 域 基 址 此 地 址 必 须 与 1MB 边 界 对 齐 它 由 MMU<br />

映 射 至 PhysicalBase<br />

PhysicalBase 给 出 了 区 域 的 物 理 基 址 对 于 带 MMU 的 处 理 器 此 地 址 必<br />

须 与 1MB 边 界 对 齐<br />

对 于 带 PU 的 处 理 器<br />

干 倍<br />

它 所 匹 配 的 边 界 必 须 是 区 域 大 小 的 若<br />

Size 指 定 此 区 域 的 大 小 对 于 带 MMU 的 处 理 器 Size 必 须 是 一<br />

个 以 兆 字 节 为 单 位 的 整 数 对 于 带 PU 的 处 理 器 Size 必 须<br />

是 4KB 或 4KB 的 二 次 方 倍<br />

Cacheable 指 定 是 否 将 区 域 标 记 为 可 高 速 缓 存 如 果 是 则 从 该 区 域 读<br />

取 的 内 容 会 被 高 速 缓 存<br />

2-22 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

Bufferable 指 定 是 否 将 区 域 标 记 为 可 缓 冲 如 果 是 则 写 入 区 域 的 内 容<br />

将 使 用 写 缓 冲 器<br />

Updateable 只 适 用 于 <strong>ARM</strong>610 处 理 器 它 控 制 转 换 表 条 目 中 的 U 位<br />

Domain 只 适 用 于 带 MMU 的 处 理 器 它 指 定 表 条 目 的 域 字 段<br />

AccessPermissions 指 定 对 区 域 的 访 问 控 制 有 关 更 多 信 息 请 参 阅 处 理 器 技 术<br />

参 考 手 册<br />

Translate 控 制 对 此 区 域 的 访 问 是 否 引 起 转 换 错 误 如 果 将 区 域 设 为<br />

Translate=No 则 无 论 何 时 处 理 器 从 该 区 域 读 取 内 容 或 写 入<br />

内 容 都 会 导 致 中 止<br />

您 必 须 确 保 定 义 的 区 域 比 目 标 硬 件 所 能 支 持 的 少<br />

必 须 至 少 定 义 一 个 区 域<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-23


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.6.5 <br />

诸 如 <strong>ARM</strong>720T 和 <strong>ARM</strong>920T 之 类 的 处 理 器 均 有 MMU<br />

MMU 使 用 存 储 在 存 储 器 中 的 一 组 页 表 来 定 义 存 储 区 域 一 旦 重 置 页 表 模 块<br />

就 会 将 顶 级 页 表 写 出 至 转 换 表 基 址 寄 存 器 中 指 定 的 地 址 该 表 与 您 在<br />

peripherals.ami 的 Pagetables 部 分 中 所 定 义 的 区 域 相 对 应<br />

例 如 第 2-22 页 存 储 区 域 中 给 出 的 缺 省 配 置 详 情 定 义 了 以 下 页 表<br />

• 整 个 地 址 空 间 4GB 被 定 义 为 一 个 单 一 区 域 此 区 域 不 可 高 速 缓 存 或 缓<br />

冲 虚 拟 地 址 被 直 接 映 射 至 整 个 地 址 空 间 上 相 同 的 物 理 地 址<br />

• 第 一 个 128MB 地 址 空 间 被 定 义 为 与 第 一 个 区 域 重 叠 的 另 一 个 区 域 此 区<br />

域 可 以 高 速 缓 存 或 缓 冲 虚 拟 地 址 被 直 接 映 射 至 物 理 地 址<br />

它 们 也 可 以 按 如 下 方 式 设 置 控 制 寄 存 器<br />

• 转 换 表 基 址 寄 存 器 即 寄 存 器 2 初 始 化 后 指 向 存 储 器 中 的 页 表<br />

0xA0000000<br />

• 域 访 问 控 制 寄 存 器 即 寄 存 器 3 初 始 化 后 的 值 为 0x00000001 这 可 将 对<br />

该 区 域 的 访 问 设 为 client<br />

• 控 制 寄 存 器 即 寄 存 器 1 的 M C 和 W 位 被 配 置 为 启 用 MMU 高 速 缓<br />

存 和 写 缓 冲 器 如 果 处 理 器 有 单 独 的 指 令 和 数 据 高 速 缓 存 I 位 会 配 置 启<br />

用 指 令 高 速 缓 存<br />

2-24 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.6.6 <br />

诸 如 <strong>ARM</strong>740T 和 <strong>ARM</strong>940T 之 类 的 处 理 器 都 有 一 个 PU<br />

PU 使 用 一 组 保 护 区 域 每 个 保 护 区 域 的 基 址 和 大 小 均 存 储 在 PU 的 寄 存 器 中<br />

一 旦 重 置 页 表 模 块 便 会 初 始 化 PU<br />

例 如 上 面 给 出 的 缺 省 配 置 详 情 会 定 义 一 个 单 一 区 域 即 区 域 0 此 区 域 被 标<br />

记 为 读 / 写 可 高 速 缓 存 和 可 缓 冲 它 占 据 整 个 地 址 范 围 从 0 至 4GB<br />

<strong>ARM</strong>740T PU<br />

对 于 <strong>ARM</strong>740T PU 会 按 如 下 方 式 初 始 化<br />

• P C 和 W 位 通 过 配 置 寄 存 器 即 寄 存 器 1 设 置 可 以 启 用 保 护 单 元<br />

高 速 缓 存 和 写 缓 冲 器<br />

• 可 高 速 缓 存 寄 存 器 即 寄 存 器 2 被 初 始 化 为 1 标 记 区 域 0 为 可 高 速 缓<br />

存 区 域<br />

• 写 缓 冲 器 控 制 寄 存 器 即 寄 存 器 3 被 初 始 化 为 1 标 记 区 域 0 为 可 缓 冲<br />

区 域<br />

• 保 护 寄 存 器 即 寄 存 器 5 被 初 始 化 为 3 标 记 区 域 0 为 可 读 / 写 访 问 区<br />

域 该 配 置 通 过 AccessPermissions 行 进 行<br />

• 区 域 0 的 保 护 区 域 基 址 和 大 小 寄 存 器 被 初 始 化 为 0x3F 标 记 区 域 0 的 大 小<br />

为 4GB 并 标 记 区 域 为 已 启 用 区 域 0 的 保 护 区 域 基 址 和 大 小 寄 存 器 是 寄<br />

存 器 6 的 一 部 分 寄 存 器 6 实 际 上 由 八 个 寄 存 器 组 成 每 一 个 都 是 一 个 区<br />

域 的 保 护 区 域 基 址 和 大 小 寄 存 器 有 关 详 情 请 参 阅 处 理 器 的 技 术 参 考<br />

手 册<br />

• 区 域 1 的 保 护 区 域 基 址 和 大 小 寄 存 器 被 初 始 化 后 可 以 将 区 域 0 的 大 小 设<br />

为 128MB 和 已 启 用<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-25


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

<strong>ARM</strong>940T PU<br />

对 于 <strong>ARM</strong>940T PU 会 按 如 下 方 式 初 始 化<br />

• P D W 和 I 位 通 过 配 置 寄 存 器 即 寄 存 器 1 设 置 可 以 启 用 PU 写<br />

缓 冲 器 数 据 高 速 缓 存 和 指 令 高 速 缓 存<br />

• 两 个 可 高 速 缓 存 寄 存 器 即 寄 存 器 2 被 初 始 化 为 1 标 记 I 和 D 高 速 缓 存<br />

的 区 域 0 为 可 高 速 缓 存 区 域 这 在 调 试 器 中 显 示 为 0x0101 其 中<br />

— 低 字 节 位 0..7 代 表 数 据 高 速 缓 存 的 可 高 速 缓 存 寄 存 器<br />

— 高 字 节 位 8..15 代 表 指 令 高 速 缓 存 的 可 高 速 缓 存 寄 存 器<br />

• 写 缓 冲 器 控 制 寄 存 器 即 寄 存 器 3 被 初 始 化 为 1 标 记 区 域 0 为 可 缓 冲<br />

区 域 这 只 适 用 于 数 据 高 速 缓 存 指 令 高 速 缓 存 为 只 读<br />

• 两 个 保 护 寄 存 器 即 寄 存 器 5 被 初 始 化 为 3 按 如 下 方 式 标 记 指 令 和 数<br />

据 高 速 缓 存 的 区 域 0 为 完 全 访 问 这 在 调 试 器 中 显 示 为 0x00030003 其 中<br />

— 低 半 字 位 0..15 代 表 数 据 高 速 缓 存 保 护 寄 存 器<br />

— 高 半 字 位 16..31 代 表 指 令 高 速 缓 存 保 护 寄 存 器<br />

显 示 的 第 一 个 寄 存 器 值 用 于 区 域 0 第 二 个 值 用 于 区 域 1 依 次 类 推<br />

• 区 域 0 和 1 的 保 护 区 域 基 址 和 大 小 寄 存 器 初 始 化 后 可 以 标 记 区 域 大 小 并<br />

将 其 标 记 为 已 启 用 所 有 区 域 的 保 护 区 域 基 址 和 大 小 寄 存 器 均 是 寄 存 器 6<br />

的 一 部 分 寄 存 器 6 实 际 上 由 十 六 个 寄 存 器 组 成 每 一 个 都 是 一 个 区 域 的<br />

保 护 区 域 基 址 和 大 小 寄 存 器 有 关 详 情 请 参 阅 处 理 器 的 技 术 参 考 手 册<br />

• 寄 存 器 7 是 一 个 控 制 寄 存 器 无 法 预 先 知 道 是 否 可 以 从 中 读 取 数 据 调 试<br />

器 启 动 时 显 示 零 值 它 并 不 由 页 表 模 块 进 行 写 操 作<br />

• 编 程 锁 定 寄 存 器 即 寄 存 器 9 均 被 初 始 化 为 零 调 试 器 中 显 示 的 第 一 个<br />

寄 存 器 值 用 于 数 据 锁 定 控 制 第 二 个 值 用 于 指 令 锁 定 控 制<br />

• 测 试 和 调 试 寄 存 器 即 寄 存 器 15 被 初 始 化 为 零 只 有 2 和 3 位 在<br />

<strong><strong>ARM</strong>ulator</strong> 中 起 作 用 这 些 位 控 制 高 速 缓 存 替 换 算 法 是 随 机 还 是 循 环<br />

2-26 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.7 <br />

缺 省 存 储 器 模 型 即 flatmem 是 一 个 零 等 待 状 态 存 储 器 系 统 模 型 模 拟 的 存 储<br />

器 大 小 并 不 固 定 每 次 访 问 一 个 新 的 存 储 区 域 时 主 机 存 储 器 均 会 被 分 配 至<br />

64KB 大 小 的 块 中 存 储 器 大 小 受 主 计 算 机 限 制 但 在 理 论 上 所 有 4GB 地 址 空<br />

间 均 可 用 缺 省 的 存 储 器 模 型 不 会 产 生 访 问 出 错<br />

如 果 您 没 有 在 调 试 器 中 指 定 映 射 文 件<br />

则 会 使 用 缺 省 存 储 器 模 型<br />

缺 省 的 存 储 器 模 型 会 把 映 射 成 存 储 器 地 址 的 外 围 设 备 适 当 地 进 行 访 问 路 径 控<br />

制 路 径 依 赖 于 在 peripherals.ami 或 其 它 .ami 文 件 中 的 配 置 信 息<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-27


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.8 <br />

本 节 包 括 以 下 小 节<br />

• 使 用 映 射 文 件 进 行 存 储 器 建 模 概 述<br />

• 时 钟 频 率<br />

• 第 2-29 页 选 择 映 射 文 件 存 储 器 模 型<br />

• 第 2-29 页 映 射 文 件 存 储 器 模 型 如 何 计 算 等 待 状 态<br />

• 第 2-29 页 配 置 映 射 存 储 器 模 型<br />

2.8.1 <br />

mapfile 是 一 个 可 以 自 行 配 置 的 存 储 器 模 型 您 可 以 在 存 储 器 映 射 文 件 的 存 储 器<br />

系 统 中 指 定 单 个 存 储 器 块 的 大 小 访 问 宽 度 访 问 类 型 和 访 问 速 度 请 参 阅<br />

第 4-60 页 映 射 文 件<br />

<strong><strong>ARM</strong>ulator</strong> 可 模 拟 所 发 生 的 每 个 存 储 器 访 问<br />

等 待 状 态<br />

它 可 以 根 据 存 储 器 访 问 类 型 计 算<br />

调 试 器 内 部 变 量 $memstats 和 $statistics 或 这 些 调 试 器 变 量 当 量 可 以 给 出 每<br />

个 周 期 类 型 访 问 访 问 的 存 储 区 域 以 及 访 问 每 个 区 域 所 花 费 时 间 等 各 方 面 的 详<br />

情 有 关 检 索 调 试 器 内 部 变 量 详 情 的 信 息 请 参 阅 调 试 器 文 档<br />

<br />

<strong>RealView</strong> Debugger 不 支 持 $memstats<br />

2.8.2 <br />

您 可 以 从 调 试 器 配 置 mapfile 所 用 的 时 钟 频 率 有 关 详 情 请 参 阅 调 试 器 文 档<br />

时 钟 频 率 用 于 确 定 要 添 加 至 每 次 存 储 器 访 问 的 等 待 状 态 数<br />

的 周 期 所 需 的 时 间<br />

以 及 计 算 一 定 数 量<br />

如 果 您 没 有 指 定 时 钟 速 率 则 使 用 20MHz 如 果 您 指 定 了 速 率 但 没 有 指 定 单<br />

位 则 假 定 单 位 为 Hz 您 可 以 指 定 Hz kHz 或 MHz<br />

2-28 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.8.3 <br />

如 果 您 在 调 试 器 中 指 定 了 存 储 器 映 射 文 件 则 在 启 用 存 储 器 映 射 时 系 统 会 自<br />

动 使 用 文 件 中 定 义 的 映 射 存 储 器 模 型 有 关 如 何 指 定 映 射 文 件 的 详 情 请 参 阅<br />

调 试 器 文 档<br />

2.8.4 <br />

对 于 不 同 存 储 区 域 的 非 连 续 / 连 续 读 / 写 操 作 存 储 器 映 射 文 件 会 以 纳 秒 为 单 位 指<br />

定 访 问 时 间 通 过 插 入 等 待 状 态 映 射 存 储 器 模 型 可 确 保 <strong>ARM</strong> 处 理 器 的 每 次<br />

访 问 都 至 少 占 用 如 此 长 时 间<br />

插 入 的 等 待 状 态 数 是 使 总 访 问 时 间 大 于 存 储 器 映 射 文 件 中 指 定 的 纳 秒 数 所 需 的<br />

最 小 数 设 计 系 统 时 应 考 虑 这 一 点<br />

例 如 在 时 钟 速 率 为 33MHz 30ns 为 一 个 周 期 时 在 存 储 器 映 射 文 件 中 指 定<br />

费 时 70ns 的 一 次 访 问 会 产 生 两 个 要 插 入 的 等 待 状 态 从 而 使 整 个 访 问 延 长 至<br />

90ns<br />

如 果 访 问 时 间 是 60ns 只 快 14% 则 模 型 只 会 插 入 一 个 等 待 状 态 快 33%<br />

处 理 器 时 钟 速 率 和 存 储 器 映 射 文 件 之 间 的 不 匹 配 有 时 可 导 致 更 快 的 处 理 器 速 率<br />

反 而 得 到 较 差 性 能 例 如 100MHz 处 理 器 10ns 周 期 需 要 插 入 五 个 等 待 状<br />

态 才 能 访 问 60ns 存 储 器 总 访 问 时 间 为 60ns 110MHz 时 映 射 存 储 器 模 型<br />

必 须 插 入 六 个 等 待 状 态 才 能 访 问 总 访 问 时 间 为 63ns 因 此 100MHz 的 处 理<br />

器 系 统 反 而 比 110MHz 处 理 器 的 要 快 这 不 适 用 于 带 高 速 缓 存 处 理 器 下 的 情<br />

况 此 时 110MHz 处 理 器 速 度 将 会 较 快<br />

<br />

为 了 精 确 模 拟 真 实 硬 件 存 储 器 映 射 文 件 中 指 定 的 访 问 时 间 必 须 包 括 传 输 延 迟<br />

和 内 存 控 制 器 解 码 时 间 以 及 存 储 器 设 备 的 访 问 时 间 例 如 对 于 70ns RAM 如<br />

果 存 在 10ns 的 传 输 延 迟 则 将 映 射 文 件 配 置 为 80ns<br />

2.8.5 <br />

您 可 以 配 置 映 射 存 储 器 模 型 以 便 建 立 几 种 不 同 类 型 的 内 存 控 制 器 模 型 这 可<br />

通 过 编 辑 peripherals.ami 文 件 中 的 条 目 实 现<br />

{ Default_Mapfile=Mapfile<br />

AMBABusCounts=False<br />

;SpotISCyles=True|False<br />

SpotISCyles=True<br />

;ISTiming=Late|Early|Speculative<br />

ISTiming=Late<br />

}<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-29


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

AMBA <br />

您 可 以 配 置 模 型 以 便 为 处 理 器 的 每 次 非 连 续 访 问 插 入 一 个 额 外 的 解 码 周 期<br />

这 会 建 立 解 码 周 期 模 型 可 在 一 些 AMBA 总 线 系 统 上 看 到 可 以 通 过 在<br />

peripherals.ami 中 设 置 AMBABusCounts=True 来 启 用 此 设 置<br />

I-S <br />

所 有 <strong>ARM</strong> 处 理 器 特 别 是 高 速 缓 存 处 理 器 均 可 以 作 为 一 对 空 闲 和 连 续 周 期<br />

来 执 行 非 连 续 访 问 这 便 是 合 并 的 I-S 周 期 缺 省 情 况 下 模 型 会 将 这 些 周 期<br />

作 为 非 连 续 访 问 处 理 方 法 是 在 S 周 期 内 插 入 等 待 状 态 为 非 连 续 访 问 延 长<br />

时 间<br />

您 可 以 通 过 在 peripherals.ami 中 设 置 SpotISCycles=False 来 禁 用 此 设 置 但 是<br />

这 可 能 导 致 夸 大 的 性 能 指 标 特 别 是 在 建 立 带 高 速 缓 存 的 <strong>ARM</strong> 处 理 器 模 型 时<br />

模 型 可 以 使 用 以 下 三 种 方 法 中 的 任 何 一 种 来 模 拟 合 并 的 I-S 周 期<br />

Speculative 这 种 方 法 建 立 一 个 存 储 控 制 器 可 以 在 空 闲 周 期 里 预 测 解 码 的 系 统<br />

模 型 控 制 器 可 以 使 用 I 和 S 周 期 执 行 访 问 这 可 以 导 致 少 一 个 等<br />

待 状 态<br />

Early 在 <strong>ARM</strong> 声 明 下 一 个 周 期 将 是 S 周 期 即 I 周 期 的 一 半 时 开 始 解<br />

码 这 有 时 可 能 导 致 少 一 个 等 待 状 态 是 否 存 在 更 少 的 等 待 状 态<br />

取 决 于 该 存 储 区 域 的 周 期 时 间 和 非 连 续 访 问 时 间<br />

这 是 缺 省 设 置 您 可 以 通 过 在 peripherals.ami 中 设 置 ISTiming=Spec<br />

或 ISTiming=Late 来 更 改 此 设 置<br />

Late 直 至 S 周 期 才 开 始 解 码 实 际 上 I 周 期 之 后 的 所 有 S 周 期 均 被 视<br />

为 N 周 期<br />

有 关 合 并 的 I-S 周 期 的 详 情<br />

请 参 阅 第 2-14 页 <strong><strong>ARM</strong>ulator</strong> 周 期 类 型<br />

2-30 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.9 Semihosting<br />

Semihosting 是 指 代 码 在 <strong>ARM</strong> 的 目 标 设 备 上 运 行 , 可 以 利 用 运 行 着 调 试 器 的 主<br />

机 的 一 种 机 制 可 以 利 用 的 主 机 资 源 包 括 键 盘 输 入 屏 幕 输 出 和 磁 盘 I/O 等<br />

有 关 详 情<br />

<strong>Guide</strong><br />

请 参 阅 <strong>RealView</strong> Compilation Tools v1.2 Compilers and Libraries<br />

2.9.1 Semihosting <br />

semihosting SWI 处 理 程 序 配 置 由 peripherals.ami 中 的 一 部 分 控 制<br />

项 目<br />

它 包 含 以 下<br />

<br />

如 果 您 的 调 试 器 设 置 了 AngelSWI<strong>ARM</strong> 和 AngelSWIThumb SWI<br />

peripherals.ami 中 的 设 置<br />

则 它 们 会 覆 盖<br />

{Default_Semihost=Semihost<br />

; Demon is only needed for validation.<br />

DEMON=False<br />

ANGEL=TRUE<br />

AngelSWI<strong>ARM</strong>=0x123456<br />

AngelSWIThumb=0xab<br />

; And the default memory map<br />

HeapBase=0x00000000<br />

HeapLimit=0x07000000<br />

StackBase=0x08000000<br />

StackLimit=0x07000000<br />

}<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-31


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.10 <br />

<strong><strong>ARM</strong>ulator</strong> 包 括 几 个 外 围 设 备 模 型<br />

本 部 分 介 绍 关 于 这 些 模 型 的 基 本 用 户 信 息<br />

本 节 包 括 以 下 小 节<br />

• 配 置 <strong><strong>ARM</strong>ulator</strong> 使 用 外 围 设 备 模 型<br />

• 第 2-33 页 中 断 控 制 器<br />

• 第 2-34 页 计 时 器<br />

• 第 2-35 页 看 门 狗<br />

• 第 2-36 页 堆 栈 跟 踪 器<br />

• 第 2-36 页 Tube<br />

2.10.1 <strong><strong>ARM</strong>ulator</strong> <br />

可 以 通 过 更 改 default.ami 文 件 副 本 中 的 相 关 条 目 来 启 用 或 禁 用 每 个 外 围 设 备 模<br />

型 例 如<br />

{ WatchDog=No_watchdog<br />

}<br />

可 以 更 改 为<br />

{ Watchdog=Default_WatchDog<br />

}<br />

其 它 外 围 设 备 模 型 也 可 用 相 同 方 法 进 行 控 制<br />

Default_ 前 缀<br />

即 在 外 围 设 备 名 称 前 添 加 No_ 和<br />

2.10.2 <br />

可 在 peripherals.ami 中 找 到 配 置 外 围 设 备 模 型 的 详 细 资 料<br />

文 件 的 信 息 请 参 阅 第 2-4 页 配 置 <strong><strong>ARM</strong>ulator</strong><br />

有 关 如 何 修 改 .ami<br />

2-32 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.10.3 <br />

中 断 控 制 器 是 参 考 中 断 控 制 器 的 一 个 实 施 工 具<br />

请 参 阅 第 4-74 页 中 断 控 制 器<br />

中 断 控 制 器 模 型 的 配 置 由 peripherals.ami 中 的 一 部 分 控 制<br />

它 包 含 以 下 项 目<br />

{ Default_Intctrl=Intctrl<br />

WAITS=0<br />

Range:Base=0x0a000000<br />

}<br />

Range:Base 指 定 中 断 控 制 器 寄 存 器 映 射 的 存 储 器 区 域<br />

详 情 请 参 阅 第 4-74 页 中 断 控 制 器<br />

有 关 中 断 控 制 器 寄 存 器 的<br />

WAITS 指 定 访 问 中 断 控 制 器 时 影 响 到 处 理 器 的 等 待 状 态 数 最 大 值 是 30<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-33


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.10.4 <br />

计 时 器 是 参 考 计 时 器 的 一 个 实 施 工 具 它 提 供 两 个 计 数 器 - 计 时 器 有 关 详<br />

情 请 参 阅 第 4-76 页 计 时 器<br />

计 时 器 模 型 配 置 由 peripherals.ami 中 的 一 部 分 控 制<br />

它 包 含 以 下 项 目<br />

{Default_Timer=Timer<br />

WAITS=0<br />

Range:Base=0x0a800000<br />

;Frequency of clock to controller.<br />

CLK=20000000<br />

;; Interrupt controller source bits - 4 and 5 as standard<br />

IntOne=4<br />

IntTwo=5<br />

}<br />

Range:Base 指 定 计 时 器 寄 存 器 映 射 的 存 储 器 区 域<br />

情 请 参 阅 第 4-76 页 计 时 器<br />

有 关 中 断 控 制 器 寄 存 器 的 详<br />

CLK 用 于 指 定 外 围 设 备 的 时 钟 频 率<br />

这 通 常 与 处 理 器 时 钟 频 率 相 同<br />

IntOne 为 计 时 器 1 中 断 指 定 到 中 断 控 制 器 的 中 断 线 连 接<br />

指 定 到 中 断 控 制 器 的 中 断 线 连 接<br />

IntTwo 为 计 时 器 2 中 断<br />

WAITS 指 定 访 问 计 时 器 时 影 响 到 处 理 器 的 等 待 状 态 数 最 大 值 是 30<br />

2-34 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.10.5 <br />

使 用 看 门 狗 可 以 防 止 因 程 序 出 错 而 锁 定 系 统 如 果 程 序 在 预 定 时 间 前 访 问 看 门<br />

狗 失 败 看 门 狗 会 暂 停 <strong><strong>ARM</strong>ulator</strong> 并 回 控 调 试 器<br />

<br />

这 是 看 门 狗 计 时 器 的 一 般 模 型 它 可 以 帮 助 用 户 建 立 系 统 环 境 的 模 型 它 并 不<br />

建 立 <strong>ARM</strong> 提 供 的 任 何 实 际 硬 件 的 模 型<br />

看 门 狗 配 置 由 peripherals.ami 中 的 一 部 分 控 制<br />

它 包 含 以 下 项 目<br />

{Default_WatchDog=WatchDog<br />

WAITS=0<br />

Range:Base=0xb0000000<br />

KeyValue=0x12345678<br />

WatchPeriod=0x80000<br />

IRQPeriod=3000<br />

IntNumber=16<br />

StartOnReset=True<br />

RunAfterBark=True<br />

}<br />

Range:Base 指 看 门 狗 寄 存 器 映 射 的 存 储 器 区 域<br />

这 是 双 计 时 器 看 门 狗<br />

如 果 StartOnReset 设 为 True 则 第 一 个 计 时 器 会 在 重 置 时 启 动 如 果<br />

StartOnReset 设 为 False 则 第 一 个 计 时 器 只 在 程 序 将 配 置 的 密 钥 值 写 入 KeyValue<br />

寄 存 器 时 才 启 动 这 可 从 Range:Base 行 (0xB0000000) 中 给 定 的 地 址 中 找 到<br />

第 一 个 计 时 器 可 在 WatchPeriod 内 存 周 期 后 生 成 IRQ 并 启 动 第 二 个 计 时 器 如<br />

果 程 序 尚 未 将 配 置 的 密 钥 值 写 入 KeyValue 寄 存 器 则 第 二 个 计 时 器 会 在<br />

IRQPeriod 内 存 周 期 后 出 现 超 时 将 IRQPeriod 配 置 为 合 适 的 值 以 便 允 许 程 序 对<br />

IRQ 作 出 反 应<br />

如 果 RunAfterBark 设 为 True 则 看 门 狗 会 在 第 二 个 计 时 器 超 时 时 暂 停<br />

<strong><strong>ARM</strong>ulator</strong> 您 可 以 继 续 执 行 或 调 试<br />

如 果 RunAfterBark 设 为 False<br />

则 看 门 狗 会 暂 停 <strong><strong>ARM</strong>ulator</strong> 并 回 控 调 试 器<br />

IntNumber 指 定 看 门 狗 所 连 接 的 中 断 行 号<br />

WAITS 指 定 访 问 看 门 狗 时 影 响 到 处 理 器 的 等 待 状 态 数 最 大 值 是 30<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 2-35


<strong><strong>ARM</strong>ulator</strong> 基 础 知 识<br />

2.10.6 <br />

堆 栈 跟 踪 器 会 检 查 每 个 指 令 后 的 堆 栈 指 针 (r13) 的 内 容 它 会 记 录 最 低 值 并 据 此<br />

计 算 出 堆 栈 的 最 大 大 小 启 用 堆 栈 跟 踪 后 <strong><strong>ARM</strong>ulator</strong> 的 运 行 速 度 会 更 慢<br />

StackUse 模 型 会 连 续 监 控 堆 栈 指 针 并 报 告 $statistics 或 调 试 器 当 量 中 所 用 的<br />

堆 栈 数 量 它 必 须 通 过 堆 栈 位 置 进 行 配 置<br />

缺 省 情 况 下 禁 用 堆 栈 跟 踪 器 要 启 用 堆 栈 跟 踪 器 请 编 辑 default.ami 副 本<br />

1. 请 查 找 行<br />

{ StackUse=No_StackUse<br />

2. 将 其 更 改 为<br />

{ StackUse=Default_StackUse<br />

初 始 化 之 前 堆 栈 指 针 可 以 包 含 堆 栈 限 制 以 外 的 值 您 必 须 配 置 堆 栈 限 制 以<br />

便 堆 栈 跟 踪 器 可 以 忽 略 这 些 预 初 始 化 值 此 配 置 位 于 peripherals.ami 中<br />

{ Default_StackUse=StackUse<br />

StackBase=0x80000000<br />

StackLimit=0x70000000<br />

}<br />

StackBase 是 堆 栈 顶 部 的 地 址 StackLimit 是 堆 栈 的 下 限 更 改 这 些 值 不 会 改 变<br />

堆 栈 在 存 储 器 中 的 位 置 要 改 变 堆 栈 位 置 您 必 须 重 新 配 置 调 试 监 控 器 模 型<br />

2.10.7 Tube<br />

tube 是 存 储 器 映 射 的 寄 存 器 如 果 您 将 可 印 刷 字 符 写 在 tube 上 则 字 符 会 出 现<br />

在 控 制 台 上 它 允 许 您 检 查 写 入 操 作 是 否 发 生 在 存 储 器 中 的 指 定 位 置<br />

您 可 以 更 改 Tube 被 映 射 的 地 址<br />

这 由 peripherals.ami 中 的 一 个 条 目 控 制<br />

{Default_Tube=Tube<br />

Range:Base=0x0d800020<br />

}<br />

这 是 缺 省 地 址<br />

2-36 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


第 3 章<br />

<strong><strong>ARM</strong>ulator</strong> <br />

本 章 意 在 帮 助 您 编 写 模 型 以 添 加 至 <strong><strong>ARM</strong>ulator</strong><br />

• 第 3-2 页 <strong><strong>ARM</strong>ulator</strong> 扩 展 套 件<br />

• 第 3-6 页 写 新 外 围 设 备 模 型<br />

• 第 3-8 页 构 建 新 模 型<br />

• 第 3-10 页 配 置 <strong><strong>ARM</strong>ulator</strong> 以 使 用 新 模 型<br />

• 第 3-12 页 配 置 <strong><strong>ARM</strong>ulator</strong> 以 禁 用 模 型<br />

它 包 含 以 下 部 分<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 3-1


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

3.1 <strong><strong>ARM</strong>ulator</strong> <br />

您 也 可 以 在 不 更 改 现 有 模 型 的 情 况 下 将 其 它 模 型 添 加 至 <strong><strong>ARM</strong>ulator</strong> 每 个 模 型<br />

均 是 独 立 和 完 备 的 通 过 定 义 的 接 口 与 <strong><strong>ARM</strong>ulator</strong> 进 行 通 信 这 些 接 口 的 定 义<br />

在 第 4 章 <strong><strong>ARM</strong>ulator</strong> 参 考 中 提 供<br />

本 文 档 其 余 部 分 中 指 定 的 路 径 ExtensionKit_path 是 指<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/ExtensionKit<br />

对 于 Windows 请 用 \ 替 换 /<br />

3.1.1 <br />

<strong><strong>ARM</strong>ulator</strong> 扩 展 套 件 包 括 某 些 模 型 的 源 代 码<br />

您 可 以 复 制 这 些 模 型 并 修 改 其 副 本<br />

<br />

供 您 进 行 复 制 的 模 型 源 代 码 位 于<br />

ExtensionKit_path/1.3/Final/platform/armulext<br />

在 该 路 径 中<br />

• platform 是<br />

— Windows 的 win_32-pentium<br />

— Linux 的 linux-pentium<br />

— Solaris 的 solaris-sparc<br />

• 对 于 Windows 请 用 \ 替 换 /<br />

<br />

标 头 文 件 位 于<br />

ExtensionKit_path/1.3/release/platform/armulif<br />

在 该 路 径 中<br />

• platform 是<br />

— Windows 的 win_32-pentium<br />

— Linux 的 linux-pentium<br />

— Solaris 的 solaris-sparc<br />

• 对 于 Windows 请 用 \ 替 换 /<br />

3-2 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

makefile <br />

makefile 位 于<br />

ExtensionKit_path/1.3/Final/linux-pentium/armulext/model.b/target<br />

在 该 路 径 中<br />

• model 是 模 型 名 称 例 如 millisec.b 是 执 行 简 单 毫 秒 计 时 器 功 能 的 外 设 模<br />

型 millisec 的 目 录<br />

• target 是<br />

— Windows 的 intelrel<br />

— Linux 的 linux86<br />

— Solaris 的 gccsolaris<br />

• 对 于 Windows 请 用 \ 替 换 /<br />

使 用 这 些 文 件 作 为 编 写 用 户 自 己 模 型 的 例 子 为 了 帮 助 您 选 择 合 适 的 模 型 进 行<br />

检 查 本 章 包 含 这 些 模 型 的 列 表 并 附 有 各 自 功 能 的 简 单 介 绍 请 参 阅 第 3-4 页<br />

附 带 的 模 型<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 3-3


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

3.1.2 <br />

<strong><strong>ARM</strong>ulator</strong> 附 带 用 于 以 下 模 型 组 的 源 代 码<br />

• 基 本 模 型<br />

• 第 3-5 页 外 围 设 备 模 型<br />

<br />

tracer.c 跟 踪 器 模 块 可 以 跟 踪 指 令 执 行 和 来 自 <strong><strong>ARM</strong>ulator</strong> 内 部 的 事 件 请<br />

参 阅 第 4-58 页 跟 踪 器 您 可 以 将 自 己 的 跟 踪 代 码 链 接 至 跟 踪 器<br />

模 块<br />

profiler.c profiler 模 块 可 以 提 供 配 置 功 能 请 参 阅 第 2-12 页 Profiler 这<br />

包 括 基 本 指 令 抽 样 和 更 多 高 级 使 用 例 如 配 置 高 速 缓 存 故 障<br />

这 可 以 通 过 提 供 处 理 来 自 RDI 1.5.1 可 兼 容 调 试 器 的 配 置 请 求 的<br />

UnkRDIInfoHandler 来 实 现 参 见 第 4-35 页 未 知 的 RDI 信 息 处 理<br />

程 序<br />

pagetab.c 重 置 时 此 模 块 将 设 置 <strong><strong>ARM</strong>ulator</strong> 内 的 高 速 缓 存 PU 或 MMU 及<br />

相 关 页 表 请 参 阅 第 2-19 页 页 表 模 块<br />

stackuse.c 如 果 启 用 此 模 型 即 会 跟 踪 堆 栈 大 小 堆 栈 用 法 在 <strong><strong>ARM</strong>ulator</strong> 存<br />

储 器 统 计 数 据 表 中 报 告 您 可 以 在 peripherals.ami 文 件 中 设 置 堆 栈<br />

的 上 限 和 下 限 请 参 阅 第 2-36 页 堆 栈 跟 踪 器<br />

nothing.c 此 模 型 不 起 作 用 您 可 以 在 peripherals.ami 文 件 中 使 用 它 来 禁 用 模<br />

型 请 参 阅 第 3-12 页 配 置 <strong><strong>ARM</strong>ulator</strong> 以 禁 用 模 型<br />

semihost.c<br />

dcc.c<br />

此 模 型 提 供 <strong>RealView</strong> Compilation Tools v1.2 Compilers and Libraries<br />

<strong>Guide</strong> 中 说 明 的 semihosting SWI<br />

这 是 Debug Communications Channel (DCC) 的 模 型<br />

mapfile.c 此 模 型 允 许 您 指 定 存 储 器 系 统 的 特 征 有 关 详 情 请 参 阅 第 4-60<br />

页 映 射 文 件<br />

flatmem.c flatmem 可 模 拟 零 等 待 状 态 的 存 储 器 系 统 有 关 详 情 请 参 阅<br />

第 2-27 页 缺 省 存 储 器 模 型<br />

3-4 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

<br />

intc.c 请 参 阅 第 2-33 页 中 断 控 制 器 intc 是 Reference Peripherals<br />

Specification (RPS) 中 说 明 的 中 断 控 制 器 外 围 设 备 的 模 型<br />

timer.c 请 参 阅 第 2-34 页 计 时 器 timer 是 RPS 计 时 器 外 围 设 备 的 模<br />

型 提 供 两 个 计 时 器 timer 必 须 用 于 连 接 中 断 控 制 器 但<br />

不 必 使 用 intc<br />

millisec.c<br />

简 单 的 毫 秒 计 时 器<br />

watchdog.c 看 门 狗 请 参 阅 第 2-35 页 看 门 狗 watchdog 是 普 通 看 门 狗<br />

模 型 它 并 不 模 拟 特 定 的 看 门 狗 硬 件 只 提 供 一 般 的 看 门<br />

狗 功 能<br />

tube.c Tube 请 参 阅 第 2-36 页 Tube tube 是 个 简 单 的 调 试 辅 助 设<br />

备 它 允 许 您 检 查 写 操 作 是 否 发 生 在 存 储 器 中 的 指 定 位 置<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 3-5


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

3.2 <br />

本 节 包 括 以 下 小 节<br />

• 使 用 样 本 模 型 作 为 模 板<br />

• 返 回 值<br />

• 第 3-7 页 初 始 化 最 终 化 和 状 态 宏<br />

• 第 3-7 页 注 册 模 型<br />

3.2.1 <br />

要 写 新 模 型 最 好 的 步 骤 是 先 复 制 一 个 现 成 的 模 型 然 后 再 编 辑 其 副 本 要 执<br />

行 此 操 作<br />

1. 选 择 一 个 最 接 近 您 需 要 的 模 型 例 如 可 能 是 计 时 器<br />

2. 复 制 源 文 件 此 处 指 timer.c 并 使 用 新 名 称 例 如 mymodel.c<br />

3. 复 制 make 子 目 录 此 处 指 timer.b 并 使 用 相 应 的 新 名 称 此 处 为<br />

mymodel.b<br />

4. 检 查 模 型 的 Makefile 请 参 阅 第 3-2 页 文 件 位 置<br />

将 Makefile 载 入 文 本 编 辑 器 并 将 所 有 的 timer 实 例 更 改 为 mymodel<br />

现 在 您 可 以 编 辑 MyModel 了<br />

3.2.2 <br />

模 型 必 须 返 回 以 下 存 储 器 访 问 状 态 中 的 其 中 一 个<br />

PERIP_OK<br />

如 果 模 型 可 以 响 应 请 求<br />

PERIP_BUSY 如 果 存 储 器 访 问 需 要 等 待 状 态 模 型 不 能 将 此 状 态 返 回 至 调<br />

试 器<br />

PERIP_DABORT<br />

如 果 外 围 设 备 在 总 线 上 置 起 DABORT 信 号<br />

PERIP_NODECODE 如 果 模 型 连 同 属 于 它 的 地 址 一 起 被 调 用 但 这 对 它 没 有 意<br />

义 存 储 器 模 型 将 调 用 视 为 存 储 器 访 问 处 理<br />

3-6 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

3.2.3 <br />

为 了 帮 助 您 编 写 新 的 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

• BEGIN_INIT()<br />

• END_INIT()<br />

• BEGIN_EXIT()<br />

• END_EXIT()<br />

• BEGIN_STATE_DECL()<br />

• END_STATE_DECL()<br />

minperip.h 中 提 供 了 以 下 宏<br />

使 用 以 下 内 容 为 模 型 定 义 初 始 化 函 数<br />

BEGIN_INIT(your_model)<br />

{<br />

/*<br />

* 此 处 输 入 您 的 初 始 化 代 码<br />

*/<br />

}<br />

END_INIT(your_model)<br />

使 用 以 下 内 容 为 模 型 定 义 最 终 化 函 数<br />

BEGIN_EXIT(your_model)<br />

{<br />

/*<br />

* 此 处 输 入 您 的 最 终 化 代 码<br />

*/<br />

}<br />

END_EXIT(your_model)<br />

BEGIN_INIT() 宏 可 定 义 一 种 结 构<br />

END_EXIT() 宏 可 以 释 放 这 些 数 据<br />

以 便 存 放 模 型 使 用 的 所 有 私 有 数 据<br />

使 用 以 下 内 容 声 明 数 据 结 构<br />

BEGIN_STATE_DECL(your_model)<br />

/*<br />

* 此 处 输 入 您 的 私 有 数 据<br />

*/<br />

END_STATE_DECL(your_model)<br />

3.2.4 <br />

您 的 模 型 必 须 通 过 调 用 registerPeripFunc() 来 自 行 注 册 这 可 使 <strong><strong>ARM</strong>ulator</strong> 调 用<br />

您 的 模 型 并 访 问 属 于 模 型 的 存 储 器 位 置 请 参 阅 第 4-45 页<br />

<strong>ARM</strong>ul_BusRegisterPeripFunc<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 3-7


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

3.3 <br />

<strong><strong>ARM</strong>ulator</strong> 预 期 在 可 执 行 路 径 中 查 找 模 型<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/<strong>ARM</strong>ualtor/1.3/release/platform<br />

当 您 构 建 新 模 型 时<br />

构 建 的 文 件 放 入 以 下 构 建 路 径<br />

ExtensionKit_path/1.3/release/platform/armulext/mymodel.b/target<br />

在 这 些 路 径 中<br />

• platform 是<br />

— Windows 的 win_32-pentium<br />

— Linux 的 linux-pentium<br />

— Solaris 的 solaris-sparc<br />

• mymodel 是 您 为 新 模 型 设 定 的 名 称<br />

• target 是<br />

— Windows 的 intelrel<br />

— Linux 的 linux86<br />

— Solaris 的 gccsolaris<br />

• 对 于 Windows 请 用 \ 替 换 /<br />

3-8 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

3.3.1 <br />

要 构 建 新 模 型<br />

1. 将 系 统 的 当 前 目 录 更 改 为 build_path<br />

2. 使 用 安 装 在 系 统 中 的 make 实 用 程 序 构 建 模 型 它 可 以 是 以 下 各 项 之 一<br />

• Windows 的 nmake<br />

• Linux 或 Solaris 的 make<br />

文 件 放 入 build_path<br />

<br />

为 了 说 明 清 楚 在 本 节 中 可 执 行 和 构 建 路 径 称 为 exec_path 和 build_path<br />

有 关 完 整 路 径 名 请 参 阅 第 3-8 页 构 建 新 模 型<br />

3. 将 已 构 建 文 件 从 build_path 移 至 exec_path 视 您 的 系 统 而 定 文 件 名 可 以 是<br />

• 在 Windows 中 为 mymodel.dll<br />

• 在 Linux 或 Solaris 中 为 mymodel.so<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 3-9


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

3.4 <strong><strong>ARM</strong>ulator</strong> <br />

<strong><strong>ARM</strong>ulator</strong> 可 以 通 过 读 取 .ami 和 .dsc 配 置 文 件 决 定 要 使 用 的 模 型<br />

第 4-64 页 <strong><strong>ARM</strong>ulator</strong> 配 置 文 件<br />

请 参 阅<br />

在 <strong><strong>ARM</strong>ulator</strong> 使 用 新 模 型 之 前 您 必 须 为 模 型 添 加 .dsc 文 件 同 时 其 参 考 信 息<br />

必 须 添 加 至 配 置 文 件 default.ami 和 peripherals.ami<br />

以 下 小 节 说 明 了 执 行 步 骤<br />

• 添 加 .dsc 文 件<br />

• 第 3-11 页 编 辑 default.ami 和 peripherals.ami<br />

3.4.1 .dsc <br />

创 建 名 为 MyModel.dsc 的 文 件 并 将 其 放 入<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/<strong>ARM</strong>ualtor/1.3/release/platform<br />

在 该 路 径 中<br />

• platform 是<br />

— Windows 的 win_32-pentium<br />

— Linux 的 linux-pentium<br />

— Solaris 的 solaris-sparc<br />

• 对 于 Windows 请 用 \ 替 换 /<br />

MyModel.dsc 必 须 包 含 以 下 内 容<br />

;; <strong><strong>ARM</strong>ulator</strong> configuration file type 3<br />

{ Peripherals<br />

{MyModel<br />

MODEL_DLLfilename=MyModel<br />

}<br />

{<br />

No_MyModel=Nothing<br />

}<br />

}<br />

模 型 的 名 称 视 系 统 而 定<br />

• MyModel.dll<br />

• MyModel.so.<br />

请 参 阅 第 3-9 页 如 何 构 建 新 模 型<br />

3-10 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

Nothing 是 一 个 不 起 作 用 的 预 定 义 模 型 No_MyModel=Nothing 行 允 许 在 .ami 文 件 中<br />

使 用 No_MyModel 这 使 用 户 可 配 置 <strong><strong>ARM</strong>ulator</strong> 以 排 除 模 型 请 参 阅 第 3-12 页 配<br />

置 <strong><strong>ARM</strong>ulator</strong> 以 禁 用 模 型<br />

如 有 必 要 您 可 以 将 其 它 配 置 详 细 信 息 包 含 在 MyModel.dsc 文 件 中 例 如 请 根<br />

据 以 下 路 径 参 阅 附 带 的 .dsc 文 件<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/<strong>ARM</strong>ualtor/1.3/release/platform<br />

3.4.2 default.ami peripherals.ami<br />

本 说 明 假 定 您 的 模 型 基 于 计 时 器<br />

1. 将 default.ami 文 件 载 入 文 本 编 辑 器 并 找 到 以 下 行<br />

{Timer=Default_Timer<br />

}<br />

2. 将 参 考 信 息 添 加 至 您 的 模 型<br />

{Timer=Default_Timer<br />

}<br />

{MyModel=Default_MyModel<br />

}<br />

3. 保 存 您 编 辑 过 的 default.ami 文 件<br />

4. 将 peripherals.ami 文 件 载 入 文 本 编 辑 器 然 后 查 找 计 时 器 部 分<br />

{ Default_Timer=Timer<br />

.<br />

.<br />

.<br />

}<br />

5. 以 此 作 为 实 例 为 您 的 模 型 添 加 配 置 部 分 根 据 您 的 模 型 与 计 时 器 的 差 别<br />

程 度 您 可 能 可 以 很 容 易 地 编 辑 计 时 器 部 分 的 副 本<br />

6. 保 存 您 编 辑 过 的 peripherals.ami 文 件<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 3-11


编 写 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

3.5 <strong><strong>ARM</strong>ulator</strong> <br />

您 可 以 通 过 更 改 peripherals.ami 中 模 型 的 条 目 来 禁 用 此 模 型 例 如 要 禁 用 Tube<br />

模 型<br />

1. 在 peripherals.ami 中 找 到 以 下 行<br />

{Default_Tube=Tube<br />

Range:Base=0x0d800020<br />

}<br />

2. 将 其 更 改 为<br />

{Default_Tube=No_Tube<br />

Range:Base=0x0d800020<br />

}<br />

表 示 使 用 nothing.c 模 型 覆 盖 tube.c 模 型 nothing 将 忽 略 所 有 配 置 详 细 信 息 例<br />

如 Range:Base<br />

3-12 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


第 4 章<br />

<strong><strong>ARM</strong>ulator</strong> <br />

本 章 介 绍 有 关 <strong><strong>ARM</strong>ulator</strong> 的 参 考 信 息<br />

• 第 4-2 页 <strong><strong>ARM</strong>ulator</strong> 模 型<br />

• 第 4-3 页 与 内 核 进 行 通 信<br />

• 第 4-12 页 基 本 模 型 接 口<br />

• 第 4-15 页 协 处 理 器 模 型 接 口<br />

• 第 4-26 页 异 常<br />

• 第 4-29 页 事 件<br />

• 第 4-38 页 存 储 器 访 问 函 数<br />

• 第 4-40 页 事 件 调 度 函 数<br />

• 第 4-41 页 通 用 函 数<br />

• 第 4-54 页 访 问 调 试 器<br />

• 第 4-58 页 跟 踪 器<br />

• 第 4-60 页 映 射 文 件<br />

• 第 4-64 页 <strong><strong>ARM</strong>ulator</strong> 配 置 文 件<br />

• 第 4-69 页 ToolConf<br />

• 第 4-74 页 外 围 设 备 参 考<br />

包 含 以 下 几 个 部 分<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-1


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.1 <strong><strong>ARM</strong>ulator</strong> <br />

<strong><strong>ARM</strong>ulator</strong> 由 一 系 列 模 拟 基 于 <strong>ARM</strong> 的 硬 件 的 模 型 组 成<br />

件 工 作 完 成 之 前 开 始 评 估 开 发 和 调 试 软 件 的 工 作<br />

这 些 模 型 可 以 使 您 在 硬<br />

4.1.1 ToolConf <br />

您 可 以 通 过 ToolConf 配 置 <strong><strong>ARM</strong>ulator</strong> 模 型 ToolConf 是 一 个 包 含 标 签 和 数 值 的 数<br />

据 库 这 些 标 签 和 数 值 由 <strong><strong>ARM</strong>ulator</strong> 在 初 始 化 期 间 从 配 置 文 件 .dsc 和 .ami 文<br />

件 中 读 取 请 参 阅 第 4-69 页 ToolConf<br />

系 统 提 供 了 用 于 从 此 数 据 库 查 找 数 值 的 一 系 列 函 数<br />

全 套 函 数 在 以 下 位 置 定 义<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/<strong><strong>ARM</strong>ulator</strong>/1.3 /release/clx/toolconf.h<br />

对 于 Windows 请 用 \ 替 换 /<br />

所 有 函 数 均 采 用 一 个 称 为 toolconf 的 不 透 明 句 柄<br />

4-2 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.2 <br />

在 初 始 化 期 间 所 有 模 型 均 会 收 到 一 个 RDI_ModuleDesc * 型 的 mdesc 结 构 的 指 针<br />

它 们 会 将 此 结 构 作 为 字 段 称 之 为 coredesc 复 制 到 其 自 身 的 状 态 这 作 为 第<br />

一 个 参 数 传 送 至 大 多 数 <strong>ARM</strong>ulif <strong><strong>ARM</strong>ulator</strong> 接 口 函 数 <strong><strong>ARM</strong>ulator</strong> 将 导 出 这<br />

些 函 数 以 便 启 用 模 型 来 通 过 此 句 柄 访 问 <strong><strong>ARM</strong>ulator</strong> 状 态<br />

以 下 函 数 提 供 对 <strong>ARM</strong> 寄 存 器 的 读 写 访 问<br />

• 第 4-5 页 <strong>ARM</strong>ulif_GetReg<br />

• 第 4-5 页 <strong>ARM</strong>ulif_SetReg<br />

• 第 4-6 页 <strong>ARM</strong>ulif_GetPC 和 <strong>ARM</strong>ulif_GetR15<br />

• 第 4-6 页 <strong>ARM</strong>ulif_SetPC 和 <strong>ARM</strong>ulif_SetR15<br />

• 第 4-7 页 <strong>ARM</strong>ulif_GetCPSR<br />

• 第 4-7 页 <strong>ARM</strong>ulif_SetCPSR<br />

• 第 4-8 页 <strong>ARM</strong>ulif_GetSPSR<br />

• 第 4-8 页 <strong>ARM</strong>ulif_SetSPSR<br />

在 调 用 内 核 的 <strong>ARM</strong>ulif 中 调 用 函 数 时<br />

模 型 必 须 将 指 针 传 送 至 其 coredesc 结 构<br />

以 下 函 数 可 提 供 对 CPSR 中 特 定 位 或 字 段 的 便 利 的 访 问<br />

• 第 4-9 页 <strong>ARM</strong>ulif_ThumbBit<br />

• 第 4-9 页 <strong>ARM</strong>ulif_GetMode<br />

以 下 函 数 可 调 用 协 处 理 器 的 读 写 方 法<br />

• 第 4-10 页 <strong>ARM</strong>ulif_CPRead<br />

• 第 4-11 页 <strong>ARM</strong>ulif_CPWrite<br />

<br />

从 模 型 的 某 些 组 成 部 分 访 问 状 态 的 一 些 组 成 部 分 会 不 恰 当 例 如 您 不 能 通 过 存<br />

储 器 访 问 函 数 设 置 <strong>ARM</strong> 寄 存 器 的 内 容 因 为 存 储 器 访 问 函 数 可 以 在 模 拟 指 令 期<br />

间 被 调 用 相 反 有 时 需 要 通 过 SWI 处 理 程 序 函 数 设 置 <strong>ARM</strong> 寄 存 器 的 内 容<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-3


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.2.1 <br />

以 下 一 些 函 数 采 用 unsigned 模 式 参 数 指 定 处 理 器 模 式<br />

定 义 列 示 如 下<br />

• USER32MODE<br />

• FIQ32MODE<br />

• IRQ32MODE<br />

• SVC32MODE<br />

• ABORT32MODE<br />

• UNDEF32MODE<br />

• SYSTEM32MODE<br />

模 式 编 号 在 armdefs.h 中<br />

此 外 还 定 义 了 特 殊 值 CURRENTMODE 这 使 <strong>ARM</strong>ulif_GetReg() 可 以 完 成 一 些 操 作 例<br />

如 返 回 当 前 模 式 的 寄 存 器<br />

4-4 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.2.2 <strong>ARM</strong>ulif_GetReg<br />

此 函 数 可 读 取 指 定 处 理 器 模 式 下 的 寄 存 器<br />

<br />

<strong>ARM</strong>word <strong>ARM</strong>ulif_GetReg(RDI_ModuleDesc *mdesc, <strong>ARM</strong>word mode, unsigned reg)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

mode 是 处 理 器 模 式 模 式 的 值 在 armdefs.h 中 定 义 请 参 阅 第 4-4 页 模<br />

式 编 号<br />

reg 是 要 读 取 的 寄 存 器 寄 存 器 r0 至 r14 PC 或 CPSR 的 有 效 值 是 0 至<br />

14<br />

<br />

此 函 数 可 返 回 特 定 模 式 的 指 定 寄 存 器 的 值<br />

4.2.3 <strong>ARM</strong>ulif_SetReg<br />

此 函 数 可 写 入 指 定 处 理 器 模 式 的 寄 存 器<br />

<br />

void <strong>ARM</strong>ulif_SetReg(RDI_ModuleDesc *mdesc, <strong>ARM</strong>word mode,<br />

unsigned reg, <strong>ARM</strong>word value)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

mode 是 处 理 器 模 式 模 式 编 号 在 armdefs.h 中 定 义 请 参 阅 第 4-4 页 模<br />

式 编 号<br />

reg 是 要 写 入 的 寄 存 器 寄 存 器 r0 至 r14 PC 或 CPSR 的 有 效 值 是 0 至<br />

14<br />

value<br />

是 要 写 入 特 定 处 理 器 模 式 下 的 寄 存 器 reg 的 值<br />

<br />

您 可 使 用 此 函 数 写 入 任 何 通 用 寄 存 器 r0 至 r14<br />

PC 或 CPSR<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-5


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.2.4 <strong>ARM</strong>ulif_GetPC <strong>ARM</strong>ulif_GetR15<br />

此 函 数 可 读 取 pc<br />

<strong>ARM</strong>ulif_GetPC 和 <strong>ARM</strong>ulif_GetR15 是 同 义 词<br />

<br />

<strong>ARM</strong>word <strong>ARM</strong>ulif_GetPC(RDI_ModuleDesc *mdesc)<br />

<strong>ARM</strong>word <strong>ARM</strong>ulif_GetR15(RDI_ModuleDesc *mdesc)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

<br />

此 函 数 可 返 回 pc 的 值<br />

4.2.5 <strong>ARM</strong>ulif_SetPC <strong>ARM</strong>ulif_SetR15<br />

此 函 数 可 将 值 写 入 pc<br />

<strong>ARM</strong>ulif_SetPC 和 <strong>ARM</strong>ulif_SetR15 是 同 义 词<br />

<br />

void <strong>ARM</strong>ulif_SetPC(RDI_ModuleDesc *mdesc, <strong>ARM</strong>word value)<br />

void <strong>ARM</strong>ulif_SetR15(RDI_ModuleDesc *mdesc, <strong>ARM</strong>word value)<br />

其 中<br />

mdesc<br />

value<br />

是 内 核 的 句 柄<br />

是 要 写 入 pc 的 值<br />

4-6 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.2.6 <strong>ARM</strong>ulif_GetCPSR<br />

此 函 数 可 读 取 CPSR<br />

<br />

<strong>ARM</strong>word <strong>ARM</strong>ulif_GetCPSR(RDI_ModuleDesc *mdesc)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

<br />

此 函 数 可 返 回 CPSR 的 值<br />

4.2.7 <strong>ARM</strong>ulif_SetCPSR<br />

此 函 数 可 将 值 写 入 CPSR<br />

<br />

void <strong>ARM</strong>ulif_SetCPSR(RDI_ModuleDesc *mdesc, <strong>ARM</strong>word value)<br />

其 中<br />

mdesc<br />

value<br />

是 内 核 的 句 柄<br />

是 要 写 入 CPSR 的 值<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-7


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.2.8 <strong>ARM</strong>ulif_GetSPSR<br />

此 函 数 可 返 回 指 定 处 理 器 模 式 下 的 SPSR 当 前 内 容<br />

<br />

<strong>ARM</strong>word <strong>ARM</strong>ulif_GetSPSR(RDI_ModuleDesc *mdesc, <strong>ARM</strong>word mode)<br />

其 中<br />

mdesc<br />

mode<br />

是 内 核 的 句 柄<br />

是 要 读 取 的 SPSR 处 理 器 模 式<br />

<br />

如 果 mode 是 USER32MODE<br />

则 <strong>ARM</strong>ulif_GetSPSR 可 返 回 CPSR 的 当 前 内 容<br />

4.2.9 <strong>ARM</strong>ulif_SetSPSR<br />

此 函 数 可 将 值 写 入 指 定 处 理 器 模 式 下 的 SPSR<br />

<br />

void <strong>ARM</strong>ulif_SetSPSR(RDI_ModuleDesc *mdesc, <strong>ARM</strong>word mode, <strong>ARM</strong>word value)<br />

其 中<br />

mdesc<br />

mode<br />

value<br />

是 内 核 的 句 柄<br />

是 要 写 入 的 SPSR 的 处 理 器 模 式<br />

是 要 写 入 指 定 模 式 的 SPSR 的 值<br />

<br />

如 果 mode 为 USER32MODE<br />

则 <strong>ARM</strong>ulif_SetSPSR 不 起 作 用<br />

4-8 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.2.10 <strong>ARM</strong>ulif_ThumbBit<br />

如 果 内 核 处 于 Thumb 状 态 则 此 函 数 返 回 1 如 果 内 核 处 于 <strong>ARM</strong> 状 态 则 此<br />

函 数 返 回 0<br />

<br />

unsigned <strong>ARM</strong>ulif_ThumbBit(RDI_ModuleDesc *mdesc)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

4.2.11 <strong>ARM</strong>ulif_GetMode<br />

此 函 数 可 读 取 当 前 处 理 器 模 式<br />

<br />

unsigned <strong>ARM</strong>ulif_GetMode(RDI_ModuleDesc *mdesc)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-9


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.2.12 <strong>ARM</strong>ulif_CPRead<br />

此 函 数 可 调 用 协 处 理 器 的 read 方 法<br />

<br />

int <strong>ARM</strong>ulif_CPRead(RDI_ModuleDesc *mdesc, unsigned cpnum,<br />

unsigned reg, <strong>ARM</strong>word *data)<br />

其 中<br />

mdesc<br />

cpnum<br />

是 内 核 的 句 柄<br />

是 协 处 理 器 的 编 号<br />

reg 是 从 中 进 行 读 取 的 协 处 理 器 寄 存 器 编 号 由 LDC 或 STC 指 令 中 的 CRn<br />

编 入 索 引<br />

data 是 从 协 处 理 器 寄 存 器 读 取 的 数 据 的 指 针 被 传 输 的 字 数 及 顺 序 与<br />

协 处 理 器 有 关<br />

<br />

函 数 必 须 返 回<br />

• <strong>ARM</strong>ul_DONE 如 果 可 以 读 取 寄 存 器 的 话<br />

• <strong>ARM</strong>ul_CANT 如 果 无 法 读 取 寄 存 器 的 话<br />

4-10 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.2.13 <strong>ARM</strong>ulif_CPWrite<br />

此 函 数 可 调 用 协 处 理 器 的 write 方 法<br />

存 器<br />

它 还 可 以 截 取 调 用 以 写 入 FPE 模 拟 的 寄<br />

<br />

int <strong>ARM</strong>ulif_CPWrite(RDI_ModuleDesc *mdesc, unsigned cpnum,<br />

unsigned reg, <strong>ARM</strong>word *data)<br />

其 中<br />

mdesc<br />

cpnum<br />

是 内 核 的 句 柄<br />

是 协 处 理 器 的 编 号<br />

reg 是 从 中 进 行 读 取 的 协 处 理 器 寄 存 器 编 号 由 LDC 或 STC 指 令 中 的 CRn<br />

编 入 索 引<br />

data 是 从 协 处 理 器 寄 存 器 读 取 的 数 据 的 指 针 传 输 的 字 数 及 顺 序 与 协<br />

处 理 器 有 关<br />

<br />

函 数 必 须 返 回<br />

• <strong>ARM</strong>ul_DONE 如 果 可 以 写 寄 存 器 的 话<br />

• <strong>ARM</strong>ul_CANT 如 果 无 法 写 寄 存 器 的 话<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-11


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.3 <br />

本 部 分 包 括 以 下 小 节<br />

• 第 4-13 页 私 有 状 态 数 据 结 构 的 声 明<br />

• 第 4-14 页 模 型 初 始 化<br />

• 第 4-14 页 模 型 最 终 化<br />

对 于 每 个 模 型 您 均 必 须 写 入 一 个 初 始 化 函 数 对 于 其 它 功 能 您 必 须 记 录<br />

回 调<br />

对 于 以 下 选 取 内 容 minperip.h 中 提 供 了 宏<br />

• 第 4-13 页 私 有 状 态 数 据 结 构 的 声 明<br />

• 第 4-14 页 模 型 初 始 化<br />

• 第 4-14 页 模 型 最 终 化<br />

另 请 参 阅 第 3-7 页 初 始 化<br />

最 终 化 和 状 态 宏<br />

4-12 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.3.1 <br />

每 个 模 型 均 必 须 将 其 状 态 保 存 在 私 有 数 据 结 构 中<br />

提 供 这 些 宏 需 要 使 用 此 数 据 结 构 中 的 某 些 字 段<br />

初 始 化 和 最 终 化 宏 可 由 <strong>ARM</strong>ulif<br />

要 声 明 状 态 数 据 结 构<br />

请 按 照 以 下 说 明 使 用 BEGIN_STATE_DECL 和 END_STATE_DECL 宏<br />

/*<br />

* Create a YourModelState data structure<br />

*/<br />

BEGIN_STATE_DECL(YourModel)<br />

/*<br />

* Your private data here<br />

*/<br />

END_STATE_DECL(YourModel)<br />

这 可 声 明 以 下 结 构<br />

typedef struct YourModelState<br />

此 结 构 包 含<br />

• 预 定 义 的 数 据 字 段<br />

— toolconf config<br />

— const struct RDI_HostosInterface *hostif<br />

— RDI_ModuleDesc coredesc;<br />

— RDI_ModuleDesc agentdesc<br />

• 您 输 入 的 私 有 数 据 位 于 宏 之 间<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-13


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.3.2 <br />

BEGIN_INIT() 和 END_INIT() 宏 形 成 模 型 的 初 始 化 函 数 的 启 动 和 完 成<br />

在 以 下 时 间 被 调 用<br />

• <strong><strong>ARM</strong>ulator</strong> 初 始 化 期 间<br />

• 无 论 何 时 从 调 试 器 下 载 新 映 像 时<br />

初 始 化 函 数<br />

初 始 化 函 数 中 包 含 以 下 局 部 变 量<br />

• bool coldboot<br />

在 <strong><strong>ARM</strong>ulator</strong> 进 行 初 始 化 时 为 TRUE<br />

在 从 调 试 器 下 载 新 映 像 时 为 FALSE<br />

• YourModelState *state<br />

私 有 状 态 数 据 结 构 的 指 针 初 始 化 宏 将 为 其 分 配 和 清 除 存 储 器 并 且 预 定<br />

义 数 据 字 段 会 被 初 始 化<br />

在 初 始 化 函 数 中 您 的 模 型 必 须<br />

• 初 始 化 任 何 私 有 数 据<br />

• 安 装 任 何 回 调<br />

4.3.3 <br />

BEGIN_EXIT() 和 END_EXIT() 宏 可 形 成 模 型 的 最 终 化 函 数 的 启 动 和 完 成<br />

<strong><strong>ARM</strong>ulator</strong> 时 将 会 调 用 最 终 化 函 数<br />

关 闭<br />

最 终 化 函 数 中 包 含 以 下 局 部 变 量<br />

YourModelState *state<br />

您 的 模 型 必 须 卸 载 最 终 化 函 数 中 的 所 有 回 调<br />

END_EXIT() 宏 将 会 释 放 分 配 给 状 态 的 存 储 器<br />

4-14 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4 <br />

协 处 理 器 模 型 接 口 在 armul_copro.h 中 定 义 基 本 协 处 理 器 函 数 有<br />

• 第 4-16 页 <strong>ARM</strong>ulif_InstallCoprocessorV5<br />

• 第 4-17 页 LDC<br />

• 第 4-18 页 STC<br />

• 第 4-19 页 MRC<br />

• 第 4-20 页 MCR<br />

• 第 4-19 页 MRC<br />

• 第 4-20 页 MCR<br />

• 第 4-21 页 MCRR<br />

• 第 4-22 页 MRRC<br />

• 第 4-23 页 CDP<br />

<br />

某 些 协 处 理 器 具 有 只 写 寄 存 器 写 入 这 些 寄 存 器 的 值 必 须 是 特 定 值 如 果 有 不<br />

正 确 的 值 写 入 模 型 中 的 此 类 寄 存 器 则 结 果 不 可 预 知 并 且 可 能 不 遵 循 硬 件 中<br />

出 现 的 情 况<br />

此 外 系 统 还 提 供 两 个 函 数 使 RDI 1.5.1 可 兼 容 调 试 器 可 以 通 过 远 程 调 试 接 口<br />

(RDI) 读 写 协 处 理 器 寄 存 器 这 两 个 函 数 是<br />

• 第 4-24 页 read<br />

• 第 4-25 页 write<br />

如 果 协 处 理 器 无 法 处 理 一 个 或 更 多 此 类 函 数<br />

构 中 的 条 目 不 变<br />

则 必 须 保 持 <strong>ARM</strong>ul_CPInterface 结<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-15


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4.1 <strong>ARM</strong>ulif_InstallCoprocessorV5<br />

使 用 此 函 数 记 录 一 个 协 处 理 器 处 理 程 序<br />

此 函 数 在 armul_copro.h 中 有 原 型<br />

<br />

unsigned <strong>ARM</strong>ulif_InstallCoprocessorV5(RDI_ModuleDesc *mdesc, unsigned number,<br />

struct <strong>ARM</strong>ul_CoprocessorV5 *cpv5, void *handle)<br />

其 中<br />

mdesc<br />

number<br />

cpv5<br />

handle<br />

是 内 核 的 句 柄<br />

是 协 处 理 器 编 号<br />

是 协 处 理 器 接 口 结 构 的 指 针<br />

是 传 送 到 每 个 协 处 理 器 函 数 的 专 有 数 据 的 指 针<br />

<br />

此 函 数 可 返 回 以 下 其 中 一 个 值<br />

• <strong>ARM</strong>ulErr_NoError 如 果 没 有 错 误 的 话<br />

• 一 个 <strong>ARM</strong>ul_Error 值<br />

有 关 错 误 代 码 的 完 整 列 表 请 参 阅 armerrs.h 和 errors.h 错 误 必 须 通 过<br />

Hostif_RaiseError() 传 送 以 进 行 格 式 化 请 参 阅 第 4-53 页 Hostif_RaiseError<br />

4-16 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4.2 LDC<br />

识 别 协 处 理 器 的 LDC 指 令 时 将 调 用 此 函 数<br />

<br />

unsigned LDC(void *handle, int type, <strong>ARM</strong>word instr, <strong>ARM</strong>word *data)<br />

其 中<br />

handle 是 <strong>ARM</strong>ulif_InstallCoprocessorV5 的 句 柄<br />

type 是 协 处 理 器 访 问 的 类 型 它 可 以 是 以 下 各 项 之 一<br />

<strong>ARM</strong>ul_CP_FIRST 表 示 首 次 调 用 该 指 令 的 协 处 理 器 模 型<br />

<strong>ARM</strong>ul_CP_BUSY 表 示 这 是 第 一 个 调 用 忙 等 待 之 后 的 随 后 的 调 用<br />

<strong>ARM</strong>ul_CP_INTERRUPT 警 告 协 处 理 器 <strong>ARM</strong> 即 将 处 理 中 断 因 此 协 处<br />

理 器 必 须 放 弃 当 前 指 令 系 统 通 常 会 在 稍 后 重<br />

试 指 令 此 时 type 将 被 重 设 为 <strong>ARM</strong>ul_CP_FIRST<br />

<strong>ARM</strong>ul_CP_TRANSFER 表 示 <strong>ARM</strong> 即 将 执 行 加 载<br />

<strong>ARM</strong>ul_CP_DATA 表 示 有 效 数 据 包 含 在 data 中<br />

instr 当 前 操 作 码<br />

data 是 从 存 储 器 加 载 至 协 处 理 器 的 数 据 的 指 针<br />

<br />

此 函 数 必 须 返 回 以 下 其 中 一 个 值<br />

• <strong>ARM</strong>ul_CP_INC 以 从 内 核 请 求 更 多 数 据 仅 响 应 <strong>ARM</strong>ul_CP_FIRST<br />

<strong>ARM</strong>ul_CP_BUSY 或 <strong>ARM</strong>ul_CP_DATA<br />

• <strong>ARM</strong>ul_CP_DONE 以 表 示 协 处 理 器 操 作 已 完 成 仅 响 应 <strong>ARM</strong>ul_CP_DATA<br />

• <strong>ARM</strong>ul_CP_BUSY 以 表 示 协 处 理 器 正 忙 仅 响 应 <strong>ARM</strong>ul_CP_FIRST 或<br />

<strong>ARM</strong>ul_CP_BUSY<br />

• <strong>ARM</strong>ul_CP_CANT 以 表 示 指 令 不 受 支 持 或 者 无 法 访 问 指 定 的 寄 存 器 仅 响<br />

应 <strong>ARM</strong>ul_CP_FIRST 或 <strong>ARM</strong>ul_CP_BUSY<br />

• <strong>ARM</strong>UL_CP_LAST 以 表 示 下 一 次 加 载 是 顺 序 中 的 最 后 一 次 这 仅 需 用 于<br />

<strong>ARM</strong>9<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-17


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4.3 STC<br />

识 别 协 处 理 器 的 STC 指 令 时 会 调 用 此 函 数<br />

<br />

unsigned STC(void *handle, int type, <strong>ARM</strong>word instr, <strong>ARM</strong>word *data)<br />

其 中<br />

handle 是 <strong>ARM</strong>ulif_InstallCoprocessorV5 的 句 柄<br />

type 是 协 处 理 器 访 问 的 类 型 它 可 以 是 以 下 各 项 之 一<br />

<strong>ARM</strong>ul_CP_FIRST 表 示 首 次 调 用 该 指 令 的 协 处 理 器 模 型<br />

<strong>ARM</strong>ul_CP_BUSY 表 示 这 是 第 一 个 调 用 忙 等 待 之 后 的 随 后 的 调 用<br />

<strong>ARM</strong>ul_CP_INTERRUPT 警 告 协 处 理 器 <strong>ARM</strong> 即 将 中 断 因 此 协 处 理 器<br />

必 须 放 弃 当 前 指 令 系 统 通 常 会 稍 后 重 试 此 指<br />

令 此 时 type 将 被 重 设 为 <strong>ARM</strong>ul_CP_FIRST<br />

<strong>ARM</strong>ul_CP_DATA 表 示 协 处 理 器 必 须 返 回 *data 中 的 有 效 数 据<br />

instr 是 当 前 操 作 码<br />

data 是 保 存 至 存 储 器 的 数 据 位 置 的 指 针<br />

<br />

此 函 数 必 须 返 回 以 下 其 中 一 个 值<br />

• <strong>ARM</strong>ul_CP_INC 以 表 示 有 更 多 数 据 传 送 至 内 核 仅 响 应 <strong>ARM</strong>ul_CP_FIRST<br />

<strong>ARM</strong>ul_CP_BUSY 或 <strong>ARM</strong>ul_CP_DATA<br />

• <strong>ARM</strong>ul_CP_DONE 以 表 示 协 处 理 器 操 作 已 完 成 仅 响 应 <strong>ARM</strong>ul_CP_DATA<br />

• <strong>ARM</strong>ul_CP_BUSY 以 表 示 协 处 理 器 正 忙 仅 响 应 <strong>ARM</strong>ul_CP_FIRST 或<br />

<strong>ARM</strong>ul_CP_BUSY<br />

• <strong>ARM</strong>ul_CP_CANT 以 表 示 指 令 不 受 支 持 或 者 无 法 访 问 指 定 的 寄 存 器 仅 响<br />

应 <strong>ARM</strong>ul_CP_FIRST 或 <strong>ARM</strong>ul_CP_BUSY<br />

• <strong>ARM</strong>UL_CP_LAST 以 表 示 下 一 次 保 存 是 顺 序 中 的 最 后 一 次 这 仅 需 用 于<br />

<strong>ARM</strong>9<br />

4-18 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4.4 MRC<br />

识 别 协 处 理 器 的 MRC 指 令 时 会 调 用 此 函 数 如 果 请 求 的 协 处 理 器 寄 存 器 不 存 在<br />

或 无 法 写 入 其 中 则 函 数 必 须 返 回 <strong>ARM</strong>ul_CP_CANT<br />

<br />

unsigned MRC(void *handle, int type, <strong>ARM</strong>word instr, <strong>ARM</strong>word *data)<br />

其 中<br />

handle 是 <strong>ARM</strong>ulif_InstallCoprocessorV5 的 句 柄<br />

type 是 协 处 理 器 访 问 的 类 型 它 可 以 是 以 下 各 项 之 一<br />

<strong>ARM</strong>ul_CP_FIRST 表 示 首 次 调 用 该 指 令 的 协 处 理 器 模 型<br />

<strong>ARM</strong>ul_CP_BUSY 表 示 这 是 第 一 个 调 用 忙 等 待 之 后 的 随 后 的 调 用<br />

<strong>ARM</strong>ul_CP_INTERRUPT 警 告 协 处 理 器 <strong>ARM</strong> 即 将 处 理 中 断 因 此 协 处<br />

理 器 必 须 放 弃 当 前 指 令 系 统 通 常 会 在 稍 后 重<br />

试 指 令 此 时 type 将 被 重 设 为 <strong>ARM</strong>ul_CP_FIRST<br />

<strong>ARM</strong>ul_CP_DATA 表 示 有 效 数 据 包 含 在 *data 中<br />

instr 是 当 前 操 作 码<br />

data 是 从 协 处 理 器 转 移 至 内 核 的 数 据 位 置 的 指 针<br />

<br />

此 函 数 必 须 返 回 以 下 其 中 一 个 值<br />

• <strong>ARM</strong>ul_CP_DONE 表 示 协 处 理 器 操 作 已 完 成 并 且 有 效 数 据 已 返 回 *data<br />

• <strong>ARM</strong>ul_CP_BUSY 表 示 协 处 理 器 正 忙<br />

• <strong>ARM</strong>ul_CP_CANT 表 示 指 令 不 受 支 持 或 无 法 访 问 指 定 的 寄 存 器<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-19


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4.5 MCR<br />

识 别 协 处 理 器 的 MCR 指 令 时 将 调 用 此 函 数 如 果 请 求 的 协 处 理 器 寄 存 器 不 存 在<br />

或 无 法 写 入 则 函 数 必 须 返 回 <strong>ARM</strong>ul_CP_CANT<br />

<br />

unsigned MCR(void *handle, int type, <strong>ARM</strong>word instr, <strong>ARM</strong>word *data)<br />

其 中<br />

handle 是 <strong>ARM</strong>ulif_InstallCoprocessorV5 的 句 柄<br />

type 是 协 处 理 器 访 问 的 类 型 它 可 以 是 以 下 各 项 之 一<br />

<strong>ARM</strong>ul_CP_FIRST 表 示 首 次 调 用 该 指 令 的 协 处 理 器 模 型<br />

<strong>ARM</strong>ul_CP_BUSY 表 示 这 是 第 一 个 调 用 忙 等 待 之 后 的 随 后 的 调 用<br />

<strong>ARM</strong>ul_CP_INTERRUPT 警 告 协 处 理 器 <strong>ARM</strong> 即 将 处 理 中 断 因 此 协 处<br />

理 器 必 须 放 弃 当 前 指 令 系 统 通 常 会 在 稍 后 重<br />

试 指 令 此 时 type 将 被 重 设 为 <strong>ARM</strong>ul_CP_FIRST<br />

<strong>ARM</strong>ul_CP_DATA 表 示 有 效 数 据 包 含 在 data 中<br />

instr 是 当 前 操 作 码<br />

data 是 转 移 至 协 处 理 器 的 数 据 的 指 针<br />

<br />

此 函 数 必 须 返 回 以 下 其 中 一 个 值<br />

• <strong>ARM</strong>ul_CP_DONE 表 示 协 处 理 器 操 作 已 完 成<br />

• <strong>ARM</strong>ul_CP_BUSY 表 示 协 处 理 器 正 忙<br />

• <strong>ARM</strong>ul_CP_CANT 表 示 指 令 不 受 支 持 或 无 法 访 问 指 定 的 寄 存 器<br />

4-20 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4.6 MCRR<br />

识 别 协 处 理 器 的 MCRR 指 令 时 将 调 用 此 函 数<br />

如 果 出 现 以 下 情 况 函 数 必 须 返 回 <strong>ARM</strong>ul_CP_CANT<br />

• 请 求 的 协 处 理 器 寄 存 器 不 存 在<br />

• 请 求 的 协 处 理 器 寄 存 器 无 法 写 入<br />

• 协 处 理 器 的 <strong>ARM</strong> 架 构 是 v4T 或 更 早 设 计<br />

<br />

unsigned MCRR(void *handle, int type, <strong>ARM</strong>word instr, <strong>ARM</strong>word *data)<br />

其 中<br />

handle<br />

是 <strong>ARM</strong>ulif_InstallCoprocessorV5 的 句 柄<br />

type 是 协 处 理 器 访 问 的 类 型 它 可 以 是 以 下 各 项 之 一<br />

instr<br />

data<br />

<strong>ARM</strong>ul_CP_FIRST<br />

<strong>ARM</strong>ul_CP_BUSY<br />

表 示 首 次 调 用 该 指 令 的 协 处 理 器 模 型<br />

表 示 这 是 第 一 个 调 用 忙 等 待 之 后 的 随 后 的 调 用<br />

<strong>ARM</strong>ul_CP_INTERRUPT 警 告 协 处 理 器 <strong>ARM</strong> 即 将 处 理 中 断 因 此 协 处<br />

理 器 必 须 放 弃 当 前 指 令 系 统 通 常 会 在 稍 后 重<br />

试 指 令 此 时 type 将 被 重 设 为 <strong>ARM</strong>ul_CP_FIRST<br />

<strong>ARM</strong>ul_CP_DATA<br />

是 当 前 操 作 码<br />

是 转 移 至 协 处 理 器 的 数 据 的 指 针<br />

表 示 有 效 数 据 包 含 在 data 中<br />

<br />

此 函 数 必 须 返 回 以 下 其 中 一 个 值<br />

• <strong>ARM</strong>ul_CP_DONE 表 示 协 处 理 器 操 作 已 完 成<br />

• <strong>ARM</strong>ul_CP_BUSY 表 示 协 处 理 器 正 忙<br />

• <strong>ARM</strong>ul_CP_CANT 表 示 指 令 不 受 支 持 或 无 法 访 问 指 定 的 寄 存 器<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-21


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4.7 MRRC<br />

识 别 协 处 理 器 的 MRRC 指 令 时 将 调 用 此 函 数<br />

如 果 出 现 以 下 情 况 函 数 必 须 返 回 <strong>ARM</strong>ul_CP_CANT<br />

• 请 求 的 协 处 理 器 寄 存 器 不 存 在<br />

• 请 求 的 协 处 理 器 无 法 读 取<br />

• 协 处 理 器 的 <strong>ARM</strong> 架 构 是 v4T 或 更 早 设 计<br />

<br />

unsigned MRRC(void *handle, int type, <strong>ARM</strong>word instr, <strong>ARM</strong>word *data)<br />

其 中<br />

handle<br />

是 <strong>ARM</strong>ulif_InstallCoprocessorV5 的 句 柄<br />

type 是 协 处 理 器 访 问 的 类 型 它 可 以 是 以 下 各 项 之 一<br />

instr<br />

data<br />

<strong>ARM</strong>ul_CP_FIRST<br />

<strong>ARM</strong>ul_CP_BUSY<br />

表 示 首 次 调 用 该 指 令 的 协 处 理 器 模 型<br />

表 示 这 是 第 一 个 调 用 忙 等 待 之 后 的 随 后 的 调 用<br />

<strong>ARM</strong>ul_CP_INTERRUPT 警 告 协 处 理 器 <strong>ARM</strong> 即 将 处 理 中 断 因 此 协 处<br />

理 器 必 须 放 弃 当 前 指 令 系 统 通 常 会 在 稍 后 重<br />

试 指 令 此 时 type 将 被 重 设 为 <strong>ARM</strong>ul_CP_FIRST<br />

<strong>ARM</strong>ul_CP_DATA<br />

是 当 前 操 作 码<br />

是 从 协 处 理 器 转 移 的 数 据 的 指 针<br />

表 示 有 效 数 据 包 含 在 data 中<br />

<br />

此 函 数 必 须 返 回 以 下 其 中 一 个 值<br />

• <strong>ARM</strong>ul_CP_DONE 表 示 协 处 理 器 操 作 已 完 成<br />

• <strong>ARM</strong>ul_CP_BUSY 表 示 协 处 理 器 正 忙<br />

• <strong>ARM</strong>ul_CP_CANT 表 示 指 令 不 受 支 持 或 无 法 访 问 指 定 的 寄 存 器<br />

4-22 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4.8 CDP<br />

识 别 协 处 理 器 的 CDP 指 令 时 将 调 用 此 函 数<br />

则 函 数 必 须 返 回 <strong>ARM</strong>ul_CP_CANT<br />

如 果 请 求 的 协 处 理 器 操 作 不 受 支 持<br />

<br />

unsigned CDP(void *handle, int type, <strong>ARM</strong>word instr, <strong>ARM</strong>word *data)<br />

其 中<br />

handle 是 <strong>ARM</strong>ulif_InstallCoprocessorV5 的 句 柄<br />

type 是 协 处 理 器 访 问 的 类 型 它 可 以 是 以 下 各 项 之 一<br />

<strong>ARM</strong>ul_CP_FIRST 表 示 首 次 调 用 该 指 令 的 协 处 理 器 模 型<br />

<strong>ARM</strong>ul_CP_BUSY 表 示 这 是 第 一 个 调 用 忙 等 待 之 后 的 随 后 的 调 用<br />

<strong>ARM</strong>ul_CP_INTERRUPT 警 告 协 处 理 器 <strong>ARM</strong> 即 将 处 理 中 断 因 此 协 处<br />

理 器 必 须 放 弃 当 前 指 令 系 统 通 常 会 在 稍 后 重<br />

试 指 令 此 时 type 将 被 重 设 为 <strong>ARM</strong>ul_CP_FIRST<br />

instr 是 当 前 操 作 码<br />

data 未 使 用<br />

<br />

此 函 数 必 须 返 回 以 下 其 中 一 个 值<br />

• <strong>ARM</strong>ul_CP_DONE 表 示 协 处 理 器 操 作 已 完 成<br />

• <strong>ARM</strong>ul_CP_BUSY 表 示 协 处 理 器 正 忙<br />

• <strong>ARM</strong>ul_CP_CANT 表 示 指 令 不 受 支 持<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-23


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4.9 read<br />

此 函 数 使 RDI 1.5.1 可 兼 容 调 试 器 可 以 通 过 RDI 读 协 处 理 器 寄 存 器 此 函 数 可 读<br />

编 号 为 reg 的 协 处 理 器 寄 存 器 并 将 其 值 转 移 至 由 value 寻 址 的 位 置<br />

如 果 请 求 的 协 处 理 器 寄 存 器 不 存 在 或 无 法 读 取 寄 存 器<br />

<strong>ARM</strong>ul_CP_CANT<br />

则 函 数 必 须 返 回<br />

<br />

unsigned read(void *handle, int reg, <strong>ARM</strong>word instr, <strong>ARM</strong>word *value)<br />

其 中<br />

handle<br />

reg<br />

instr<br />

value<br />

是 <strong>ARM</strong>ulif_InstallCoprocessorV5 的 句 柄<br />

是 要 被 读 取 的 协 处 理 器 寄 存 器 的 记 录 编 号<br />

未 使 用<br />

是 要 从 协 处 理 器 读 取 的 数 据 位 置 的 指 针<br />

<br />

此 函 数 必 须 返 回 以 下 其 中 一 个 值<br />

• <strong>ARM</strong>ul_CP_DONE 表 示 协 处 理 器 操 作 已 完 成<br />

• <strong>ARM</strong>ul_CP_CANT 表 示 寄 存 器 不 受 支 持<br />

<br />

此 函 数 由 调 试 器 通 过 RDI 调 用<br />

4-24 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.4.10 write<br />

此 函 数 使 RDI 1.5.1 可 兼 容 调 试 器 可 以 通 过 RDI 写 入 协 处 理 器 寄 存 器<br />

函 数 可 将 value 寻 址 的 位 置 的 值 写 入 编 号 为 reg 的 协 处 理 器 寄 存 器<br />

如 果 请 求 的 协 处 理 器 不 存 在 或 无 法 写 入 寄 存 器<br />

则 函 数 必 须 返 回 <strong>ARM</strong>ul_CP_CANT<br />

<br />

unsigned write(void *handle, int reg, <strong>ARM</strong>word instr, <strong>ARM</strong>word *value)<br />

其 中<br />

handle<br />

reg<br />

instr<br />

value<br />

是 <strong>ARM</strong>ulif_InstallCoprocessorV5 的 句 柄<br />

是 要 被 写 入 的 协 处 理 器 寄 存 器 的 记 录 编 号<br />

未 使 用<br />

是 要 写 入 协 处 理 器 的 数 据 位 置 的 指 针<br />

<br />

此 函 数 必 须 返 回 以 下 其 中 一 个 值<br />

• <strong>ARM</strong>ul_CP_DONE 表 示 协 处 理 器 操 作 已 完 成<br />

• <strong>ARM</strong>ul_CP_CANT 表 示 寄 存 器 不 受 支 持<br />

<br />

此 函 数 由 调 试 器 通 过 RDI 调 用<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-25


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.5 <br />

4.5.1 <strong>ARM</strong>ulif_SetSignal<br />

以 下 函 数 可 启 用 模 型 以 便 设 置 或 清 除 信 号<br />

• <strong>ARM</strong>ulif_SetSignal<br />

• 第 4-27 页 <strong>ARM</strong>ulif_GetProperty<br />

<strong>ARM</strong>ulif_SetSignal 函 数 用 于 设 置 信 号 状 态 或 属 性<br />

<br />

void <strong>ARM</strong>ulif_SetSignal(RDI_ModuleDesc *mdesc, <strong>ARM</strong>SignalType sigType,<br />

SignalState sigState)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

sigtype 是 要 设 置 的 信 号 sigtype 可 以 是 以 下 其 中 之 一<br />

RDIPropID_<strong>ARM</strong>Signal_IRQ<br />

表 明 中 断<br />

RDIPropID_<strong>ARM</strong>Signal_FIQ<br />

表 明 快 速 中 断<br />

RDIPropID_<strong>ARM</strong>Signal_RESET<br />

表 明 重 设 的 信 号 内 核 将 会 重 设 并 在 取 消 表 明 重 设 信<br />

号 之 前 不 会 重 新 启 动<br />

RDIPropID_<strong>ARM</strong>Signal_BigEnd<br />

设 置 此 信 号 以 进 行 大 端 操 作 或 清 除 此 信 号 以 进 行 小 端<br />

操 作<br />

RDIPropID_<strong>ARM</strong>Signal_HighException<br />

设 置 异 常 向 量 的 基 址<br />

RDIPropID_<strong>ARM</strong>Signal_BranchPredictEnable<br />

仅 适 用 于 <strong>ARM</strong>10<br />

RDIPropID_<strong>ARM</strong>Signal_LDRSetTBITDisable<br />

仅 适 用 于 <strong>ARM</strong>10<br />

RDIPropID_<strong>ARM</strong>Signal_WaitForInterrupt<br />

仅 适 用 于 <strong>ARM</strong>10 和 XScale<br />

RDIPropID_<strong>ARM</strong>Signal_DebugState<br />

进 入 或 退 出 调 试 状 态<br />

4-26 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

RDIPropID_<strong>ARM</strong>ulProp_CycleDelta<br />

等 待 内 核 指 定 数 量 的 周 期<br />

RDIPropID_<strong>ARM</strong>ulProp_Accuracy<br />

选 择 建 模 精 度 以 百 分 比 表 示 的 范 围 为 0% 至 100% 目<br />

前 仅 影 响 <strong>ARM</strong>10 模 型 小 于 50% 的 设 置 将 关 闭 互 锁 建<br />

模 互 锁 建 模 关 闭 时 <strong><strong>ARM</strong>ulator</strong> 的 运 行 速 度 更 快 但<br />

周 期 计 数 的 精 确 度 会 降 低<br />

sigstate 对 于 信 号 您 必 须 为 sigstate 指 定 以 下 其 中 一 个 值<br />

FALSE<br />

TRUE<br />

对 于 属 性<br />

信 号 关 闭<br />

信 号 打 开<br />

您 必 须 为 sigstate 指 定 一 个 整 数 值<br />

<br />

有 关 使 用 中 断 控 制 器 时 的 信 号 中 断 说 明<br />

请 参 阅 第 4-74 页 中 断 控 制 器<br />

4.5.2 <strong>ARM</strong>ulif_GetProperty<br />

<strong>ARM</strong>ulif_GetProperty 函 数 用 于 读 取 属 性 和 信 号 的 值<br />

<br />

void <strong>ARM</strong>ulif_GetProperty(RDI_ModuleDesc *mdesc, <strong>ARM</strong>SignalType id,<br />

<strong>ARM</strong>word *value)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

id 是 要 读 取 的 信 号 或 属 性 id 可 以 是 以 下 任 何 一 个<br />

RDIPropID_<strong>ARM</strong>Signal_IRQ<br />

TRUE 如 果 表 明 中 断 信 号 的 话<br />

RDIPropID_<strong>ARM</strong>Signal_FIQ<br />

TRUE 如 果 表 明 快 速 中 断 信 号 的 话<br />

RDIPropID_<strong>ARM</strong>Signal_RESET<br />

TRUE 如 果 表 明 重 设 信 号 的 话<br />

RDIPropID_<strong>ARM</strong>Signal_BigEnd<br />

TRUE 如 果 表 明 大 端 信 号 的 话<br />

RDIPropID_<strong>ARM</strong>Signal_HighException<br />

TRUE 如 果 向 量 表 处 于 0xFFFF0000 的 话<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-27


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

RDIPropID_<strong>ARM</strong>Signal_BranchPredictEnable<br />

仅 适 用 于 <strong>ARM</strong>10<br />

RDIPropID_<strong>ARM</strong>Signal_LDRSetTBITDisable<br />

仅 适 用 于 <strong>ARM</strong>10<br />

RDIPropID_<strong>ARM</strong>Signal_WaitForInterrupt<br />

仅 适 用 于 <strong>ARM</strong>10 和 XScale<br />

RDIPropID_<strong>ARM</strong>ulProp_CycleCount<br />

计 算 初 始 化 后 所 执 行 的 周 期 数 量<br />

RDIPropID_<strong>ARM</strong>ulProp_RDILog<br />

RDI 记 录 层 的 当 前 设 置 通 常 在 禁 用 记 录 时 为 零 在 启<br />

用 记 录 时 非 零<br />

RDIPropID_<strong>ARM</strong>Signal_ProcessorProperties<br />

与 所 模 拟 的 处 理 器 相 关 的 属 性 字 这 是 属 性 的 位 域 在<br />

armdefs.h 中 定 义<br />

value 是 写 入 属 性 的 块 的 指 针 允 许 属 性 超 过 32 位 但 是 所 有 列 出 的<br />

属 性 实 际 上 最 多 只 有 32 位 宽<br />

4-28 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.6 <br />

<strong><strong>ARM</strong>ulator</strong> 具 有 传 播 和 处 理 事 件 的 机 制 这 些 事 件 包 括 一 个 事 件 编 号 和 一 个 字<br />

对 编 号 用 于 标 识 事 件 详 细 信 息 视 事 件 而 定<br />

核 心 <strong><strong>ARM</strong>ulator</strong> 可 生 成 一 些 事 件 实 例 在 armdefs.h 中 定 义 这 些 事 件 可 分 为 以<br />

下 几 组<br />

• 来 自 <strong>ARM</strong> 处 理 器 内 核 的 事 件 在 第 4-30 页 表 4-2 中 列 示<br />

• 来 自 MMU 和 高 速 缓 存 不 是 在 Strong<strong>ARM</strong>-110 上 的 事 件 在 表 4-1 中<br />

列 示<br />

• 来 自 预 取 单 元 的 事 件 只 适 用 于 基 于 <strong>ARM</strong>8 的 处 理 器 在 第 4-30 页<br />

表 4-3 中 列 示<br />

• 配 置 更 改 事 件 在 第 4-31 页 表 4-5 中 列 示<br />

如 果 启 用 跟 踪 并 打 开 跟 踪 事 件 则 这 些 事 件 可 以 记 录 在 跟 踪 文 件 中 其 它 模 块<br />

可 以 提 供 按 同 样 方 式 处 理 的 新 事 件 类 型 用 户 定 义 的 事 件 必 须 具 有 介 于<br />

<strong>User</strong>Event_Base (0x100000) 和 <strong>User</strong>Event_Top (0x1FFFFF) 之 间 的 值<br />

您 可 以 通 过 安 装 事 件 处 理 程 序 来 捕 获 事 件 请 参 阅 第 4-37 页 事 件 处 理 程 序<br />

您 可 以 通 过 调 用 <strong>ARM</strong>ulif_RaiseEvent() 来 生 成 事 件 请 参 阅 第 4-32 页<br />

<strong>ARM</strong>ulif_RaiseEvent<br />

4-1 MMU Strong<strong>ARM</strong>-110 <br />

1 2 <br />

MMUEvent_DLineFetch 丢 失 地 址 受 影 响 的 地 址 0x10001<br />

MMUEvent_ILineFetch 丢 失 地 址 受 影 响 的 地 址 0x10002<br />

MMUEvent_WBStall 写 物 理 地 址 写 缓 冲 内 的 字 数 0x10003<br />

MMUEvent_DTLBWalk 丢 失 地 址 受 影 响 的 地 址 0x10004<br />

MMUEvent_ITLBWalk 丢 失 地 址 受 影 响 的 地 址 0x10005<br />

MMUEvent_LineWB 丢 失 地 址 受 影 响 的 地 址 0x10006<br />

MMUEvent_DCacheStall 导 致 停 止 的 地 址 获 取 的 地 址 0x10007<br />

MMUEvent_ICacheStall 导 致 停 止 的 地 址 获 取 的 地 址 0x10008<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-29


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4-2 <strong>ARM</strong> <br />

1 2 <br />

CoreEvent_Reset - - 0x1<br />

CoreEvent_UndefinedInstr pc 值 指 令 0x2<br />

CoreEvent_SWI pc 值 SWI 编 号 0x3<br />

CoreEvent_PrefetchAbort pc 值 - 0x4<br />

CoreEvent_DataAbort pc 值 中 止 的 地 址 0x5<br />

CoreEvent_AddrExceptn pc 值 中 止 的 地 址 0x6<br />

CoreEvent_IRQ pc 值 - 0x7<br />

CoreEvent_FIQ pc 值 - 0x8<br />

CoreEvent_Breakpoint pc 值 RDI_PointHandle 0x9<br />

CoreEvent_Watchpoint pc 值 观 察 地 址 0xA<br />

CoreEvent_IRQSpotted pc 值 - 0x17<br />

CoreEvent_FIQSpotted pc 值 - 0x18<br />

CoreEvent_ModeChange pc 值 新 模 式 0x19<br />

CoreEvent_Dependency pc 值 互 锁 寄 存 器 位 掩 码 0x20<br />

4-3 <br />

<strong>ARM</strong>810<br />

1 2 <br />

PUEvent_Full 下 一 个 pc 值 - 0x20001<br />

PUEvent_Mispredict 分 支 的 地 址 - 0x20002<br />

PUEvent_Empty 下 一 个 pc 值 - 0x20003<br />

4-30 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4-4 <br />

1 2 <br />

DebugEvent_InToDebug - - 0x40001<br />

DebugEvent_OutOfDebug - - 0x40002<br />

DebugEvent_DebuggerChangedPC pc - 0x40003<br />

4-5 <br />

1 2 <br />

ConfigEvent_AllLoaded - - 0x50001<br />

ConfigEvent_Reset - - 0x50002<br />

ConfigEvent_VectorsLoaded - - 0x50003<br />

ConfigEvent_EndiannessChanged 1 大 端<br />

或<br />

2 小 端<br />

- 0x50005<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-31


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.6.1 <strong>ARM</strong>ulif_RaiseEvent<br />

此 函 数 可 调 用 事 件<br />

事 件 被 传 送 至 用 户 提 供 的 事 件 处 理 程 序<br />

<br />

void <strong>ARM</strong>ulif_RaiseEvent(RDI_ModuleDesc *mdesc, <strong>ARM</strong>word event,<br />

<strong>ARM</strong>word data1, <strong>ARM</strong>word data2)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

event 是 在 第 4-29 页 表 4-1 第 4-30 页 表 4-2 第 4-30 页 表 4-3 或<br />

第 4-31 页 表 4-4 中 定 义 的 其 中 一 个 事 件 编 号<br />

data1<br />

data2<br />

是 事 件 的 第 一 个 字<br />

是 事 件 的 第 二 个 字<br />

4-32 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.7 <br />

<strong><strong>ARM</strong>ulator</strong> 可 用 于 在 某 些 状 态 值 更 改 时 回 调 模 型<br />

handler 来 进 行 此 操 作<br />

您 可 以 通 过 安 装 相 关 的 event<br />

如 果 您 要 将 其 用 于 自 己 的 模 型 中 则 必 须 提 供 事 件 处 理 程 序 的 执 行 说 明 有 关<br />

信 息 请 参 阅 <strong>ARM</strong> 作 为 实 例 提 供 的 模 型 中 的 执 行 说 明<br />

您 可 以 将 事 件 处 理 程 序 用 于 避 免 在 每 次 访 问 时 检 查 状 态 值 例 如 外 围 设 备 模<br />

型 预 期 将 显 示 <strong>ARM</strong> 内 核 以 及 <strong>ARM</strong> 处 理 器 信 号 值 的 以 正 确 字 节 顺 序 排 列<br />

的 数 据 外 围 设 备 模 型 可 以 连 接 至 EventHandler() 以 便 在 信 号 更 改 时 得 到 通 知<br />

参 见 第 4-37 页 事 件 处 理 程 序<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-33


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.7.1 <br />

只 要 <strong>ARM</strong> 处 理 器 出 现 异 常<br />

系 统 均 会 调 用 此 事 件 处 理 程 序<br />

<br />

typedef unsigned GenericCallbackFunc(void *handle, void *data)<br />

其 中<br />

handle<br />

data<br />

是 传 送 至 <strong>ARM</strong>ulif_InstallExceptionHandler 的 句 柄<br />

必 须 造 型 为 (<strong>ARM</strong>ul_Event *) 并 包 含<br />

((<strong>ARM</strong>ul_Event *)data)->event<br />

是 导 致 异 常 的 核 心 事 件 请 参 阅 第 4-30 页 表 4-2<br />

((<strong>ARM</strong>ul_Event *)data)->data1<br />

是 异 常 的 硬 件 向 量 地 址<br />

((<strong>ARM</strong>ul_Event *)data)->data2<br />

是 导 致 异 常 的 指 令<br />

<br />

作 为 实 例 可 由 操 作 系 统 模 型 用 于 截 取 和 模 拟 SWI 如 果 安 装 的 处 理 程 序 返 回<br />

非 零 值 则 <strong>ARM</strong> 不 会 产 生 异 常 异 常 被 忽 略<br />

<br />

如 果 处 理 器 处 于 Thumb 状 态<br />

则 会 提 供 效 果 等 同 的 <strong>ARM</strong> 指 令<br />

要 安 装 异 常 处 理 程 序<br />

可 使 用<br />

int <strong>ARM</strong>ulif_InstallExceptionHandler(RDI_ModuleDesc *mdesc,<br />

GenericCallbackFunc *func, void *handle)<br />

要 删 除 异 常 处 理 程 序<br />

可 使 用<br />

int <strong>ARM</strong>ulif_RemoveExceptionHandler(RDI_ModuleDesc *mdesc,<br />

GenericCallbackFunc *func, void *handle)<br />

4-34 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.7.2 RDI <br />

如 果 <strong><strong>ARM</strong>ulator</strong> 自 己 无 法 处 理 RDI_InfoProc 请 求 则 会 调 用 未 知 的 RDI 信 息 函 数<br />

它 将 返 回 RDIError 值 此 函 数 可 由 扩 展 <strong><strong>ARM</strong>ulator</strong> 和 调 试 器 之 间 的 RDI 接 口 的<br />

模 型 使 用 例 如 配 置 器 模 块 在 profiler.c 中 可 提 供 RDIProfile 信 息 调 用<br />

<br />

typedef int RDI_InfoProc(void *handle, unsigned type,<br />

<strong>ARM</strong>word *arg1, <strong>ARM</strong>word *arg2)<br />

其 中<br />

handle<br />

是 传 送 至 <strong>ARM</strong>ulif_InstallUnkRDIInfoHandler 的 句 柄<br />

type 是 RDI_InfoProc 子 代 码 它 们 在 rdi_info.h 中 定 义 有 关 实 例 请<br />

参 阅 下 面 的 内 容<br />

arg1/arg2<br />

是 从 <strong><strong>ARM</strong>ulator</strong> 传 送 至 处 理 程 序 的 变 量<br />

<br />

如 果 返 回 一 个 值 而 不 是 RDIError_UnimplementedMessage<br />

RDI_InfoProc() 函 数<br />

<strong><strong>ARM</strong>ulator</strong> 可 停 止 调 用<br />

以 下 代 码 是 可 以 指 定 为 type 的 RDI_InfoProc 子 代 码 实 例<br />

RDIInfo_Target<br />

RDIInfo_SetLog<br />

RDIRequestCyclesDesc<br />

可 使 模 型 声 明 如 何 扩 展 目 标 功 能 例 如 profiler.c 可 截 取 此 调 用<br />

以 设 置 RDITarget_CanProfile 标 记<br />

可 环 绕 传 送 以 便 模 型 在 打 开 和 关 闭 记 录 信 息 之 间 切 换 例 如<br />

tracer.c 可 使 用 此 调 用 从 RDI 记 录 层 值 $rdi_log 或 <strong>RealView</strong><br />

Debugger 中 的 @mdebug_rdi_log 或 调 试 器 的 相 当 值 的 位 4 打 开 和<br />

关 闭 跟 踪 功 能<br />

可 使 模 型 扩 展 由 $statistics 中 的 调 试 器 或 调 试 器 中 的 相 当 值<br />

提 供 的 计 数 器 列 表 模 型 调 用 <strong>ARM</strong>ul_AddCounterDesc() 请 参 阅 第<br />

4-41 页 通 用 函 数 以 依 次 声 明 每 个 计 数 器 同 时 模 型 也 可 以 诱 捕<br />

RDICycles RDI 信 息 调 用 这 一 点 很 重 要<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-35


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

RDICycles<br />

通 过 捕 获 RDIRequestCyclesDesc 来 声 明 统 计 计 数 器 的 模 型 同 时 还 必<br />

须 对 RDICycles 作 出 响 应 其 方 式 是 按 其 被 声 明 时 的 相 同 顺 序 为<br />

每 个 计 数 器 依 次 调 用 <strong>ARM</strong>ul_AddCounterValue() 请 参 阅 第 4-41 页 通<br />

用 函 数<br />

以 上 RDI 信 息 调 用 已 由 <strong><strong>ARM</strong>ulator</strong> 处 理 并 仅 传 送 用 于 信 息 或 以 便 模 型 可 以 将<br />

信 息 添 加 至 回 复 模 型 必 须 始 终 响 应 这 些 具 有 RDIError_UnimplementedMessage 的<br />

消 息 以 便 消 息 即 使 在 模 型 已 作 出 响 应 的 情 况 下 也 可 以 被 传 递<br />

要 安 装 处 理 程 序<br />

可 使 用<br />

int <strong>ARM</strong>ulif_InstallUnkRDIInfoHandler(RDI_ModuleDesc *mdesc,<br />

RDI_InfoProc *func, void *handle)<br />

要 删 除 处 理 程 序<br />

可 使 用<br />

int <strong>ARM</strong>ulif_RemoveUnkRDIInfoHandler(RDI_ModuleDesc *mdesc,<br />

RDI_InfoProc *func, void *handle)<br />

<br />

随 <strong><strong>ARM</strong>ulator</strong> 提 供 的 semihost.c 模 型 使 用 UnkRDIInfoUpcall() 与 调 试 器 进 行 交 互<br />

RDIErrorP<br />

RDISet_Cmdline<br />

RDIVector_Catch<br />

可 将 在 <strong><strong>ARM</strong>ulator</strong> 下 运 行 的 程 序 所 生 成 的 错 误 返 回 至 调 试 器<br />

查 找 调 试 器 为 程 序 设 置 的 命 令 行<br />

截 取 硬 件 向 量<br />

4-36 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.7.3 <br />

此 处 理 程 序 可 捕 获 <strong><strong>ARM</strong>ulator</strong> 事 件<br />

请 参 阅 第 4-29 页 事 件<br />

<br />

typedef unsigned GenericCallbackFunc(void *handle, void *data)<br />

其 中<br />

handle<br />

data<br />

是 传 送 至 <strong>ARM</strong>ulif_InstallEventHandler 的 句 柄<br />

必 须 传 递 为 (<strong>ARM</strong>ul_Event *) 并 包 含<br />

((<strong>ARM</strong>ul_Event *)data)->event<br />

是 在 第 4-29 页 表 4-1 第 4-30 页 表 4-2 和 第 4-30 页 表 4-3<br />

中 定 义 的 其 中 一 个 事 件 编 号<br />

((<strong>ARM</strong>ul_Event *)data)->addr1<br />

是 事 件 的 第 一 个 字<br />

((<strong>ARM</strong>ul_Event *)data)->addr2<br />

是 事 件 的 第 二 个 字<br />

<br />

要 安 装 处 理 程 序<br />

可 使 用<br />

void *<strong>ARM</strong>ulif_InstallEventHandler(RDI_ModuleDesc *mdesc, uint32 events,<br />

GenericCallbackFunc *func, void *handle)<br />

为 events 指 定 以 下 一 个 或 更 多 个 函 数<br />

• CoreEventSel<br />

• MMUEventSel<br />

• PUEventSel<br />

• DebugEventSel<br />

• TraceEventSel<br />

• ConfigEventSel<br />

要 删 除 处 理 程 序<br />

可 使 用<br />

int <strong>ARM</strong>ulif_RemoveEventHandler(RDI_ModuleDesc *mdesc, void *node)<br />

<br />

<strong>ARM</strong>ulif_InstallEventHandler(mdesc, CoreEventSel | ConfigEventSel, func, handle)<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-37


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.8 <br />

存 储 器 系 统 可 由 外 围 设 备 模 型 使 用 一 系 列 读 写 存 储 器 的 函 数 进 行 探 测 这 些 函<br />

数 均 可 在 总 线 上 不 加 插 额 外 周 期 的 情 况 下 访 问 存 储 器 如 果 您 的 模 型 在 总 线 上<br />

加 插 周 期 则 必 须 将 其 自 身 作 为 存 储 器 模 型 安 装 可 能 安 装 在 内 核 和 实 际 存 储<br />

器 模 型 之 间<br />

<br />

无 法 判 断 这 些 调 用 是 否 会 导 致 数 据 出 错<br />

4.8.1 <br />

以 下 函 数 可 在 特 定 的 地 址 返 回 字 半 字 或 字 节 每 个 函 数 均 可 在 总 线 上 不 加 插<br />

额 外 周 期 的 情 况 下 访 问 存 储 器<br />

<br />

<strong>ARM</strong>word <strong>ARM</strong>ulif_ReadWord(RDIModuleDesc *mdesc, <strong>ARM</strong>word address)<br />

<strong>ARM</strong>word <strong>ARM</strong>ulif_ReadHalfword(RDIModuleDesc *mdesc, <strong>ARM</strong>word address)<br />

<strong>ARM</strong>word <strong>ARM</strong>ulif_ReadByte(RDIModuleDesc *mdesc, <strong>ARM</strong>word address)<br />

其 中<br />

mdesc 是 内 核 的 句 柄<br />

address 是 从 其 中 读 取 字 半 字 或 字 节 的 模 拟 存 储 器 中 的 地 址<br />

<br />

此 函 数 可 返 回 适 当 的 字<br />

半 字 或 字 节<br />

4-38 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.8.2 <br />

以 下 函 数 可 在 指 定 的 地 址 写 入 特 定 的 字 半 字 或 字 节 每 个 函 数 均 可 在 总 线 上<br />

不 加 插 额 外 周 期 的 情 况 下 访 问 存 储 器<br />

<br />

void <strong>ARM</strong>ulif_WriteWord(RDIModuleDesc *mdesc, <strong>ARM</strong>word address, <strong>ARM</strong>word data)<br />

void <strong>ARM</strong>ulif_WriteHalfword(RDIModuleDesc *mdesc, <strong>ARM</strong>word address, <strong>ARM</strong>word data)<br />

void <strong>ARM</strong>ulif_WriteByte(RDIModuleDesc *mdesc, <strong>ARM</strong>word address, <strong>ARM</strong>word data)<br />

其 中<br />

mdesc<br />

address<br />

data<br />

是 内 核 的 句 柄<br />

是 要 写 入 其 中 的 模 拟 存 储 器 中 地 址<br />

是 要 写 的 字 或 字 节<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-39


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.9 <br />

以 下 函 数 可 使 您 调 度 或 删 除 事 件<br />

• <strong>ARM</strong>ulif_ScheduleTimedFunction<br />

• <strong>ARM</strong>ulif_DescheduleTimedFunction<br />

4.9.1 <strong>ARM</strong>ulif_ScheduleTimedFunction<br />

此 函 数 可 使 用 存 储 器 系 统 周 期 调 度 事 件<br />

它 可 以 在 将 来 指 定 的 周 期 号 上 调 用 函 数<br />

<br />

void *<strong>ARM</strong>ulif_ScheduleTimedFunction(RDI_ModuleDesc *mdesc,<br />

<strong>ARM</strong>ul_TimedCallback *tcb)<br />

其 中<br />

mdesc<br />

tcb<br />

是 内 核 的 句 柄<br />

是 供 您 从 基 于 指 定 存 储 器 周 期 的 事 件 发 生 时 删 除 函 数 使 用 的 句 柄<br />

<br />

只 能 在 指 定 周 期 之 后 的 第 一 个 指 令 边 界 上 调 用 此 函 数<br />

4.9.2 <strong>ARM</strong>ulif_DescheduleTimedFunction<br />

<strong>ARM</strong>ul_DescheduleTimedFunction() 可 删 除 基 于 预 定 的 存 储 器 周 期 的 事 件<br />

<br />

unsigned <strong>ARM</strong>ulif_DescheduleTimedFunction(RDI_ModuleDesc *mdesc, void *tcb);<br />

其 中<br />

mdesc<br />

tcb<br />

是 内 核 的 句 柄<br />

是 <strong>ARM</strong>ulif_ScheduleTimedFunction 在 首 次 安 装 事 件 时 提 供 的 句 柄<br />

4-40 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10 <br />

以 下 是 通 用 的 <strong><strong>ARM</strong>ulator</strong> 函 数 它 们 包 括 访 问 处 理 器 属 性 添 加 计 数 器 说 明 和<br />

数 值 停 止 <strong><strong>ARM</strong>ulator</strong> 以 及 执 行 代 码 的 函 数<br />

• 第 4-42 页 <strong>ARM</strong>ul_AddCounterDesc<br />

• 第 4-43 页 <strong>ARM</strong>ul_AddCounterValue<br />

• 第 4-44 页 <strong>ARM</strong>ul_AddCounterValue64<br />

• 第 4-45 页 <strong>ARM</strong>ul_BusRegisterPeripFunc<br />

• 第 4-48 页 <strong>ARM</strong>ulif_CoreCycles<br />

• 第 4-48 页 <strong>ARM</strong>ulif_CPUCycles<br />

• 第 4-49 页 <strong>ARM</strong>ulif_EndCondition<br />

• 第 4-49 页 <strong>ARM</strong>ulif_GetCoreClockFreq<br />

• 第 4-50 页 <strong>ARM</strong>ulif_InstallHourglass<br />

• 第 4-51 页 <strong>ARM</strong>ulif_ReadBusRange<br />

• 第 4-52 页 <strong>ARM</strong>ulif_RemoveHourglass<br />

• 第 4-52 页 <strong>ARM</strong>ulif_StopExecution<br />

• 第 4-53 页 <strong>ARM</strong>ulif_Time<br />

• 第 4-53 页 Hostif_RaiseError<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-41


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10.1 <strong>ARM</strong>ul_AddCounterDesc<br />

<strong>ARM</strong>ul_AddCounterDesc() 函 数 可 将 新 计 数 器 添 加 至 $statistics<br />

当 值<br />

或 调 试 器 中 的 相<br />

<br />

int <strong>ARM</strong>ul_AddCounterDesc(void *handle, <strong>ARM</strong>word *arg1, <strong>ARM</strong>word *arg2,<br />

const char *name)<br />

其 中<br />

handle<br />

arg1/arg2<br />

不 再 使 用<br />

是 传 送 至 UnkRDIInfoUpcall() 的 变 量<br />

name 是 为 统 计 计 数 器 命 名 的 字 符 串 字 符 串 必 须 小 于 32 字 符 长<br />

<br />

此 函 数 可 返 回 以 下 其 中 之 一<br />

• RDIError_BufferFull<br />

• RDIError_UnimplementedMessage<br />

<br />

当 <strong><strong>ARM</strong>ulator</strong> 收 到 来 自 调 试 器 的 RDIRequestCycleDesc() 调 用 时 如 果 它 希 望 提 供<br />

任 何 统 计 数 据 计 数 器 则 会 使 用 UnkRDIInfoUpcall() 请 参 阅 第 4-35 页 未 知 的<br />

RDI 信 息 处 理 程 序 依 次 询 问 每 个 模 型 每 个 模 型 均 可 通 过 调 用 具 有 传 送 至<br />

UnkRDIInfoUpcall() 的 变 量 的 <strong>ARM</strong>ul_AddCounterDesc() 进 行 响 应<br />

所 有 统 计 数 据 计 数 器 必 须 是 32 或 64 位 字 并 可 单 调 递 增 也 就 是 说 统 计 值 必<br />

须 随 时 间 递 增 这 是 调 试 器 计 算 $statistics_inc 时 所 采 用 方 法 的 要 求<br />

4-42 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10.2 <strong>ARM</strong>ul_AddCounterValue<br />

此 函 数 可 为 模 型 提 供 设 备<br />

以 便 其 供 应 调 试 器 的 统 计 数 据 进 行 显 示<br />

<br />

int <strong>ARM</strong>ul_AddCounterValue(void *handle, <strong>ARM</strong>word *arg1, <strong>ARM</strong>word *arg2, bool is64,<br />

const <strong>ARM</strong>word *counter)<br />

其 中<br />

handle<br />

arg1/arg2<br />

不 再 使 用<br />

是 传 送 至 UnkRDIInfoUpcall() 的 变 量<br />

is64 表 示 计 数 器 是 组 成 64 位 计 数 器 的 一 个 32 位 字 对 最 低 有 效 字 在<br />

前 还 是 单 个 32 位 值 这 可 使 用 模 型 提 供 全 64 位 计 数 器<br />

counter<br />

是 计 数 器 当 前 值 的 指 针<br />

<br />

此 功 能 始 终 返 回 RDIError_UnimplementedMessage<br />

<br />

您 的 模 型 必 须 调 用 此 函 数 或 从 其 UnkRDIInfoUpcall() 处 理 程 序 中 调 用<br />

<strong>ARM</strong>ul_AddCounterValue64 除 了 计 数 器 的 字 顺 序 外 <strong>ARM</strong>ul_AddCounterValue64 与<br />

<strong>ARM</strong>ul_AddCounterValue 完 全 相 同<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-43


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10.3 <strong>ARM</strong>ul_AddCounterValue64<br />

此 函 数 可 为 模 型 提 供 设 备<br />

以 便 其 供 应 调 试 器 的 统 计 数 据 进 行 显 示<br />

<br />

int <strong>ARM</strong>ul_AddCounterValue64(void *handle, <strong>ARM</strong>word *arg1, <strong>ARM</strong>word *arg2,<br />

const uint64 counterval)<br />

其 中<br />

handle<br />

arg1/arg2<br />

counterval<br />

不 再 使 用<br />

是 传 送 至 UnkRDIInfoUpcall() 的 变 量<br />

计 数 器 的 当 前 值<br />

<br />

此 功 能 始 终 返 回 RDIError_UnimplementedMessage<br />

<br />

您 的 模 型 必 须 调 用 此 函 数 或 从 其 UnkRDIInfoUpcall() 处 理 程 序 中 调 用<br />

<strong>ARM</strong>ul_AddCounterValue 除 了 根 据 主 机 系 统 endian 配 置 不 同 外 此 函 数 与<br />

<strong>ARM</strong>ul_AddCounterValue 完 全 相 同<br />

4-44 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10.4 <strong>ARM</strong>ul_BusRegisterPeripFunc<br />

外 围 设 备 模 型 必 须 调 用 此 函 数 来 向 <strong><strong>ARM</strong>ulator</strong> 进 行 注 册 这 可 使 <strong><strong>ARM</strong>ulator</strong> 在<br />

任 何 时 候 都 可 以 通 过 访 问 属 于 外 部 的 存 储 器 地 址 来 调 用 此 外 设 模 型<br />

<br />

int <strong>ARM</strong>ul_BusRegisterPeripFunc(enum BusRegAct act,<br />

<strong>ARM</strong>ul_BusPeripAccessRegistration *breg);<br />

其 中<br />

act 是 所 需 的 操 作 act 必 须 为 以 下 其 中 一 个 值 insert 或 remove<br />

breg 是 包 含 信 息 的 <strong><strong>ARM</strong>ulator</strong> 结 构 您 可 以 通 过 调 用<br />

<strong>ARM</strong>ulif_ReadBusRange 来 获 得 此 结 构 请 参 阅 第 4-51 页<br />

<strong>ARM</strong>ulif_ReadBusRange<br />

breg 是 <strong>ARM</strong>ul_BusPeripAccessRegistration 类 型 的 一 种 结 构<br />

情 请 参 阅 <strong>ARM</strong>ul_BusPeripAccessRegistration<br />

有 关 详<br />

<strong>ARM</strong>ul_BusPeripAccessRegistration<br />

文 件 armul_bus.h 中 声 明 了 这 种 结 构 和 类 型<br />

该 文 件 位 于<br />

ExtensionKit_path/1.3/Final/platform/armulif<br />

在 该 路 径 中<br />

• platform 是<br />

— Windows 的 win_32-pentium<br />

— Linux 的 linux-pentium<br />

— Solaris 的 solaris-sparc<br />

• 对 于 Windows 请 用 \ 替 换 /<br />

声 明 如 下<br />

typedef struct <strong>ARM</strong>ul_BusPeripAccessRegistration {<br />

<strong>ARM</strong>ul_BusPeripAccessFunc *access_func;<br />

void *access_handle;<br />

uint32 capabilities; /* See PeripAccessCapability_* below */<br />

struct <strong>ARM</strong>ul_Bus *bus;<br />

/* 0=> normal peripheral, earlier in list than anything it<br />

* overlaps with. */<br />

unsigned priority;<br />

/* 0..100%<br />

* A higher number will be placed earlier in the list than<br />

* anything that it doesn't overlap with and has a lower access_frequency.<br />

*/<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-45


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

unsigned access_frequency;<br />

unsigned addr_size; /* Number of elements in range[] */<br />

AddressRange range[1];<br />

} <strong>ARM</strong>ul_BusPeripAccessRegistration;<br />

其 中<br />

access_func<br />

access_handle<br />

capabilities<br />

指 定 地 址 范 围 中 存 储 器 访 问 需 调 用 的 函 数 的 指 针<br />

access_func 的 目 标 数 据 的 指 针<br />

请 参 阅 PeripAccessCapability<br />

bus 是 <strong>ARM</strong>ulif_QueryBus 返 回 的 内 容 请 不 要 更 改 该 内 容<br />

priority 可 使 用 此 字 段 为 外 围 设 备 分 配 优 先 级 零 是 最 高 的 优 先 级<br />

如 果 外 围 设 备 具 有 重 叠 的 地 址 范 围 则 首 先 访 问 优 先 级 最 高<br />

的 外 围 设 备 只 有 当 优 先 级 较 高 的 外 围 设 备 在 未 处 理 调 用 的<br />

情 况 下 返 回 时 才 能 访 问 优 先 级 较 低 的 外 围 设 备<br />

access_frequency<br />

可 使 用 此 字 段 通 知 <strong><strong>ARM</strong>ulator</strong> 您 希 望 经 常 访 问 的 外 围 设 备<br />

这 样 <strong><strong>ARM</strong>ulator</strong> 可 以 更 有 效 地 访 问 外 围 设 备 指 定 百 分 比 为<br />

0% 至 100% 的 范 围 内 的 频 率<br />

addr_size 此 内 容 有 待 继 续 扩 展 1 表 示 32 位 地 址 这 是 当 前 唯 一 受 支<br />

持 的 地 址 大 小<br />

range<br />

外 围 设 备 所 占 用 的 地 址 范 围<br />

PeripAccessCapability<br />

此 参 数 定 义 了 外 围 设 备 的 功 能 它 是 各 种 单 独 功 能 值 的 总 和 请 参 阅 第 4-47 页<br />

表 4-6<br />

例 如<br />

• 值 0x20020 表 示 此 外 围 设 备 可 以 处 理 字 数 据 访 问 但 不 能 处 理 字 节 半 字<br />

或 双 字 数 据 访 问 另 外 可 识 别 Endian 信 号 此 值 预 定 义 为<br />

PeripAccessCapability_Minimum<br />

• 值 0x20038 表 示 此 外 围 设 备 可 以 处 理 字 节 半 字 或 字 数 据 访 问 但 不 能 处<br />

理 双 字 数 据 访 问 另 外 可 识 别 Endian 信 号 此 值 预 定 义 为<br />

PeripAccessCapability_Typical<br />

4-46 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4-6 <br />

<br />

字 节 PeripAccessCapability_Byte 0x8<br />

半 字 PeripAccessCapability_HWord 0x10<br />

字 PeripAccessCapability_Word 0x20<br />

双 字 PeripAccessCapability_DWord 0x40<br />

外 围 设 备 接 受 空 闲 周 期 PeripAccessCapability_Idles 0x10000 <br />

外 围 设 备 识 别 Endian 信 号 PeripAccessCapability_Endian 0x20000 <br />

外 围 设 备 识 别 字 节 道 PeripAccessCapability_Bytelane 0x40000 <br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-47


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10.5 <strong>ARM</strong>ulif_CoreCycles<br />

此 函 数 返 回 主 流 水 线 已 步 进 的 次 数<br />

需 要 内 核 模 块 的 支 持<br />

<br />

对 <strong>ARM</strong>9 模 型 来 说 是 门 控 时 钟<br />

此 时 钟 可 以 通 过 存 储 器 或 互 锁 设 备 来 安 装<br />

<br />

<strong>ARM</strong>Time <strong>ARM</strong>ulif_CoreCycles(RDI_ModuleDesc *mdesc)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

<br />

返 回 主 流 水 线 已 步 进 的 次 数<br />

需 要 内 核 模 块 的 支 持<br />

4.10.6 <strong>ARM</strong>ulif_CPUCycles<br />

此 函 数 返 回 以 CPU 速 度 单 位 表 示 的 时 间<br />

<br />

仅 在 支 持 基 于 <strong>ARM</strong>10 和 XScale 的 模 型<br />

<br />

<strong>ARM</strong>Time <strong>ARM</strong>ulif_CpuCycles(RDI_ModuleDesc *mdesc)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

<br />

返 回 以 CPU 速 度 单 位 表 示 的 时 间<br />

需 要 内 核 模 块 的 支 持<br />

4-48 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10.7 <strong>ARM</strong>ulif_EndCondition<br />

此 函 数 返 回 传 送 至 <strong>ARM</strong>ulif_StopExecution 的 reason<br />

<br />

unsigned <strong>ARM</strong>ulif_EndCondition(RDI_ModuleDesc *mdesc)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

4.10.8 <strong>ARM</strong>ulif_GetCoreClockFreq<br />

此 函 数 返 回 单 位 为 赫 兹 的 CPUSPEED<br />

<br />

<strong>ARM</strong>Time <strong>ARM</strong>ulif_GetCoreClockFreq(RDI_ModuleDesc *mdesc)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-49


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10.9 <strong>ARM</strong>ulif_InstallHourglass<br />

使 用 此 函 数 安 装 从 <strong><strong>ARM</strong>ulator</strong> 到 用 户 模 型 的 沙 漏 计 时 回 调<br />

<br />

void *<strong>ARM</strong>ulif_InstallHourglass(RDI_ModuleDesc *mdesc,<br />

armul_Hourglass *newHourglass, void *handle);<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

newHourglass armul_Hourglass 类 型 的 函 数 您 可 以 使 用 以 下 路 径 在 文 件<br />

armul_types.h 中 找 到 armul_Hourglass 的 原 型<br />

handle<br />

ExtensionKit_path/1.3/Final/platform/armulif<br />

在 该 路 径 中<br />

• platform 是<br />

— Windows 的 win_32-pentium<br />

— Linux 的 linux-pentium<br />

— Solaris 的 solaris-sparc<br />

• 对 于 Windows 请 用 \ 替 换 /<br />

函 数 newHourglass 所 需 的 数 据 的 指 针<br />

<br />

安 装 沙 漏 计 时 后<br />

每 次 执 行 指 令 后 <strong><strong>ARM</strong>ulator</strong> 均 将 回 调 您 的 模 型<br />

<br />

此 函 数 将 返 回 一 个 句 柄<br />

以 便 您 的 模 型 用 于 删 除 沙 漏 回 调<br />

4-50 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10.10 <strong>ARM</strong>ulif_ReadBusRange<br />

您 必 须 提 供 一 个 breg 结 构 以 注 册 外 围 设 备<br />

调 用 此 函 数 以 初 始 化 该 结 构 中 的 字 段<br />

<br />

int <strong>ARM</strong>ulif_ReadBusRange(struct RDI_ModuleDesc *mdesc,<br />

struct RDI_HostosInterface const *hostif,<br />

toolconf config,<br />

struct <strong>ARM</strong>ul_BusPeripAccessRegistration *breg,<br />

uint32 default_base, uint32 default_size,<br />

char const *default_bus_name);<br />

其 中<br />

mdesc<br />

hostif<br />

config<br />

是 内 核 的 句 柄<br />

是 主 机 接 口 的 句 柄<br />

是 传 送 至 BEGIN_INIT 中 模 型 的 配 置<br />

breg 是 包 含 信 息 的 <strong><strong>ARM</strong>ulator</strong> 结 构 在 registerPeripFunc() 中 需 用 到 此<br />

结 构 请 参 阅 第 4-45 页 <strong>ARM</strong>ul_BusRegisterPeripFunc<br />

有 关 此 结 构 的 详 情<br />

请 参 阅 以 下 路 径 中 的 armulbus.h<br />

ExtensionKit_path/1.3/Final/platform/armulif<br />

在 该 路 径 中<br />

• platform 是<br />

— Windows 的 win_32-pentium<br />

— Linux 的 linux-pentium<br />

— Solaris 的 solaris-sparc<br />

• 对 于 Windows 请 用 \ 替 换 /<br />

default_base 用 于 外 围 设 备 的 缺 省 基 址<br />

基 址 则 会 使 用 此 地 址<br />

如 果 config 中 未 包 含 用 于 外 围 设 备 的<br />

default_size 用 于 外 围 设 备 的 缺 省 存 储 器 区 域 大 小 如 果 config 中 未 包 含 用 于<br />

外 围 设 备 的 存 储 器 大 小 则 会 使 用 此 大 小<br />

default_bus_name<br />

是 字 符 串 的 指 针 如 果 用 于 此 外 围 设 备 的 配 置 参 数 中 未 发 现 总 线<br />

名 称 则 会 使 用 此 字 符 串 例 如 在 .dsc 或 .ami 文 件 中<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-51


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10.11 <strong>ARM</strong>ulif_RemoveHourglass<br />

使 用 此 函 数 删 除 沙 漏 回 调<br />

<br />

int <strong>ARM</strong>ulif_RemoveHourglass(RDI_ModuleDesc *mdesc, void *node);<br />

其 中<br />

mdesc<br />

node<br />

是 内 核 的 句 柄<br />

是 <strong>ARM</strong>ulif_InstallHourglass 返 回 的 句 柄<br />

4.10.12 <strong>ARM</strong>ulif_StopExecution<br />

此 函 数 在 当 前 指 令 结 束 时 停 止 模 拟 器 的 执 行<br />

并 给 出 原 因 代 码<br />

<br />

void <strong>ARM</strong>ulif_StopExecution(RDI_ModuleDesc *mdesc, unsigned reason)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

reason 是 一 个 RDIError 错 误 值 调 试 器 将 解 释 reason 并 产 生 一 定 的 消 息<br />

可 能 的 错 误 有<br />

RDIError_NoError<br />

程 序 自 然 停 止<br />

RDIError_BreakpointReached<br />

停 止 条 件 为 断 点<br />

RDIError_WatchPointReached<br />

停 止 条 件 为 观 察 点<br />

RDIError_<strong>User</strong>Interrupt<br />

用 户 中 断 执 行<br />

4-52 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.10.13 <strong>ARM</strong>ulif_Time<br />

此 函 数 返 回 自 系 统 重 置 起 执 行 的 存 储 器 周 期 数<br />

<br />

<strong>ARM</strong>Time <strong>ARM</strong>ulif_CoreCycles(RDI_ModuleDesc *mdesc)<br />

其 中<br />

mdesc<br />

是 内 核 的 句 柄<br />

<br />

4.10.14 Hostif_RaiseError<br />

此 函 数 返 回 自 系 统 重 置 起 执 行 的 周 期 总 数<br />

一 些 初 始 化 和 安 装 函 数 可 以 返 回 <strong>ARM</strong>ul_Error 类 型 的 错 误 这 些 错 误 必 须 通 过<br />

Hostif_RaiseError() 传 送 此 函 数 与 printf 函 数 相 似 用 于 格 式 化 与 <strong>ARM</strong>ul_Error<br />

错 误 代 码 相 关 的 错 误 消 息<br />

Hostif_RaiseError 仅 打 印 错 误 消 息 调 用 此 函 数 后 模 型 肯 定 会 返 回 适 当 的 错 误<br />

例 如 RDIError_UnableToInitialise<br />

Hostif_RaiseError 只 能 在 初 始 化 过 程 中 使 用<br />

<br />

void Hostif_RaiseError(const struct RDI_HostosInterface *hostif,<br />

const char *format, ...)<br />

其 中<br />

hostif<br />

format<br />

是 主 机 接 口 的 句 柄<br />

是 要 格 式 化 的 错 误 消 息 的 错 误 代 码<br />

... 是 printf 样 式 的 各 种 类 型 说 明 符<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-53


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.11 <br />

本 部 分 介 绍 了 可 用 于 访 问 调 试 器 的 输 入<br />

输 出 和 RDI 函 数<br />

4.11.1 Hostif_ConsolePrint<br />

一 些 函 数 用 于 在 主 机 调 试 器 中 显 示 消 息 在 调 试 器 中 它 们 将 消 息 显 示 在 相 关<br />

的 窗 口<br />

• 第 4-54 页 Hostif_ConsolePrint<br />

• 第 4-55 页 Hostif_ConsoleRead<br />

• 第 4-55 页 Hostif_ConsoleReadC<br />

• 第 4-56 页 Hostif_ConsoleWrite<br />

• 第 4-56 页 Hostif_DebugPause<br />

• 第 4-56 页 Hostif_DebugPrint<br />

• 第 4-57 页 Hostif_PrettyPrint<br />

• 第 4-57 页 Hostif_WriteC<br />

所 有 这 些 函 数 都 将 下 面 的 值 作 为 第 一 个 参 数<br />

const struct RDI_HostosInterface *hostif<br />

此 值 可 用 于 模 型 的 状 态 数 据 结 构 中 在 BEGIN_STATE_DECL() 和 END_STATE_DECL() 宏<br />

之 间 定 义 请 参 阅 第 4-12 页 基 本 模 型 接 口<br />

此 函 数 将 格 式 字 符 串 中 指 定 的 文 本 打 印 至 <strong><strong>ARM</strong>ulator</strong> 控 制 台<br />

该 文 本 显 示 在 相 应 的 I/O 窗 口<br />

在 GUI 调 试 器 中<br />

<br />

void Hostif_ConsolePrint(const struct RDI_HostosInterface *hostif,<br />

const char *format, ...)<br />

其 中<br />

hostif<br />

format<br />

是 主 机 接 口 的 句 柄<br />

是 printf 样 式 的 格 式 化 输 出 字 符 串 的 指 针<br />

... 是 与 format 相 关 的 各 个 参 数 数 量<br />

<br />

使 用 Hostif_PrettyPrint() 显 示 启 动 信 息<br />

4-54 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.11.2 Hostif_ConsoleRead<br />

此 函 数 从 <strong><strong>ARM</strong>ulator</strong> 控 制 台 读 取 字 符 串<br />

到 达 新 行 或 缓 冲 器 的 末 尾 时 停 止 读 取<br />

<br />

char *Hostif_ConsoleRead(const struct RDI_HostosInterface *hostif,<br />

char *buffer, int len)<br />

其 中<br />

hostif<br />

buffer<br />

len<br />

是 主 机 接 口 的 句 柄<br />

是 存 放 字 符 串 的 缓 冲 器 的 指 针<br />

是 缓 冲 器 的 最 大 长 度<br />

<br />

此 函 数 返 回 缓 冲 器 指 针<br />

或 者 在 出 错 时 或 文 件 末 尾 返 回 NULL<br />

4.11.3 Hostif_ConsoleReadC<br />

缓 冲 器 最 多 可 容 纳 len-1 个 字 符 以 零 终 结 如 果 读 取 到 新 行 则 包 含 在 零 前 面<br />

的 字 符 串 中<br />

此 函 数 从 <strong><strong>ARM</strong>ulator</strong> 控 制 台 读 取 字 符<br />

<br />

int Hostif_ConsoleReadC(const struct<br />

RDI_HostosInterface *hostif)<br />

其 中<br />

hostif<br />

是 主 机 接 口 的 句 柄<br />

<br />

此 函 数 返 回 读 取 的 字 符 的 ASCII 值 或 EOF<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-55


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.11.4 Hostif_ConsoleWrite<br />

此 函 数 将 字 符 串 写 入 <strong><strong>ARM</strong>ulator</strong> 控 制 台<br />

<br />

int Hostif_ConsoleWrite(const struct RDI_HostosInterface *hostif,<br />

const char *buffer, int len)<br />

其 中<br />

hostif<br />

buffer<br />

len<br />

是 主 机 接 口 的 句 柄<br />

存 放 以 零 终 结 的 字 符 串 的 缓 冲 器 指 针<br />

是 缓 冲 器 的 长 度<br />

<br />

此 函 数 返 回 实 际 写 入 的 字 符 数 如 果 不 发 生 错 误 则 为 len<br />

4.11.5 Hostif_DebugPause<br />

此 函 数 等 待 用 户 按 任 意 键<br />

<br />

void Hostif_DebugPause(const struct RDI_HostosInterface *hostif)<br />

其 中<br />

hostif<br />

是 主 机 接 口 的 句 柄<br />

4.11.6 Hostif_DebugPrint<br />

此 函 数 将 消 息 显 示 在 GUI 调 试 器 的 记 录 窗 口 或 命 令 行 调 试 器 的 控 制 台 中<br />

<br />

void Hostif_DebugPrint(const struct RDI_HostosInterface *hostif,<br />

const char *format, ...)<br />

其 中<br />

hostif<br />

format<br />

是 主 机 接 口 的 句 柄<br />

是 printf 样 式 的 格 式 化 输 出 字 符 串 的 指 针<br />

... 是 与 format 相 关 的 各 个 参 数 数 量<br />

4-56 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.11.7 Hostif_PrettyPrint<br />

此 函 数 以 与 Hostif_ConsolePrint() 相 同 的 方 式 打 印 字 符<br />

检 测 以 避 免 自 动 换 行 可 使 用 此 函 数 显 示 启 动 信 息<br />

另 外 还 可 执 行 行 中 断 的<br />

<br />

void Hostif_PrettyPrint(const struct RDI_HostosInterface *hostif,<br />

struct hashblk * /*toolconf*/ config,<br />

const char *format, ...)<br />

其 中<br />

hostif<br />

是 主 机 接 口 的 句 柄<br />

config 模 型 的 toolconf 配 置 数 据 库 的 指 针 此 值 可 用 于 模 型 的 状 态 数 据 结<br />

构 中 在 BEGIN_STATE_DECL() 和 END_STATE_DECL() 宏 之 间 定 义 请 参<br />

阅 第 4-12 页 基 本 模 型 接 口<br />

format<br />

是 printf 样 式 的 格 式 化 输 出 字 符 串 的 指 针<br />

... 是 与 format 相 关 的 各 个 参 数 数 量<br />

4.11.8 Hostif_WriteC<br />

此 函 数 将 字 符 写 入 <strong><strong>ARM</strong>ulator</strong> 控 制 台<br />

<br />

void Hostif_ConsoleWriteC(const struct<br />

RDI_HostosInterface *hostif, int c)<br />

其 中<br />

hostif<br />

是 主 机 接 口 的 句 柄<br />

c 要 写 入 的 字 符 c 将 转 换 为 无 符 号 的 字 符<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-57


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.12 <br />

本 部 分 介 绍 了 跟 踪 器 模 块 tracer.c 提 供 的 函 数<br />

<br />

这 些 函 数 并 未 导 出 如 果 您 想 在 模 型 中 使 用 这 些 函 数 则 必 须 将 模 型 与<br />

tracer.c 一 起 构 建<br />

可 通 过 编 译 EXTERNAL_DISPATCH 定 义 的 tracer.c 来 更 改 这 些 函 数 的 缺 省 实 施 情 况<br />

tracer.h 中 说 明 了 Trace_State 和 Trace_Packet 的 格 式<br />

4.12.1 Tracer_Open<br />

初 始 化 跟 踪 器 时 会 调 用 此 函 数<br />

<br />

unsigned Tracer_Open(Trace_State *ts)<br />

<br />

tracer.c 中 的 实 施 步 骤 将 从 此 函 数 打 开 输 出 文 件 并 写 入 标 题<br />

4.12.2 Tracer_Dispatch<br />

对 于 每 个 指 令 事 件 或 存 储 器 访 问 系 统 在 所 有 跟 踪 事 件 上 均 会 调 用 此 函 数<br />

<br />

void Tracer_Dispatch(Trace_State *ts, Trace_Packet *packet)<br />

<br />

在 tracer.c 中<br />

此 函 数 将 信 息 包 写 入 跟 踪 文 件<br />

4-58 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.12.3 Tracer_Close<br />

此 函 数 在 跟 踪 结 束 时 调 用<br />

<br />

void Tracer_Close(Trace_State *ts)<br />

<br />

文 件 tracer.c 使 用 此 函 数 关 闭 跟 踪 文 件<br />

4.12.4 Tracer_Flush<br />

此 函 数 在 跟 踪 被 禁 用 时 调 用<br />

<br />

extern void Tracer_Flush(Trace_State *ts)<br />

<br />

文 件 tracer.c 使 用 此 函 数 将 输 出 刷 新 至 跟 踪 文 件<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-59


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.13 <br />

模 拟 系 统 中 的 存 储 器 类 型 和 速 度 可 在 映 射 文 件 中 详 细 说 明<br />

加 存 储 器 的 区 域 数 量 并 且 还 对 每 个 区 域 定 义 了 以 下 内 容<br />

• 该 区 域 映 射 时 的 地 址 范 围<br />

• 以 字 节 表 示 的 数 据 总 线 宽 度<br />

• 存 储 器 区 域 的 访 问 时 间<br />

映 射 文 件 定 义 了 附<br />

调 试 器 接 受 任 何 名 字 的 映 射 文 件<br />

详 情 请 参 阅 调 试 器 说 明 文 档<br />

有 关 在 调 试 会 话 中 如 何 使 用 特 定 映 射 文 件 的<br />

为 计 算 每 个 可 能 的 存 储 器 访 问 类 型 的 等 待 状 态 数 <strong><strong>ARM</strong>ulator</strong> 使 用 映 射 文 件 中<br />

指 定 的 访 问 次 数 和 调 试 器 的 时 钟 频 率 请 参 阅 调 试 器 说 明 文 档<br />

另 请 参 阅 第 2-28 页 使 用 映 射 文 件 进 行 存 储 器 建 模<br />

<br />

存 储 器 映 射 文 件 说 明 了 peripherals.ami 中 定 义 的 存 储 器 区 域 的 特 征 请 参 阅 第<br />

4-64 页 <strong><strong>ARM</strong>ulator</strong> 配 置 文 件 .map 文 件 必 须 定 义 至 少 与 在 peripherals.ami 中 为<br />

堆 和 堆 栈 指 定 的 区 域 大 小 相 同 并 且 处 于 相 同 位 置 的 rw 区 域 否 则 执 行 过 程 中<br />

可 能 会 发 生 数 据 出 错<br />

4.13.1 <br />

每 行 的 格 式 为<br />

start size name width access{*} read-times write-times<br />

其 中<br />

start 是 十 六 进 制 存 储 器 区 域 的 起 始 地 址 例 如 80000<br />

size 是 十 六 进 制 存 储 器 区 域 的 大 小 例 如 4000<br />

name<br />

是 可 用 于 在 显 示 存 储 器 访 问 统 计 数 据 时 识 别 存 储 器 区 域 的 单 个 字<br />

您 可 以 使 用 任 何 名 称 为 提 高 存 储 器 访 问 统 计 数 据 的 可 读 性 请<br />

使 用 SRAM DRAM 或 EPROM 等 描 述 性 名 称<br />

width 以 字 节 表 示 的 数 据 总 线 宽 度 即 1 表 示 8 位 总 线 2 表 示 16 位 总<br />

线 4 表 示 32 位 总 线<br />

4-60 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

access<br />

read-times<br />

说 明 可 在 该 存 储 器 区 域 上 执 行 的 访 问 类 型<br />

r 只 读<br />

w 只 写<br />

rw 既 可 读 也 可 写<br />

- 无 法 访 问 任 何 访 问 均 会 导 致 数 据 或 预 取 出 错<br />

您 可 以 在 access 上 添 加 星 号 (*) 说 明 它 是 基 于 Thumb 的 系 统 该<br />

系 统 使 用 32 位 数 据 总 线 的 存 储 器 但 具 有 16 位 锁 存 器 锁 住 了 上 部 的<br />

16 位 数 据 以 便 您 直 接 从 该 锁 存 器 中 获 取 随 后 的 16 位 循 序 存 取<br />

以 纳 秒 表 示 非 连 续 的 和 连 续 的 读 取 时 间 先 输 入 非 连 续 的 读 取 访<br />

问 时 间 然 后 输 入 一 个 斜 线 (/) 再 在 斜 线 后 输 入 连 续 的 读 取 访 问<br />

时 间 如 果 省 略 斜 线 并 仅 使 用 一 个 数 字 则 表 示 非 连 续 访 问 时 间<br />

与 连 续 访 问 时 间 相 同<br />

<br />

为 建 立 精 确 的 真 实 设 备 模 型<br />

写 时 间 上 添 加 信 号 传 输 延 迟<br />

您 可 能 需 在 对 存 储 器 芯 片 设 定 的 读<br />

20 到 30 纳 秒<br />

write-times<br />

说 明 非 连 续 和 连 续 的 写 入 时 间<br />

相 同<br />

其 格 式 与 为 读 取 时 间 设 定 的 格 式<br />

以 下 实 例 假 定 缺 省 的 时 钟 速 度 为 20MHz<br />

1<br />

0 80000000 RAM 4 rw 135/85 135/85<br />

此 实 例 描 述 了 一 个 系 统 此 系 统 具 有 从 0 到 0x7FFFFFFF 的 RAM 单 个 连 续 区 域<br />

并 且 该 区 域 具 有 32 位 数 据 总 线 读 写 访 问 功 能 135 纳 秒 的 非 连 续 访 问 时 间 和<br />

85 纳 秒 的 连 续 访 问 时 间<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-61


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

2<br />

此 实 例 描 述 了 一 个 典 型 的 嵌 入 式 系 统 具 有 32KB 芯 片 上 的 存 储 器 16 位 ROM<br />

和 32KB 的 外 部 DRAM<br />

00000000 8000 SRAM 4 rw 1/1 1/1<br />

00008000 8000 ROM 2 r 100/100 100/100<br />

00010000 8000 DRAM 2 rw 150/100 150/100<br />

7FFF8000 8000 Stack 2 rw 150/100 150/100<br />

存 储 器 区 域 有<br />

• 从 0 到 0x7FFF 的 快 速 区 域 具 有 32 位 数 据 总 线 此 区 域 标 记 为 SRAM<br />

• 从 0x8000 到 0xFFFF 的 速 度 较 慢 的 区 域 具 有 16 位 数 据 总 线 此 区 域 标 记<br />

为 ROM 并 包 含 映 像 代 码 该 区 域 为 只 读<br />

• 从 0x10000 到 0x17FFF 的 RAM 区 域 用 于 映 像 数 据<br />

• 从 0x7FFF8000 到 0x7FFFFFFF 的 RAM 区 域 用 于 堆 栈 数 据 堆 栈 指 针 被 初 始<br />

化 为 0x80000000<br />

在 最 终 的 硬 件 中 两 个 截 然 不 同 的 外 部 DRAM 区 域 组 合 在 一 起 但 这 并 不 影 响<br />

模 拟 的 精 确 度<br />

为 表 示 快 速 无 等 待 状 态 存 储 器 为 SRAM 区 域 设 定 的 访 问 时 间 为 1 纳 秒<br />

实 际 上 这 表 示 每 次 访 问 需 要 1 个 时 钟 周 期 因 为 <strong><strong>ARM</strong>ulator</strong> 使 此 访 问 时 间 最 大<br />

限 度 地 靠 近 时 钟 周 期 但 是 将 其 指 定 为 1 纳 秒 可 使 相 同 的 映 射 文 件 用 于 多 个<br />

具 有 不 同 时 钟 速 度 的 模 拟<br />

<br />

为 保 证 模 拟 的 精 确 度<br />

有 存 储 器 区 域<br />

请 确 保 存 储 器 映 像 中 描 述 了 您 模 拟 的 映 像 可 能 访 问 的 所<br />

为 确 保 已 描 述 您 认 为 映 像 可 能 访 问 的 所 有 存 储 器 区 域 您 可 以 定 义 覆 盖 整 个 地<br />

址 范 围 的 单 个 存 储 器 区 域 作 为 映 射 文 件 的 最 后 一 行 例 如 您 可 以 在 上 述 描<br />

述 中 添 加 以 下 行<br />

00000000 80000000 Dummy 4 - 1/1 1/1<br />

您 可 以 使 用 print $memory_statistics 命 令 或 用 于 调 试 器 的 与<br />

$memory_statistics 效 果 等 同 的 命 令 检 测 所 需 的 存 储 器 区 域 以 外 是 否 发 生 任 何<br />

读 或 写 操 作<br />

<br />

虚 拟 存 储 器 区 域 必 须 为 映 射 文 件 的 最 后 一 个 条 目<br />

4-62 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

<br />

要 读 取 存 储 器 统 计 数 据 请 使 用 print 命 令 例 如<br />

print $memory_statistics<br />

print $memstats 是 print $memory_statistics 的 缩 写<br />

对 于 调 试 器<br />

请 使 用 与 $memstats 或 $memory_statistics 效 果 等 同 的 命 令<br />

<br />

$memstats 在 <strong>RealView</strong> Debugger 中 不 受 支 持<br />

实 例 4-1 显 示 了 给 定 的 报 告 格 式<br />

4-1<br />

address name W acc R(N/S) W(N/S) reads(N/S) writes(N/S) time (ns)<br />

00000000 Dummy 4 - 1/1 1/1 0/0 0/0 0<br />

7FFF8000 Stack 2 rw 150/100 150/100 9290/10590 4542/11688 8538300<br />

00010000 DRAM 2 rw 150/100 150/100 18817/18 11031/140 8915800<br />

00008000 ROM 2 r 100/100 100/100 48638/176292 0/0 44817000<br />

00000000 SRAM 4 rw 1/1 1/1 0/0 0/0 0<br />

实 例 4-1 中 的 报 告 说 明<br />

• ROM 访 问 对 于 此 应 用 程 序 来 说 至 关 重 要 可 考 虑 使 用 速 度 更 快 的 ROM<br />

使 用 可 分 段 传 输 的 ROM 或 增 大 ROM 的 宽 度 32 位<br />

• 0x0 处 无 需 使 用 SRAM 可 考 虑 将 堆 栈 或 其 它 数 据 定 位 在 0x0 处<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-63


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.14 <strong><strong>ARM</strong>ulator</strong> <br />

本 节 包 括 以 下 小 节<br />

• 第 4-65 页 预 定 义 标 签<br />

• 第 4-65 页 处 理 器<br />

• 第 4-67 页 更 改 可 综 合 处 理 器 的 高 速 缓 存 或 TCM 的 大 小<br />

<strong><strong>ARM</strong>ulator</strong> 配 置 文 件 .ami 文 件 是 ToolConf 文 件 请 参 阅 第 4-69 页 ToolConf<br />

视 您 的 系 统 而 定<br />

这 些 文 件 位 于 以 下 路 径<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/<strong><strong>ARM</strong>ulator</strong>/1.3/release/platform<br />

在 该 路 径 中<br />

• platform 是<br />

— Windows 的 win_32-pentium<br />

— Linux 的 linux-pentium<br />

— Solaris 的 solaris-sparc<br />

• 对 于 Windows 请 用 \ 替 换 /<br />

您 可 以 复 制 .ami 文 件 并 编 辑 它 们 为 您 的 新 .ami 文 件 设 置 合 适 的 目 录 并 将 其<br />

路 径 添 加 至 <strong>ARM</strong>CONF 环 境 变 量 在 <strong>ARM</strong>CONF 中 请 确 保 您 的 目 录 出 现 在<br />

<strong><strong>ARM</strong>ulator</strong> 目 录 的 前 面<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/<strong><strong>ARM</strong>ulator</strong>/1.3/release/platform<br />

在 缺 省 情 况 下 此 目 录 具 有 以 下 .ami 文 件<br />

• bustypes.ami<br />

• default.ami<br />

• example1.ami<br />

• peripherals.ami<br />

• processors.ami<br />

• vfp.ami<br />

<strong><strong>ARM</strong>ulator</strong> 将 加 载 它 在 环 境 变 量 <strong>ARM</strong>CONF 中 任 何 指 定 路 径 上 发 现 的 所 有 .ami 文 件<br />

最 初 被 设 定 为 指 向<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/<strong><strong>ARM</strong>ulator</strong>/1.3/release/platform<br />

如 果 两 个 文 件 中 指 定 的 配 置 不 同 则 使 用 第 一 个 指 定 值 如 果 <strong>ARM</strong>CONF 中 有 多 个<br />

目 录 <strong><strong>ARM</strong>ulator</strong> 将 按 .ami 文 件 出 现 在 列 表 中 的 顺 序 从 目 录 加 载 这 些 文 件<br />

<strong><strong>ARM</strong>ulator</strong> 按 无 法 预 见 的 顺 序 从 每 个 目 录 加 载 .ami 文 件<br />

4-64 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.14.1 <br />

读 取 .ami 文 件 之 前 <strong><strong>ARM</strong>ulator</strong> 将 根 据 您 指 定 给 调 试 器 的 设 置 自 行 创 建 若 干 个<br />

标 签 这 些 标 签 在 表 4-7 中 列 示 .ami 文 件 中 的 预 处 理 指 令 将 使 用 这 些 标 签 控<br />

制 配 置<br />

4-7 <strong><strong>ARM</strong>ulator</strong> <br />

<br />

CPUSpeed<br />

<br />

设 置 为 在 GUI 调 试 器 的 配 置 窗 口 或 命 令 行 调 试 器 的 -clock 命<br />

令 行 选 项 中 设 定 的 速 度 例 如 CPUSpeed=30MHz<br />

FCLK 设 置 为 与 CPUSpeed 相 同 的 值 如 果 该 值 不 为 零 如 果<br />

CPUSpeed 为 零 则 不 会 设 置<br />

MCLK<br />

为 非 高 速 缓 存 内 核 设 置 为 与 FCLK 相 同 的 值<br />

为 高 速 缓 存 内 核 设 置 为 FCLK/MCCFG<br />

ByteSex 如 果 从 调 试 器 指 定 了 bytesex 则 设 置 为 L 或 B 否 则 不 设 置<br />

FPE<br />

从 调 试 器 设 置 为 True 或 False<br />

4.14.2 <br />

处 理 器 区 域 是 子 ToolConf 数 据 库 请 参 阅 第 4-69 页 ToolConf 它 具 有<br />

<strong><strong>ARM</strong>ulator</strong> 支 持 的 处 理 器 完 整 列 表 此 列 表 是 您 的 调 试 器 中 处 理 器 列 表 和 命 令<br />

行 调 试 器 的 -processor 选 项 所 接 受 的 变 量 列 表 的 基 础<br />

您 可 以 在 此 列 表 中 添 加 各 种 处 理 器 以 达 到 在 定 义 中 包 含 特 定 存 储 器 模 型 等 目<br />

的 例 如 请 查 看 位 于 以 下 路 径 的 example1.ami 文 件<br />

install_directory/RV<strong><strong>ARM</strong>ulator</strong>/<strong><strong>ARM</strong>ulator</strong>/1.3/release/platform<br />

Default 将 指 定 使 用 的 处 理 器 如 果 未 指 定 其 它 任 何 处 理 器 Processors 区 域<br />

中 的 其 它 每 个 条 目 都 是 处 理 器 的 名 称<br />

第 4-66 页 的 实 例 4-2 声 明 了 两 种 处 理 器 即 TRACED_<strong>ARM</strong>10 和<br />

PROFILED_<strong>ARM</strong>7 在 此 实 例 中 MCCFG 是 处 理 器 上 的 时 钟 频 率 与 外 部 总 线 上 的<br />

时 钟 频 率 之 比<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-65


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4-2 toolconf <br />

{Processors<br />

{TRACED_<strong>ARM</strong>10=<strong>ARM</strong>10200E<br />

;CPUSPEED=400MHz<br />

;Memory clock divisor.<br />

;(The AHB runs this many times slower than the core.)<br />

MCCFG=4<br />

{Flatmem<br />

{Peripherals<br />

{Tracer=Default_Tracer<br />

;; Output options - can be plaintext to file, binary to file or to<br />

;; RDI log window. (Checked in the order RDILog, File, BinFile.)<br />

RDILog=False<br />

File=armul.trc<br />

BinFile=armul.trc<br />

;; Tracer options - what to trace<br />

TraceInstructions=True<br />

TraceRegisters=False<br />

TraceMemory=True<br />

TraceEvents=False<br />

;; Flags - disassemble instructions; start up with tracing enabled.<br />

Disassemble=True<br />

StartOn=True<br />

}<br />

}<br />

}<br />

;End TRACED_<strong>ARM</strong>10<br />

}<br />

{PROFILED_<strong>ARM</strong>7=<strong>ARM</strong>720T<br />

{Flatmem<br />

{Peripherals<br />

{Profiler=Default_Profiler<br />

}<br />

}<br />

}<br />

}<br />

;End Processors<br />

}<br />

4-66 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

<br />

<strong><strong>ARM</strong>ulator</strong> 使 用 以 下 算 法 查 找 选 定 处 理 器 的 配 置<br />

1. 将 当 前 区 域 设 置 为 Processors<br />

2. 在 当 前 区 域 中 找 到 选 定 的 处 理 器<br />

3. 如 果 标 签 具 有 子 标 签 则 该 子 标 签 是 所 需 的 配 置<br />

<br />

假 设 您 已 创 建 了 一 个 名 为 MyASIC 的 存 储 器 模 型 用 于 与 <strong>ARM</strong>7TDMI 处 理 器 内<br />

核 结 合 以 组 建 一 个 名 为 <strong>ARM</strong>7TASIC 的 新 微 控 制 器 为 了 能 从 调 试 器 选 择 此 存 储 器<br />

模 型 请 添 加 在 example1.ami 上 建 模 的 .ami 文 件<br />

4.14.3 TCM <br />

要 更 改 可 综 合 处 理 器 的 高 速 缓 存 或 TCM 的 大 小 请 复 制 processors.ami 文 件<br />

然 后 将 副 本 放 入 适 当 的 目 录 中 请 参 阅 第 4-64 页 <strong><strong>ARM</strong>ulator</strong> 配 置 文 件 并 进 行<br />

编 辑<br />

例 如<br />

要 将 <strong>ARM</strong>946E-S 的 两 个 高 速 缓 存 均 更 改 为 8KB<br />

1. 在 processors.ami 文 件 的 副 本 中 找 到 以 下 几 行<br />

{<strong>ARM</strong>946E-S=<strong>ARM</strong>946E-S-REV1<br />

}<br />

2. 插 入 几 行 使 此 段 变 为<br />

{<strong>ARM</strong>946E-S=<strong>ARM</strong>946E-S-REV1<br />

ICache_Lines=256<br />

DCache_Lines=256<br />

}<br />

此 操 作 将 覆 盖 armulate.dsc 中 相 应 的 行<br />

<br />

如 果 执 行 此 更 改 从 <strong>ARM</strong>946E-S 继 承 属 性 的 任 何 内 核 也 会 受 到 影 响 这 些 内 核 包<br />

括 <strong>ARM</strong>946E-S-ETM-(L) <strong>ARM</strong>946E-S-ETM-(M) 或 <strong>ARM</strong>946E-S-ETM-(S) 等<br />

未 从 <strong>ARM</strong>946E-S 继 承 属 性 的 内 核 不 会 受 到 影 响<br />

<strong>ARM</strong>946E-S-REV0 或 <strong>ARM</strong>946E-S-REV1 等<br />

这 些 内 核 包 括<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-67


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

如 果 您 想 更 改 处 理 器 的 高 速 缓 存 或 TCM 大 小 并 且 该 处 理 器 的 processors.ami<br />

中 还 没 有 程 序 段 则 您 可 以 添 加 一 个 程 序 段 例 如 要 将 <strong>ARM</strong>926EJ-S 的 指 令<br />

RAM 大 小 从 64KB 更 改 为 32KB<br />

1. 打 开 processors.ami 文 件 的 副 本<br />

2. 插 入 一 个 新 程 序 段<br />

{<strong>ARM</strong>926EJ-S=Processors_Common_<strong>ARM</strong>ULATE<br />

IRamSize=0x8000<br />

}<br />

此 操 作 将 覆 盖 armulate.dsc 中 相 应 的 行<br />

文 件 中 未 指 定 的 任 何 详 细 信 息 将 保 持 不 变<br />

与 在 armulate.dsc 中 指 定 的 内 容 相 同<br />

4-68 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.15 ToolConf<br />

本 节 包 括 以 下 小 节<br />

• Toolconf 概 述<br />

• 第 4-69 页 文 件 格 式<br />

• 第 4-72 页 ToolConf 数 据 库 中 的 布 尔 标 记<br />

• 第 4-72 页 ToolConf 数 据 库 中 的 SI 单 位<br />

• 第 4-72 页 ToolConf_Lookup<br />

• 第 4-73 页 ToolConf_Cmp<br />

4.15.1 Toolconf <br />

ToolConf 是 <strong><strong>ARM</strong>ulator</strong> 中 的 模 块 ToolConf 文 件 是 树 结 构 的 数 据 库 由 标 签 和<br />

值 对 组 成 标 签 和 值 都 是 字 符 串 并 且 通 常 不 区 分 大 小 写 ToolConf 文 件 是 .ami<br />

或 .dsc 类 型 的 文 件<br />

您 可 以 从 ToolConf 数 据 库 查 找 与 标 签 相 关 的 值<br />

或 者 添 加 或 更 改 值<br />

如 果 标 签 被 多 次 赋 值<br />

则 使 用 第 一 个 值<br />

4.15.2 <br />

以 下 是 典 型 的 ToolConf 数 据 库 行<br />

TagA=ValueA<br />

TagA=NewValue<br />

Othertag<br />

Othertag=Othervalue<br />

;; Lines starting with ; (semicolon) are comments.<br />

; Tag=Value<br />

第 一 行 在 ToolConf 中 创 建 一 个 名 为 TagA 的 标 签<br />

该 标 签 的 值 为 ValueA<br />

第 二 行 不 起 作 用<br />

因 为 TagA 已 具 有 一 个 值<br />

第 三 行 创 建 一 个 名 为 Othertag 的 标 签<br />

该 标 签 不 具 有 值<br />

第 四 行 将 值 Othervalue 赋 给 Othertag<br />

数 据 库 行 的 开 头 标 签 内 值 内 标 签 或 值 与 = 号 之 间 不 允 许 有 空 格<br />

按 照 惯 例 普 通 注 释 以 两 个 分 号 开 头 以 一 个 分 号 开 头 的 行 通 常 是 被 注 释 禁 止<br />

行 您 可 以 注 释 禁 止 一 行 来 禁 用 它 或 者 不 注 释 一 个 注 释 禁 止 行 来 启 用 它<br />

注 释 必 须 自 成 一 行<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-69


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

<br />

如 果 您 添 加 任 何 ToolConf 文 件<br />

文 件 的 第 一 行 必 须 是<br />

;; <strong><strong>ARM</strong>ulator</strong> configuration file type 3<br />

<strong><strong>ARM</strong>ulator</strong> 将 忽 略 所 有 不 以 此 标 题 开 头 的 .ami 或 .dsc 文 件<br />

<br />

每 个 标 签 可 具 有 其 它 与 之 相 关 的 ToolConf 数 据 库 称 为 它 的 子 库 系 统 在 子 库<br />

中 查 找 标 签 时 如 果 在 子 库 中 未 找 到 标 签 则 会 继 续 在 父 库 中 搜 索 如 果 仍 然<br />

找 不 到 则 在 父 库 的 父 库 中 查 找 以 此 类 推 直 到 找 到 标 签 为 止<br />

这 意 味 着 子 库 仅 包 含 其 值 与 父 库 中 相 同 标 签 的 值 不 同 的 标 签<br />

如 果 为 同 一 个 父 库 多 次 指 定 子 数 据 库<br />

则 这 些 子 数 据 库 会 合 并 起 来<br />

<br />

在 ToolConf 数 据 库 中 指 定 子 库 的 方 法 有 两 种<br />

以 下 一 种 方 法 更 适 合 于 指 定 大 型 子 库<br />

{ TagP=ValueP<br />

TagC1=ValueC1<br />

TagC2=ValueC2<br />

}<br />

这 将 创 建 一 个 名 为 TagP 的 标 签 此 标 签 具 有 值 ValueP 和 一 个 子 数 据 库 子 库 中<br />

的 两 个 标 签 已 被 赋 值<br />

另 一 种 方 法 适 合 于 指 定 小 型 子 库<br />

TagP:TagC=ValueC<br />

这 将 创 建 一 个 名 为 TagP 的 标 签 此 标 签 不 具 有 value TagP 具 有 一 个 子 库 此 子<br />

库 中 创 建 了 值 为 ValueC 的 标 签 TagC 它 相 当 于<br />

{ TagP<br />

TagC=ValueC<br />

}<br />

4-70 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

<br />

支 持 完 整 的 #if...#elif...#else...#endif 的 语 法 您 可 以 使 用 此 语 法 跳 过<br />

ToolConf 数 据 库 的 区 域 表 达 式 使 用 来 自 文 件 的 标 签 例 如 C 预 处 理 器 序 列<br />

#define Control True<br />

#if defined(Control) && Control==True<br />

#define controlIsTrue Yes<br />

#endif<br />

映 射 至 ToolConf 序 列<br />

Control=True<br />

#if Control && Control=True<br />

ControlIsTrue=Yes<br />

#endif<br />

系 统 根 据 该 点 的 配 置 内 容 从 左 至 右 评 估 条 件<br />

件 表 达 式 的 运 算 符<br />

表 4-8 显 示 了 可 用 于 ToolConf 条<br />

4-8 ToolConf <br />

<br />

none Tag 测 试 是 否 存 在 标 签 定 义<br />

== Tag==Value 不 区 分 大 小 写 的 字 符 串 同 等 测 试<br />

!= Tag!=Value 不 区 分 大 小 写 的 字 符 串 不 同 等 测 试<br />

(...) (Tag==Value) 分 组<br />

&& TagA==ValueA && TagB==ValueB 布 尔 值 AND<br />

|| TagA==ValueA || TagB==ValueB 布 尔 值 OR<br />

! !(Tag==Value) 布 尔 值 NOT<br />

<br />

您 可 以 使 用 #include 指 令 将 一 个 ToolConf 文 件 包 含 在 另 一 个 此 类 文 件 中 如 果<br />

此 指 令 所 处 的 区 域 是 在 条 件 表 达 式 的 控 制 下 跳 过 的 区 域 则 此 指 令 将 被 忽 视<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-71


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.15.3 ToolConf <br />

表 4-9 显 示 了 布 尔 标 记 的 所 有 允 许 的 值<br />

这 些 字 符 串 不 区 分 大 小 写<br />

4-9 <br />

True<br />

True<br />

On<br />

High<br />

Hi<br />

False<br />

False<br />

Off<br />

Low<br />

Lo<br />

1 0<br />

T<br />

F<br />

4.15.4 ToolConf SI <br />

您 可 以 使 用 SI (Système Internationale) 单 位 指 定 某 些 值<br />

例 如<br />

4.15.5 ToolConf_Lookup<br />

ClockSpeed=10MHz<br />

MemorySize=2Gb<br />

定 标 因 数 由 单 位 的 前 缀 设 定 <strong><strong>ARM</strong>ulator</strong> 只 接 受 表 示 千 兆 千 兆 的 k M 或<br />

G 前 缀 这 些 前 缀 分 别 对 应 于 10 3 10 6 和 10 9 或 者 2 10 2 20 和 2 30 定 标<br />

<strong><strong>ARM</strong>ulator</strong> 将 根 据 上 下 文 决 定 使 用 哪 一 种 定 标<br />

此 函 数 用 于 在 .ami 或 .dsc 文 件 的 指 定 标 签 中 执 行 搜 索 如 果 发 现 标 记 则 会 返<br />

回 与 其 相 关 的 值 否 则 将 返 回 NULL<br />

<br />

const char *ToolConf_Lookup(toolconf hashv, tag_t tag)<br />

其 中<br />

hashv 是 要 在 其 中 执 行 搜 索 的 数 据 库<br />

tag 要 在 数 据 库 中 搜 索 的 标 签 此 标 签 视 情 况 而 定<br />

4-72 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

<br />

此 函 数 将 返 回<br />

• 标 签 值 的 const 指 针 如 果 搜 索 成 功 的 话<br />

• NULL 如 果 搜 索 失 败 的 话<br />

<br />

const char *option = ToolConf_Lookup(db, <strong>ARM</strong>ulCnf_Size);<br />

/* <strong>ARM</strong>ulCnf_Size is defined in armcnf.h */<br />

4.15.6 ToolConf_Cmp<br />

此 函 数 用 于 对 两 个 ToolConf 数 据 库 标 签 值 执 行 不 区 分 大 小 写 的 比 较<br />

<br />

int ToolConf_Cmp(const char *s1, const char *s2)<br />

其 中<br />

s1<br />

s2<br />

是 要 比 较 的 第 一 个 字 符 串 值 的 指 针<br />

是 要 比 较 的 第 二 个 字 符 串 值 的 指 针<br />

<br />

此 函 数 将 返 回<br />

• 1 如 果 字 符 串 相 同 的 话<br />

• 0 如 果 字 符 串 不 相 同 的 话<br />

<br />

if (ToolConf_Cmp(option, "8192"))<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-73


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.16 <br />

这 里 将 详 细 说 明 两 种 参 考 外 围 设 备<br />

• 中 断 控 制 器<br />

• 第 4-76 页 计 时 器<br />

4.16.1 <br />

中 断 控 制 器 的 基 址 IntBase 是 可 配 置 的<br />

请 参 阅 第 2-33 页 中 断 控 制 器<br />

表 4-10 显 示 单 个 寄 存 器 的 位 置<br />

4-10 <br />

<br />

IntBase IRQStatus 保 留<br />

IntBase + 004 IRQRawStatus 保 留<br />

IntBase + 008 IRQEnable IRQEnableSet<br />

IntBase + 00C 保 留 IRQEnableClear<br />

IntBase + 010 保 留 IRQSoft<br />

IntBase + 100 FIQStatus 保 留<br />

IntBase + 104 FIQRawStatus 保 留<br />

IntBase + 108 FIQEnable FIQEnableSet<br />

IntBase + 10C 保 留 FIQEnableClear<br />

4-74 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

<br />

FIQ 中 断 控 制 器 是 一 位 宽<br />

它 位 于 0 位 上<br />

表 4-11 详 细 说 明 了 与 IRQ 中 断 控 制 器 寄 存 器 中 位 1 到 位 5 相 关 的 中 断 源<br />

以 将 位 0 用 于 复 制 的 FIQ 输 入<br />

您 可<br />

4-11 <br />

<br />

<br />

0 FIQ 源<br />

1 计 划 的 中 断<br />

2 通 信 通 道 Rx<br />

3 通 信 通 道 Tx<br />

4 计 时 器 1<br />

5 计 时 器 2<br />

<br />

计 时 器 1 和 计 时 器 2 可 配 置 为 使 用 IRQ 控 制 器 寄 存 器 中 的 不 同 位<br />

第 2-34 页 计 时 器<br />

请 参 阅<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-75


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4.16.2 <br />

计 时 器 的 基 址 TimerBase 是 可 配 置 的<br />

请 参 阅 第 2-34 页 计 时 器<br />

有 关 单 个 寄 存 器 的 位 置 信 息 请 参 阅 表 4-12<br />

4-12 <br />

<br />

TimerBase Timer1Load Timer1Load<br />

TimerBase + 04 Timer1Value 保 留<br />

TimerBase + 08 Timer1Control Timer1Control<br />

TimerBase + 0C 保 留 Timer1Clear<br />

TimerBase + 10 保 留 保 留<br />

TimerBase + 20 Timer2Load Timer2Load<br />

TimerBase + 24 Timer2Value 保 留<br />

TimerBase + 28 Timer2Control Timer2Control<br />

TimerBase + 2C 保 留 Timer2Clear<br />

TimerBase + 30 保 留 保 留<br />

<br />

将 一 个 值 写 入 其 中 一 个 寄 存 器 中 以 设 置 相 应 计 时 计 数 器 的 初 始 值 您 必 须 将<br />

最 高 的 16 位 写 为 零<br />

如 果 计 时 器 处 于 周 期 模 式 当 计 数 器 达 到 零 时 此 值 也 会 重 新 加 载 计 时 计 数 器<br />

如 果 您 从 此 寄 存 器 读 取 数 据 下 面 的 16 位 将 返 回 您 写 入 的 值 最 高 的 16 位 未<br />

经 过 定 义<br />

<br />

计 时 器 值 寄 存 器 为 只 读 下 面 的 16 位 提 供 了 计 时 计 数 器 的 当 前 值 最 高 的 16<br />

位 未 经 过 定 义<br />

<br />

计 时 器 清 除 寄 存 器 为 只 写<br />

写 入 其 中 一 个 寄 存 器 将 清 除 相 应 计 时 器 所 产 生 的 中 断<br />

4-76 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

<br />

有 关 计 时 器 寄 存 器 位 的 详 情 请 参 阅 表 4-14 和 表 4-13 仅 使 用 位 7 6 3 和 2<br />

您 必 须 将 其 它 位 均 写 成 零<br />

4-13 2 3 <br />

3 2<br />

<br />

<br />

<br />

<br />

0 0 1 0<br />

0 1 16 4<br />

1 0 256 8<br />

1 1 未 定 义 -<br />

计 数 器 是 往 下 计 数 的 它 计 算 按 照 16 或 256 划 分 的 BCLK 周 期 或 BCLK 周 期<br />

位 2 和 位 3 定 义 适 用 于 时 钟 的 预 定 标<br />

4-14 6 7 <br />

0 1<br />

位 7 计 时 器 已 禁 用 计 时 器 已 启 用<br />

位 6 自 由 运 行 模 式 周 期 模 式<br />

在 自 由 运 行 模 式 中 计 时 计 数 器 将 在 达 到 零 时 溢 出 然 后 继 续 从 0xFFFF 开 始 向<br />

下 计 数<br />

在 周 期 模 式 中 当 计 数 器 达 到 零 时 计 时 器 将 发 生 中 断 然 后 从 加 载 寄 存 器 重<br />

新 加 载 值 并 从 该 值 继 续 向 下 计 数<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 4-77


<strong><strong>ARM</strong>ulator</strong> 参 考<br />

4-78 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


本 词 汇 表 中 的 项 目 按 拼 音 顺 序 列 出<br />

前 面 是 英 文 字 母<br />

ADP<br />

AMBA<br />

请 参 阅 Angel 调 试 协 议<br />

请 参 阅 先 进 微 控 制 器 总 线 体 系 结 构<br />

Angel Angel 是 一 个 程 序 您 可 用 其 开 发 和 调 试 在 基 于 <strong>ARM</strong> 的 硬 件 上 运 行 的 应 用 程 序<br />

Angel 可 以 调 试 在 <strong>ARM</strong> 状 态 或 Thumb 状 态 中 运 行 的 应 用 程 序<br />

Angel (ADP)<br />

<strong><strong>ARM</strong>ulator</strong><br />

CPSR<br />

Angel 使 用 名 为 Angel 调 试 协 议 (ADP) 的 调 试 协 议 在 主 机 系 统 和 目 标 系 统 之 间 通<br />

信 ADP 支 持 多 个 通 道 并 提 供 了 一 个 纠 错 通 信 协 议<br />

请 参 阅 <strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong><br />

当 前 程 序 状 态 寄 存 器<br />

MMU<br />

请 参 阅 程 序 状 态 寄 存 器<br />

请 参 阅 存 储 器 管 理 单 元<br />

Multi-ICE 用 于 嵌 入 式 系 统 的 基 于 JTAG 的 多 处 理 器 调 试 工 具 Multi-ICE 是 <strong>ARM</strong> 的 注<br />

册 商 标<br />

PSR<br />

请 参 阅 程 序 状 态 寄 存 器<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 词 汇 表 -1


词 汇 表<br />

PU<br />

RDI<br />

请 参 阅 保 护 单 元<br />

请 参 阅 远 程 调 试 接 口<br />

<strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong><br />

<strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> 指 令 集 模 拟 器 (<strong>RealView</strong> <strong><strong>ARM</strong>ulator</strong> <strong>ISS</strong>)<br />

种 <strong>ARM</strong> 处 理 器 体 系 结 构 的 模 块 集<br />

模 拟 指 令 集 和 各<br />

Semihosting 一 种 机 制 其 中 目 标 将 以 应 用 程 序 代 码 提 出 的 I/O 请 求 传 送 至 主 机 系 统 而 不<br />

是 试 图 支 持 I/O 自 身<br />

SPSR<br />

保 存 程 序 状 态 寄 存 器<br />

请 参 阅 程 序 状 态 寄 存 器<br />

SWI<br />

请 参 阅 软 件 中 断<br />

16 位 单 元 长 度 的 数 据 除 非 另 有 说 明 否 则 其 内 容 将 被 当 作 无 符 号 整 数<br />

(SPSR)<br />

请 参 阅 程 序 状 态 寄 存 器<br />

<br />

控 制 高 速 缓 存 和 存 储 块 访 问 许 可 的 硬 件<br />

程 序 状 态 寄 存 器 (PSR) 包 含 有 关 当 前 程 序 以 及 当 前 处 理 器 的 某 些 信 息 因 此 通<br />

常 也 称 为 处 理 器 状 态 寄 存 器<br />

有 时 也 将 其 称 为 当 前 PSR (CPSR) 以 强 调 与 保 存 PSR (SPSR) 之 间 的 区 别 调 用<br />

当 前 函 数 时 SPSR 会 保 留 PSR 已 有 的 值 并 在 返 回 控 制 时 恢 复 这 些 值<br />

在 目 标 上 运 行 的 实 际 或 仿 真 处 理 器 处 理 器 始 终 至 少 有 一 个 执 行 语 句<br />

<br />

(MMU)<br />

<br />

请 参 阅 程 序 状 态 寄 存 器<br />

控 制 高 速 缓 存 和 存 储 块 访 问 许 可 以 及 将 虚 拟 地 址 转 换 成 物 理 地 址 的 硬 件<br />

字 的 最 低 有 效 字 节 比 最 高 有 效 字 节 位 于 更 高 的 存 储 器 地 址<br />

请 参 阅 小 端<br />

映 像 中 的 位 置 如 果 执 行 到 此 位 置 则 调 试 器 将 暂 停 映 像 的 执 行<br />

请 参 阅 观 察 点<br />

词 汇 表 -2 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


词 汇 表<br />

在 日 志 文 件 中 记 录 诊 断 信 息 以 显 示 映 像 部 件 的 执 行 频 率 和 顺 序 所 记 录 的 文<br />

本 字 符 串 是 您 在 定 义 断 点 或 观 察 点 时 指 定 的 那 些 字 符 串<br />

请 参 阅 断 点 和 观 察 点<br />

监 控 映 像 的 位 置 如 果 此 处 存 储 的 值 发 生 改 变 调 试 器 会 暂 停 执 行 映 像<br />

请 参 阅 断 点<br />

<br />

C++ 方 法 或 自 由 函 数<br />

运 行 目 标 应 用 程 序 的 目 标 处 理 器 真 实 或 模 拟 的<br />

任 何 调 试 会 话 中 的 基 本 对 象 调 试 系 统 的 基 础 将 运 行 目 标 软 件 的 环 境 它 实<br />

质 上 是 真 实 或 模 拟 处 理 器 的 集 合<br />

执 行 被 调 试 的 程 序 期 间 累 加 的 统 计 资 料 用 于 测 量 性 能 或 确 定 关 键 代 码 区 域<br />

Call-graph profiling 提 供 了 极 为 详 细 的 信 息 但 会 大 大 降 低 执 行 速 度<br />

Flat profiling 提 供 较 为 简 单 的 统 计 资 料 对 执 行 速 度 影 响 不 大<br />

对 于 这 两 种 类 型 的 配 置 报 告<br />

间 隔<br />

您 均 可 以 指 定 统 计 资 料 两 次 收 集 操 作 之 间 的 时 间<br />

(SWI) 导 致 处 理 器 调 用 程 序 员 特 定 子 程 序 的 指 令 <strong>ARM</strong> 使 用 此 指 令 处 理 semihosting<br />

信 息 的 64 位 单 元 除 非 另 有 说 明 否 则 其 内 容 将 被 当 作 无 符 号 整 数<br />

监 控 和 控 制 另 一 个 应 用 程 序 运 行 的 应 用 程 序 通 常 用 于 查 找 应 用 程 序 流 中 的 错 误<br />

(AMBA)<br />

用 于 高 性 能 32 位 和 16 位 嵌 入 式 微 控 制 器 的 片 上 通 信 标 准<br />

<br />

字 的 最 低 有 效 字 节 比 最 高 有 效 字 节 位 于 更 低 地 址 的 存 储 器<br />

请 参 阅 大 端<br />

用 于 某 些 操 作 的 附 加 处 理 器 通 常 用 于 浮 点 数 学 计 算 信 号 处 理 或 存 储 器 管 理<br />

一 种 可 执 行 代 码 文 件 可 以 载 入 目 标 上 的 存 储 器 并 由 目 标 上 的 处 理 器 执 行<br />

作 为 映 像 建 立 过 程 一 部 分 处 理 的 文 件 源 文 件 与 映 像 相 关 联<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 词 汇 表 -3


词 汇 表<br />

(RDI) 远 程 调 试 接 口 (RDI) 是 调 试 器 与 调 试 代 理 之 间 的 一 种 <strong>ARM</strong> 标 准 程 序 接 口 RDI<br />

为 调 试 器 提 供 了 一 种 与 以 下 设 备 进 行 通 信 的 统 一 方 式<br />

• 在 主 机 上 运 行 的 调 试 代 理 例 如 <strong><strong>ARM</strong>ulator</strong><br />

• 在 基 于 <strong>ARM</strong> 的 硬 件 上 运 行 的 调 试 监 控 器 例 如 Angel 通 过 通 信 链 接<br />

与 该 监 控 器 进 行 通 信<br />

• 通 过 硬 件 调 试 支 持 对 <strong>ARM</strong> 处 理 器 进 行 控 制 的 调 试 代 理 例 如 Multi-ICE<br />

<br />

向 其 它 计 算 机 提 供 数 据 和 其 它 服 务 的 计 算 机<br />

32 位 长 度 单 元 的 数 据 除 非 另 有 说 明 否 则 其 内 容 将 被 当 作 无 符 号 整 数<br />

词 汇 表 -4 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


本 索 引 按 拼 音 排 序 开 始 是 字 母 和 符 号 给 出 的 参 考 是 指 页 码<br />

字 母<br />

AddCounterDesc 4-42<br />

AddCounterValue 4-43, 4-44<br />

armflat.c <strong><strong>ARM</strong>ulator</strong> 模 型 2-27<br />

armmap.c <strong><strong>ARM</strong>ulator</strong> 模 型 2-28<br />

<strong><strong>ARM</strong>ulator</strong><br />

armul.cnf 4-64<br />

PU 初 始 化 2-20<br />

ToolConf 4-2, 4-64, 4-69<br />

标 签 4-2, 4-65<br />

参 考 外 围 设 备 4-74<br />

初 始 化 PU 2-20<br />

概 述 2-2<br />

跟 踪 4-35<br />

跟 踪 文 件 解 释 2-6<br />

函 数 请 参 阅 函 数 <strong><strong>ARM</strong>ulator</strong><br />

和 远 程 调 试 接 口 4-15<br />

回 调 4-33<br />

基 准 1-2<br />

计 时 器 4-76<br />

计 数 器 4-35<br />

记 录 4-35<br />

可 配 置 存 储 器 模 型 2-28<br />

模 型 请 参 阅 模 型 <strong><strong>ARM</strong>ulator</strong><br />

内 存 访 问 4-38<br />

内 存 统 计 数 据 4-63<br />

配 置 报 告 4-35<br />

配 置 跟 踪 器 2-10, 2-13<br />

上 行 调 用 请 参 阅 上 行 调 用<br />

<strong><strong>ARM</strong>ulator</strong><br />

事 件 4-29<br />

事 件 调 度 4-40<br />

数 据 中 止 4-38<br />

异 常 4-26, 4-34<br />

映 射 文 件 4-60<br />

预 定 义 标 签 4-65<br />

远 程 调 试 接 口 4-35, 4-54, 4-56<br />

中 断 控 制 器 4-74<br />

状 态 4-3<br />

准 确 度 1-2<br />

armul.cnf 4-64<br />

<strong>ARM</strong>740T 模 型 <strong><strong>ARM</strong>ulator</strong> 2-25<br />

<strong>ARM</strong>940T 模 型 <strong><strong>ARM</strong>ulator</strong> 2-26<br />

cdp <strong><strong>ARM</strong>ulator</strong> 函 数 4-23<br />

ConsolePrint 4-54, 4-55<br />

CoreCycles <strong><strong>ARM</strong>ulator</strong> 函 数 4-48<br />

CPRead <strong><strong>ARM</strong>ulator</strong> 函 数 4-10<br />

CPUCycles <strong><strong>ARM</strong>ulator</strong> 函 数 4-48<br />

CPWrite <strong><strong>ARM</strong>ulator</strong> 函 数 4-11<br />

Debugger 变 量<br />

$memory_statistics 4-63<br />

$memstats 2-28<br />

$statistics 2-28<br />

DebugPause 4-56<br />

DebugPrint 4-56<br />

default.ami 2-4, 3-10<br />

EndCondition <strong><strong>ARM</strong>ulator</strong> 函 数 4-49<br />

EventUpcall <strong><strong>ARM</strong>ulator</strong> 4-37<br />

ExceptionUpcall <strong><strong>ARM</strong>ulator</strong> 4-34<br />

GetCoreClockFreq <strong><strong>ARM</strong>ulator</strong> 函 数<br />

4-49<br />

GetCPSR <strong><strong>ARM</strong>ulator</strong> 函 数 4-7<br />

GetMode <strong><strong>ARM</strong>ulator</strong> 函 数 4-9<br />

GetPC <strong><strong>ARM</strong>ulator</strong> 函 数 4-6<br />

GetReg <strong><strong>ARM</strong>ulator</strong> 函 数 4-5<br />

GetR15 <strong><strong>ARM</strong>ulator</strong> 函 数 4-6<br />

GetSPSR <strong><strong>ARM</strong>ulator</strong> 函 数 4-8<br />

ldc <strong><strong>ARM</strong>ulator</strong> 函 数 4-17<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 索 引 -1


索 引<br />

InstallHourglass <strong><strong>ARM</strong>ulator</strong> 函 数<br />

4-50<br />

mcr <strong><strong>ARM</strong>ulator</strong> 函 数 4-20, 4-21,<br />

4-22<br />

$memory_statistics 4-63<br />

mrc <strong><strong>ARM</strong>ulator</strong> 函 数 4-19<br />

pagetab.c <strong><strong>ARM</strong>ulator</strong> 模 型 3-4<br />

peripherals.ami 2-4, 3-4, 3-10<br />

PrettyPrint 4-56, 4-57<br />

profiler.c 4-35<br />

profiler.c <strong><strong>ARM</strong>ulator</strong> 模 型 2-12, 3-4<br />

PU 初 始 化 , <strong><strong>ARM</strong>ulator</strong> 2-20<br />

RaiseError 4-53<br />

RaiseEvent 4-32<br />

ReadByte <strong><strong>ARM</strong>ulator</strong> 函 数 4-38<br />

ReadHalfWord 4-38<br />

ReadWord <strong><strong>ARM</strong>ulator</strong> 函 数 4-38<br />

RemoveHourglass <strong><strong>ARM</strong>ulator</strong> 函 数<br />

4-52<br />

ScheduleEvent 4-40<br />

SetCPSR <strong><strong>ARM</strong>ulator</strong> 函 数 4-7<br />

SetNfiq <strong><strong>ARM</strong>ulator</strong> 函 数 4-26, 4-27<br />

SetNirq <strong><strong>ARM</strong>ulator</strong> 函 数 4-26, 4-27<br />

SetPC <strong><strong>ARM</strong>ulator</strong> 函 数 4-6<br />

SetReg <strong><strong>ARM</strong>ulator</strong> 函 数 4-5<br />

SetR15 <strong><strong>ARM</strong>ulator</strong> 函 数 4-6<br />

SetSPSR <strong><strong>ARM</strong>ulator</strong> 函 数 4-8<br />

stackuse.c <strong><strong>ARM</strong>ulator</strong> 模 型 3-4<br />

$statistics 变 量 4-35<br />

stc <strong><strong>ARM</strong>ulator</strong> 函 数 4-18<br />

StopExecution <strong><strong>ARM</strong>ulator</strong> 函 数<br />

4-52<br />

ThumBit <strong><strong>ARM</strong>ulator</strong> 函 数 4-9<br />

ToolConf 4-2, 4-64, 4-69<br />

ToolConf_Cmp 4-73<br />

ToolConf_Lookup 4-72<br />

tracer.c 4-35<br />

UnkRDIInfoUpcall <strong><strong>ARM</strong>ulator</strong> 4-35<br />

WriteByte <strong><strong>ARM</strong>ulator</strong> 函 数 4-39<br />

WriteHalfWord 4-39<br />

WriteWord <strong><strong>ARM</strong>ulator</strong> 函 数 4-39<br />

符 号<br />

$memory_statistics 4-63<br />

$statistics 变 量 4-35<br />

B<br />

保 护 单 元 2-25, 2-26<br />

变 量<br />

$memory_statistics 4-63<br />

$memstats 2-28<br />

$statistics 2-28, 4-35<br />

C<br />

参 考 外 围 设 备 4-74<br />

词 汇 表 词 汇 表 -1<br />

D<br />

等 待 状 态 计 算 2-29<br />

读 <strong><strong>ARM</strong>ulator</strong> 函 数 4-24<br />

F<br />

返 回 代 码 <strong><strong>ARM</strong>ulator</strong> 函 数<br />

<strong>ARM</strong>ul_BUSY 4-17, 4-18, 4-19,<br />

4-20, 4-21, 4-22, 4-23<br />

<strong>ARM</strong>ul_CANT 4-17, 4-18, 4-19,<br />

4-20, 4-21, 4-22, 4-23, 4-24, 4-25<br />

<strong>ARM</strong>ul_DONE 4-17, 4-18, 4-19,<br />

4-20, 4-21, 4-22, 4-23, 4-24, 4-25<br />

G<br />

跟 踪 <strong><strong>ARM</strong>ulator</strong> 4-35<br />

跟 踪 器<br />

配 置 2-10, 2-13<br />

事 件 2-11<br />

输 出 到 RDI 日 志 窗 口 2-10<br />

跟 踪 器 解 释 输 出 2-6<br />

H<br />

函 数 <strong><strong>ARM</strong>ulator</strong><br />

<strong>ARM</strong>ulif_CoreCycles 4-48<br />

<strong>ARM</strong>ulif_CPUCycles 4-48<br />

<strong>ARM</strong>ulif_EndCondition 4-49<br />

<strong>ARM</strong>ulif_GetCoreClockFreq 4-49<br />

<strong>ARM</strong>ulif_InstallHourglass 4-50<br />

<strong>ARM</strong>ulif_RemoveHourglass 4-52<br />

<strong>ARM</strong>ulif_StopExecution 4-52<br />

<strong>ARM</strong>ulif_Time 4-53<br />

<strong>ARM</strong>ul_AddCounterDesc 4-42<br />

<strong>ARM</strong>ul_AddCounterValue 4-43,<br />

4-44<br />

<strong>ARM</strong>ul_ConsolePrint 4-54, 4-55<br />

<strong>ARM</strong>ul_CPRead 4-10<br />

<strong>ARM</strong>ul_CPWrite 4-11<br />

<strong>ARM</strong>ul_DebugPause 4-56<br />

<strong>ARM</strong>ul_DebugPrint 4-56<br />

<strong>ARM</strong>ul_GetCPSR 4-7<br />

<strong>ARM</strong>ul_GetMode 4-9<br />

<strong>ARM</strong>ul_GetPC 4-6<br />

<strong>ARM</strong>ul_GetReg 4-5<br />

<strong>ARM</strong>ul_GetR15 4-6<br />

<strong>ARM</strong>ul_GetSPSR 4-8<br />

<strong>ARM</strong>ul_PrettyPrint 4-56, 4-57<br />

<strong>ARM</strong>ul_RaiseError 4-53<br />

<strong>ARM</strong>ul_RaiseEvent 4-32<br />

<strong>ARM</strong>ul_ReadByte 4-38<br />

<strong>ARM</strong>ul_ReadHalfWord 4-38<br />

<strong>ARM</strong>ul_ReadWord 4-38<br />

<strong>ARM</strong>ul_ScheduleEvent 4-40<br />

<strong>ARM</strong>ul_SetCPSR 4-7<br />

<strong>ARM</strong>ul_SetNfiq 4-26, 4-27<br />

<strong>ARM</strong>ul_SetNirq 4-26, 4-27<br />

<strong>ARM</strong>ul_SetPC 4-6<br />

<strong>ARM</strong>ul_SetReg 4-5<br />

<strong>ARM</strong>ul_SetR15 4-6<br />

<strong>ARM</strong>ul_SetSPSR 4-8<br />

<strong>ARM</strong>ul_ThumBit 4-9<br />

<strong>ARM</strong>ul_WriteByte 4-39<br />

<strong>ARM</strong>ul_WriteHalfWord 4-39<br />

<strong>ARM</strong>ul_WriteWord 4-39<br />

cdp 4-23<br />

ldc 4-17<br />

mcr 4-20, 4-21, 4-22<br />

mrc 4-19<br />

stc 4-18<br />

ToolConf_Cmp 4-73<br />

ToolConf_Lookup 4-72<br />

读 4-24<br />

写 4-25<br />

回 调 <strong><strong>ARM</strong>ulator</strong> 4-33<br />

索 引 -2 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00


索 引<br />

J<br />

计 时 器 4-76<br />

计 数 器 <strong><strong>ARM</strong>ulator</strong> 4-35<br />

记 录 <strong><strong>ARM</strong>ulator</strong> 4-35<br />

L<br />

零 等 待 状 态 存 储 器 模 型 2-27<br />

M<br />

模 型 <strong><strong>ARM</strong>ulator</strong><br />

pagetab.c 3-4<br />

profiler.c 2-12, 3-4<br />

stackuse.c 3-4<br />

tracer.c 2-5<br />

内 存 4-38<br />

协 处 理 器 4-15<br />

总 线 循 环 插 入 4-38<br />

Y<br />

异 常 <strong><strong>ARM</strong>ulator</strong> 4-26, 4-34<br />

映 射 文 件 <strong><strong>ARM</strong>ulator</strong> 4-60<br />

远 程 调 试 接 口<br />

<strong><strong>ARM</strong>ulator</strong> 4-35, 4-54, 4-56<br />

和 <strong><strong>ARM</strong>ulator</strong> 4-15<br />

Z<br />

中 断 控 制 器 4-74<br />

字 节 顺 序<br />

大 端 信 号 4-33<br />

N<br />

内 存 统 计 数 据 <strong><strong>ARM</strong>ulator</strong> 4-63<br />

S<br />

上 行 调 用 <strong><strong>ARM</strong>ulator</strong> 4-33<br />

armul_EventUpcall 4-37<br />

ExceptionUpcall 4-34<br />

UnkRDIInfoUpcall 4-35<br />

时 间 <strong><strong>ARM</strong>ulator</strong> 函 数 4-53<br />

事 件 <strong><strong>ARM</strong>ulator</strong> 4-29<br />

事 件 调 度 <strong><strong>ARM</strong>ulator</strong> 4-40<br />

术 语 词 汇 表 -1<br />

X<br />

协 处 理 器<br />

<strong><strong>ARM</strong>ulator</strong> 模 型 4-15<br />

写 <strong><strong>ARM</strong>ulator</strong> 函 数 4-25<br />

<strong>ARM</strong> DUI 0207ASC-00 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 索 引 -3


索 引<br />

索 引 -4 Copyright © 2002, 2003 <strong>ARM</strong> Limited 版 权 所 有 <strong>ARM</strong> DUI 0207ASC-00

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

Saved successfully!

Ooh no, something went wrong!