MPLAB ® <strong>C30</strong> 用 户 指 南表 3-15: 代 码 生 成 约 定 选 项 ( 续 )选 项定 义instrumentation 也 可 用 于 在 其 他 函 数 中 扩 展 内 联 的 函 数 。 profiling调 用 表 明 从 概 念 上 来 讲 在 哪 里 进 入 和 退 出 内 联 函 数 。 这 意 味 着 这 种函 数 必 须 具 有 可 寻 址 形 式 。 如 果 对 一 个 函 数 的 所 有 使 用 都 扩 展 内联 , 这 会 增 加 额 外 增 加 代 码 长 度 。 如 果 要 在 C 代 码 中 使 用 externinline, 必 须 提 供 这 种 函 数 的 可 寻 址 形 式 。可 对 函 数 指 定 属 性 no_instrument_function, 在 这 种 情 况 下不 会 进 行 instrumentation。-fno-ident 忽 略 #ident 伪 指 令 。-fpack-struct 将 所 有 结 构 成 员 无 缝 隙 地 压 缩 在 一 起 。 通 常 不 希 望 使 用 这 个 选 项 ,因 为 它 使 代 码 不 是 最 优 化 的 , 且 结 构 成 员 的 偏 移 量 与 系 统 库 不 相符 。-fpcc-structreturn-fno-short-double-fshort-enums-fverbose-asm-fno-verbose-asm-fvolatile-fvolatile-global-fvolatile-staticdsPIC 器 件 要 求 字 按 偶 数 字 节 边 界 对 齐 , 因 此 当 使 用 packed 属 性时 要 小 心 , 避 免 运 行 时 寻 址 错 误 。像 长 值 一 样 , 将 短 struct 和 union 值 返 回 到 存 储 器 中 , 而 不 是返 回 到 寄 存 器 中 。 这 样 做 效 率 不 高 , 但 其 优 点 是 可 以 使 MPLAB<strong>C30</strong> 编 译 的 文 件 与 其 他 编 译 器 编 译 的 文 件 兼 容 。短 结 构 和 联 合 指 长 度 和 对 齐 都 与 整 型 匹 配 的 结 构 和 联 合 。默 认 情 况 下 , 编 译 器 使 用 与 float 等 价 的 double 型 。 这 个 选 项使 得 double 与 long double 等 价 。 如 果 模 块 通 过 参 数 传 递 直 接或 通 过 共 享 缓 冲 空 间 间 接 共 用 double 数 据 , 跨 模 块 混 合 使 用 这 个选 项 可 能 会 产 生 异 常 结 果 。 无 论 使 用 哪 个 开 关 设 置 , 随 产 品 提 供 的库 都 可 正 常 工 作 。按 照 enum 类 型 声 明 的 可 能 值 范 围 的 需 要 , 为 其 分 配 字 节 。 具 体 来说 , enum 类 型 等 价 于 有 足 够 空 间 的 最 小 整 型 。在 输 出 的 汇 编 代 码 中 加 入 额 外 的 注 释 信 息 以 增 强 可 读 性 。默 认 设 置 为 -fno-verbose-asm, 将 给 出 额 外 的 信 息 , 当 比 较 两个 汇 编 文 件 时 有 用 。将 通 过 指 针 进 行 的 所 有 存 储 器 引 用 视 为 volatile。将 对 外 部 和 全 局 数 据 项 的 所 有 存 储 器 引 用 视 为 volatile。 使 用 这 个开 关 对 于 static 数 据 没 有 影 响 。将 对 static 数 据 的 所 有 存 储 器 引 用 视 为 volatile。DS51284C_CN 第 54 页© 2005 Microchip Technology Inc.
使 用 MPLAB <strong>C30</strong> C 编 译 器3.6 环 境 变 量本 节 中 提 到 的 变 量 是 可 选 的 , 但 是 如 果 定 义 了 这 些 变 量 , 将 由 编 译 器 使 用 。 如 果 没 有设 置 下 面 某 些 环 境 变 量 的 值 , 编 译 器 驱 动 程 序 或 其 他 子 程 序 , 可 能 选 择 为 这 些 变 量 确定 适 当 的 值 。 驱 动 程 序 或 其 他 子 程 序 , 利 用 有 关 MPLAB <strong>C30</strong> 安 装 的 内 部 知 识 。 只 要安 装 结 构 是 完 整 的 , 所 有 子 目 录 和 可 执 行 文 件 在 相 同 的 相 对 路 径 中 , 驱 动 程 序 或 子 程序 就 能 确 定 可 使 用 的 值 。表 3-16:选 项PI<strong>C30</strong>_C_INCLUDE_PATHPI<strong>C30</strong>_COMPILER_PATHPI<strong>C30</strong>_EXEC_PREFIXPI<strong>C30</strong>_LIBRARY_PATHPI<strong>C30</strong>_OMFTMPDIR与 编 译 器 有 关 的 环 境 变 量定 义此 变 量 的 值 是 一 个 分 号 分 隔 开 的 目 录 列 表 , 很 像 PATH。 当 MPLAB<strong>C30</strong> 搜 索 头 文 件 时 , 它 在 搜 索 标 准 头 文 件 目 录 之 前 , 搜 索 -I 指 定 的 目录 之 后 , 搜 索 此 变 量 中 列 出 的 目 录 。如 果 未 定 义 该 环 境 变 量 , 预 处 理 器 根 据 标 准 安 装 选 择 适 当 的 值 。 默 认情 况 下 , 在 下 面 的 目 录 中 搜 索 头 文 件 :\include 和\support\h。PI<strong>C30</strong>_COMPILER_PATH 的 值 是 一 个 分 号 分 隔 的 目 录 列 表 , 很 像PATH。 搜 索 子 程 序 时 , 如 果 MPLAB <strong>C30</strong> 使 用 PI<strong>C30</strong>_EXEC_PREFIX找 不 到 子 程 序 , 它 在 这 个 变 量 指 定 的 目 录 中 搜 索 。如 果 设 置 了 PI<strong>C30</strong>_EXEC_PREFIX, 它 指 定 要 在 编 译 器 执 行 的 子 程 序的 名 字 中 使 用 的 前 缀 。 当 这 个 前 缀 和 子 程 序 名 一 起 使 用 时 , 不 添 加 目录 分 隔 符 , 但 如 果 需 要 的 话 , 可 以 指 定 一 个 以 斜 杠 符 结 束 的 前 缀 。 如果 MPLAB <strong>C30</strong> 使 用 指 定 的 前 缀 找 不 到 子 程 序 , 它 将 在 PATH 环 境 变 量中 查 找 。如 果 PI<strong>C30</strong>_EXEC_PREFIX 环 境 变 量 未 设 置 或 设 置 为 空 值 , 则 编 译 器驱 动 程 序 根 据 标 准 安 装 选 择 适 当 的 值 。 如 果 安 装 没 有 被 修 改 , 那 么 驱动 程 序 将 能 找 到 所 需 要 的 子 程 序 。使 用 -B 命 令 行 选 项 指 定 的 其 他 前 缀 优 先 于 PI<strong>C30</strong>_EXEC_PREFIX 的用 户 定 义 值 或 驱 动 程 序 定 义 值 。通 常 情 况 下 , 最 好 将 此 值 保 持 为 未 定 义 , 让 驱 动 程 序 查 找 子 程 序 。这 个 变 量 的 值 是 分 号 分 隔 的 目 录 列 表 , 很 像 PATH。 这 个 变 量 指 定 要 传递 给 链 接 器 的 目 录 列 表 。 驱 动 程 序 对 这 个 变 量 的 默 认 求 值 为 :\lib; \support\gld.指 定 MPLAB 30 要 使 用 的 目 标 模 块 格 式 (Object Module Format,OMF)。 默 认 情 况 下 , 工 具 生 成 COFF 目 标 文 件 。 如 果 环 境 变 量PI<strong>C30</strong>_OMF 的 值 为 elf, 工 具 将 生 成 ELF 目 标 文 件 。如 果 设 置 了 TMPDIR, 它 指 定 临 时 文 件 使 用 的 目 录 。 MPLAB <strong>C30</strong> 使 用临 时 文 件 来 保 存 编 译 的 一 个 阶 段 的 输 出 , 这 个 输 出 将 用 作 编 译 的 下 一个 阶 段 的 输 入 : 例 如 , 预 处 理 器 的 输 出 是 编 译 器 的 输 入 。© 2005 Microchip Technology Inc. DS51284C_CN 第 55 页