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.

MPLAB <strong>C30</strong> 与 ANSI C 的 差 别psv将 变 量 分 配 到 程 序 空 间 中 为 程 序 空 间 可 视 性 (PSV) 窗 口 访 问 指 定 的 段 。 链 接器 将 定 位 段 , 因 此 可 以 通 过 PSVPAG 寄 存 器 的 设 置 来 访 问 整 个 变 量 。 PSV 空 间中 的 变 量 不 是 由 编 译 器 管 理 的 , 不 能 使 用 普 通 C 语 句 访 问 。 这 些 变 量 必 须 由 编程 人 员 显 式 访 问 , 通 常 使 用 表 访 问 行 内 汇 编 指 令 , 或 使 用 程 序 空 间 可 视 性 窗 口 访问 。eedata将 变 量 分 配 到 EEData 空 间 。 EEData 空 间 中 的 变 量 不 能 使 用 普 通 C 语 句 访 问 。这 些 变 量 必 须 由 编 程 人 员 显 式 访 问 , 通 常 使 用 表 访 问 行 内 汇 编 指 令 , 或 使 用 程 序空 间 可 视 性 窗 口 访 问 。transparent_union这 是 属 于 union 型 函 数 参 数 的 属 性 , 即 相 应 的 参 数 可 以 是 任 何 联 合 成 员 的 类 型 , 但 以第 一 个 联 合 成 员 的 类 型 传 递 参 数 。 使 用 transparent 联 合 的 第 一 个 成 员 的 调 用 约 定 将 参数 传 递 给 函 数 , 而 不 是 使 用 联 合 本 身 的 调 用 约 定 。 联 合 的 所 有 成 员 必 须 具 有 相 同 的 机器 码 表 示 , 这 对 于 保 证 参 数 传 递 正 常 进 行 是 必 需 的 。unorderedunordered 属 性 表 明 变 量 存 放 的 地 址 可 以 相 对 于 所 在 C 源 文 件 中 其 他 变 量 的 位 置 而 改变 。 这 不 符 合 ANSI C, 但 可 使 链 接 器 更 好 地 利 用 存 储 空 隙 。const int __attribute__ ((unordered)) i;unused这 一 变 量 属 性 表 明 变 量 可 能 不 被 使 用 。 MPLAB <strong>C30</strong> 不 会 为 这 种 变 量 产 生 未 使 用 变 量警 告 。weakweak 属 性 声 明 weak 符 号 。weak 符 号 可 能 被 全 局 定 义 取 代 。 当 对 外 部 符 号 的 引 用 使 用weak 时 , 则 链 接 时 不 需 要 该 符 号 。 例 如 :extern int __attribute__((__weak__)) s;int foo() {if (&s) return s;return 0; /* possibly some other value */}在 上 面 的 程 序 中 , 如 果 s 没 有 被 其 他 模 块 定 义 , 程 序 仍 会 链 接 , 但 不 会 给 s 分 配 地址 。 若 条 件 验 证 s 已 被 定 义 , 就 返 回 它 的 值 ( 如 果 它 有 值 的 话 )。 否 则 将 返 回 “0”值 。 这 个 特 征 很 有 用 , 主 要 用 于 提 供 与 任 意 库 链 接 的 通 用 代 码 。© 2005 Microchip Technology Inc. DS51284C_CN 第 17 页

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

Saved successfully!

Ooh no, something went wrong!