10.07.2015 Views

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

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.

MPLAB <strong>C30</strong> 与 ANSI C 的 差 别一 个 函 数 若 可 能 改 变 一 个 全 局 寄 存 器 变 量 的 值 , 它 就 不 能 安 全 地 被 不 保 存 和 恢 复 该 变量 编 译 的 函 数 调 用 , 因 为 这 可 能 破 坏 调 用 函 数 返 回 时 期 望 找 到 的 值 。 因 此 , 若 一 个 程序 片 段 使 用 了 全 局 寄 存 器 变 量 , 作 为 该 程 序 片 段 入 口 的 函 数 必 须 显 式 地 保 存 和 恢 复 属于 其 调 用 函 数 的 值 。库 函 数 longjmp 将 恢 复 每 个 全 局 寄 存 器 变 量 在 setjmp 时 的 值 。所 有 全 局 寄 存 器 变 量 的 声 明 必 须 在 所 有 函 数 定 义 之 前 。 如 果 这 种 声 明 在 函 数 定 义 之 后 ,寄 存 器 可 能 被 声 明 之 前 的 函 数 用 于 其 他 用 途 。全 局 寄 存 器 变 量 不 能 有 初 值 , 因 为 可 执 行 文 件 不 能 为 一 个 寄 存 器 提 供 初 值 。2.3.4.2 为 局 部 变 量 指 定 寄 存 器可 以 通 过 以 下 语 句 用 一 个 指 定 的 寄 存 器 定 义 局 部 寄 存 器 变 量 :register int *foo asm ("w8");其 中 , w8 是 使 用 的 寄 存 器 名 。 应 该 注 意 这 与 定 义 全 局 寄 存 器 变 量 的 语 法 相 同 , 但 是 对于 局 部 变 量 , 这 种 定 义 应 该 出 现 在 一 个 函 数 中 。定 义 这 种 寄 存 器 不 保 留 寄 存 器 的 值 , 流 控 制 确 定 变 量 的 值 无 效 时 , 其 他 用 途 仍 可 使 用这 种 寄 存 器 。 使 用 这 一 功 能 , 可 能 使 编 译 某 些 函 数 时 可 用 寄 存 器 太 少 。该 选 项 并 不 能 保 证 MPLAB <strong>C30</strong> 生 成 的 代 码 始 终 将 这 一 变 量 存 放 在 指 定 的 寄 存 器 中 。不 可 以 在 asm 语 句 中 , 编 写 对 该 寄 存 器 的 显 式 引 用 , 并 假 定 它 总 是 引 用 这 个 变 量 。局 部 寄 存 器 变 量 不 使 用 时 其 分 配 可 被 删 除 。 对 局 部 寄 存 器 变 量 的 引 用 可 以 被 删 除 、 移动 或 简 化 。2.3.5 复 数MPLAB <strong>C30</strong> 支 持 复 数 数 据 类 型 。 我 们 可 以 用 关 键 字 __complex__ 来 声 明 整 型 复 数 和浮 点 型 复 数 。例 如 , __complex__ float x; 定 义 x 为 实 部 和 虚 部 都 是 浮 点 型 的 变 量 。__complex__ short int y; 定 义 y 的 实 部 和 虚 部 都 是 short int 型 的 。要 写 一 个 复 数 数 据 类 型 的 常 量 , 使 用 后 缀 “i” 或 “j”( 两 者 之 一 , 两 者 是 等 同的 )。 例 如 , 2.5fi 是 __complex__ float 型 的 , 3i 是 __complex__ int 型的 。 这 种 常 量 只 有 虚 部 值 , 但 是 我 们 可 以 通 过 将 其 与 实 常 数 相 加 来 形 成 任 何 复 数 值 。要 提 取 复 数 值 符 号 exp 的 实 部 , 写 __real__ exp。 类 似 地 , 用 __imag__ 来 提 取虚 部 。 例 如 :__complex__ float z;float r;float i;r = __real__ z;i = __imag__ z;当 对 复 数 型 值 使 用 算 子 “~” 时 , 执 行 复 数 的 共 扼 。© 2005 Microchip Technology Inc. DS51284C_CN 第 25 页

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

Saved successfully!

Ooh no, something went wrong!