10.07.2015 Views

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

第 8 章 汇 编 语 言 和 C 模 块 混 合 编 程MPLAB ® <strong>C30</strong>用 户 指 南8.1 简 介本 章 讲 述 如 何 混 合 使 用 汇 编 语 言 和 C 模 块 。 给 出 了 在 汇 编 代 码 中 使 用 C 变 量 和 函 数 的例 子 , 以 及 在 C 中 使 用 汇 编 变 量 和 函 数 的 例 子 。8.2 主 要 内 容本 章 主 要 讨 论 的 内 容 有 :• 在 汇 编 语 言 中 使 用 C 变 量 和 C 函 数 — 可 对 独 立 的 汇 编 模 块 进 行 汇 编 , 然 后 与 编 译 后的 C 模 块 相 链 接 。• 使 用 行 内 汇 编 — 汇 编 指 令 可 直 接 嵌 入 到 C 代 码 中 。 行 内 汇 编 既 支 持 简 单 的 ( 不 带参 数 的 ) 汇 编 语 句 , 也 支 持 扩 展 的 ( 带 参 数 的 ) 汇 编 语 句 , 其 中 C 变 量 可 作 为 汇编 指 令 的 操 作 数 访 问 。8.3 在 汇 编 语 言 中 使 用 C 变 量 和 C 函 数下 面 的 指 导 原 则 指 明 了 独 立 的 汇 编 模 块 如 何 与 C 模 块 接 口 。• 遵 循 第 4.13 节 “ 寄 存 器 约 定 ” 所 述 的 寄 存 器 约 定 。 尤 其 是 , 寄 存 器 W0-W7 用 于 参数 传 递 。 汇 编 函 数 将 接 收 参 数 , 并 通 过 这 些 寄 存 器 将 参 数 传 递 到 被 调 用 函 数 。• 不 在 中 断 处 理 期 间 调 用 的 函 数 必 须 保 护 寄 存 器 W8-W15。 即 这 些 寄 存 器 的 值 必 须 在被 修 改 前 保 存 并 在 返 回 到 调 用 函 数 前 恢 复 。 使 用 寄 存 器 W0-W7 时 可 不 恢 复 其 值 。• 中 断 函 数 必 须 保 护 所 有 的 寄 存 器 。 不 同 于 一 般 的 函 数 调 用 , 中 断 可 能 发 生 在 程 序 执行 过 程 中 的 任 意 时 刻 。 当 返 回 到 正 常 的 程 序 执 行 时 , 所 有 寄 存 器 的 值 必 须 与 中 断 发生 前 相 同 。• 汇 编 文 件 中 声 明 的 变 量 或 函 数 , 如 果 要 被 任 何 C 源 文 件 引 用 , 应 该 使 用 汇 编 伪 指 令.global 声 明 为 全 局 的 。 外 部 符 号 前 应 至 少 有 一 个 下 划 线 。C 函 数 main 在 汇 编 中命 名 为 _main, 相 反 , 汇 编 符 号 _do_something 在 C 中 引 用 时 为do_something。 在 汇 编 文 件 中 使 用 的 未 声 明 符 号 将 视 为 外 部 定 义 的 。下 面 的 示 例 说 明 了 如 何 在 汇 编 语 言 和 C 中 使 用 变 量 和 函 数 , 而 与 变 量 和 函 数 原 来 是 在哪 里 定 义 的 无 关 。文 件 ex1.c 定 义 了 将 在 汇 编 文 件 中 使 用 的 foo 和 cVariable。 C 文 件 还 说 明 了 如 何调 用 汇 编 函 数 asmFunction, 以 及 如 何 访 问 汇 编 定 义 的 变 量 asmVariable。© 2005 Microchip Technology Inc. DS51284C_CN 第 95 页

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

Saved successfully!

Ooh no, something went wrong!