MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南 MPLAB® C30 C 编译器用户指南

ie.ksu.edu.tw
from ie.ksu.edu.tw More from this publisher
10.07.2015 Views

MPLAB ® C30 用 户 指 南2. 如 果 使 用 了 -mlarge-data 或 -mlarge-scalar 命 令 行 选 项 , 那 么 可 通 过 指 定near 属 性 将 变 量 排 除 在 far 数 据 空 间 外 ( 即 存 放 在 near 数 据 空 间 )。3. 命 令 行 选 项 的 作 用 域 仅 限 于 模 块 内 部 , 也 可 以 不 使 用 命 令 行 选 项 , 而 通 过 指 定far 属 性 将 变 量 存 放 在 far 数 据 段 中 。如 果 应 用 的 near 变 量 在 8K 的 near 数 据 空 间 中 存 放 不 下 , 链 接 器 将 产 生 错 误 消 息 。4.7.2 Near 代 码 和 Far 代 码具 有 near 属 性 的 函 数 ( 函 数 在 彼 此 的 32K 字 范 围 内 ) 互 相 调 用 时 比 非 near 属 性 的 函数 效 率 高 。 如 果 已 知 应 用 程 序 中 的 所 有 函 数 都 是 near 的 , 那 么 在 编 译 每 个 模 块 时 就 可以 使 用 默 认 的 -msmall-code 命 令 行 选 项 来 指 示 编 译 器 采 用 更 高 效 的 函 数 调 用 形 式 。如 果 这 个 默 认 的 选 项 不 适 合 , 可 以 使 用 下 面 的 可 选 方 案 :1. 可 以 使 用 -msmall-code 命 令 行 选 项 来 编 译 应 用 程 序 的 某 些 模 块 。 在 这 种 情 况下 , 只 有 这 些 模 块 中 的 函 数 调 用 可 以 采 用 更 高 效 的 函 数 调 用 形 式 。2. 如 果 已 使 用 -msmall-code 命 令 行 选 项 , 那 么 编 译 器 可 能 被 指 示 对 具 有 far 属 性的 函 数 使 用 长 函 数 调 用 形 式 。3. 命 令 行 选 项 的 作 用 域 限 于 模 块 内 部 , 可 以 不 使 用 命 令 行 选 项 , 而 通 过 在 函 数 的 定义 和 声 明 中 指 定 near 属 性 , 指 示 编 译 器 使 用 更 高 效 的 函 数 调 用 形 式 调 用 这 些 函数 。-msmall-code 命 令 行 选 项 与 -msmall-data 命 令 行 选 项 的 区 别 在 于 , 采 用 前 者时 , 为 确 保 函 数 彼 此 “ 靠 近 ” 分 配 , 编 译 器 不 需 进 行 特 别 的 操 作 ; 而 采 用 后 者 时 , 编译 器 要 将 变 量 分 配 到 特 殊 的 段 中 。如 果 函 数 声 明 为 near, 而 其 调 用 函 数 无 法 采 用 函 数 调 用 的 更 高 效 形 式 调 用 它 时 , 链 接器 将 产 生 错 误 信 息 。DS51284C_CN 第 66 页© 2005 Microchip Technology Inc.

MPLAB C30 C 编 译 器 运 行 时 环 境4.8 定 位 代 码 和 数 据正 如 第 4.4 节 “ 代 码 段 和 数 据 段 ” 中 所 述 , 编 译 器 将 代 码 存 放 在 .text 段 中 , 而 根 据所 使 用 的 存 储 模 型 和 数 据 是 否 已 初 始 化 将 数 据 存 放 在 指 定 的 段 中 。 链 接 模 块 时 , 链 接器 根 据 各 个 段 的 属 性 来 确 定 段 的 起 始 地 址 。某 些 情 况 下 必 须 将 特 定 函 数 或 变 量 存 放 在 某 个 特 定 地 址 或 某 个 地 址 范 围 。 为 实 现 这 一点 , 最 简 单 的 方 法 是 使 用 address 属 性 , 如 第 2.3 节 “ 关 键 字 差 别 ” 所 述 。 例 如 ,将 函 数 存 放 到 程 序 存 储 器 的 地 址 0x8000 中 :int __attribute__ ((address(0x8000))) PrintString (const char *s);同 样 , 将 变 量 Mabonga 存 放 到 数 据 存 储 器 的 地 址 0x1000 中 :int __attribute__ ((address(0x1000))) Mabonga = 1;定 位 代 码 和 数 据 的 另 一 种 方 法 是 将 函 数 或 变 量 存 放 到 用 户 定 义 的 段 中 , 并 在 自 定 义 的链 接 描 述 文 件 中 指 定 该 段 的 起 始 地 址 。 具 体 如 下 :1. 在 C 源 程 序 中 修 改 代 码 或 数 据 的 声 明 来 指 定 用 户 定 义 的 段 。2. 将 这 个 用 户 定 义 段 加 入 到 一 个 自 定 义 的 链 接 描 述 文 件 中 来 指 定 段 的 起 始 地 址 。例 如 , 要 将 函 数 PrintString 存 放 到 程 序 存 储 器 的 0x8000 地 址 中 , 首 先 要 在 C 源程 序 中 对 函 数 进 行 如 下 声 明 :int __attribute__((__section__(".myTextSection")))PrintString(const char *s);段 属 性 指 定 将 函 数 存 放 到 名 为 .myTextSection 的 段 中 , 而 不 是 默 认 的 .text 段中 。 它 没 有 指 定 用 户 定 义 的 段 存 存 放 在 哪 里 。 这 必 须 在 一 个 自 定 义 的 链 接 描 述 文 件 中指 定 , 如 下 所 示 。 以 针 对 器 件 的 链 接 描 述 文 件 为 基 础 , 加 入 如 下 段 定 义 :.myTextSection 0x8000 :{*(.myTextSection);} >program这 指 定 了 输 出 文 件 应 包 括 一 个 名 为 .myTextSection 的 段 , 这 个 段 位 于 地 址0x8000, 包 含 所 有 名 为 .myTextSection 的 输 入 段 。 由 于 在 本 例 中 , 在 该 段 中 只 有一 个 函 数 PrintString, 那 么 这 个 函 数 将 位 于 程 序 存 储 器 的 地 址 0x8000 处 。类 似 地 , 要 将 变 量 Mabonga 存 放 到 数 据 存 储 器 的 地 址 0x1000 中 , 首 先 要 在 C 源 程 序中 声 明 该 变 量 如 下 :int __attribute__((__section__(".myDataSection"))) Mabonga = 1;© 2005 Microchip Technology Inc. DS51284C_CN 第 67 页

MPLAB ® <strong>C30</strong> 用 户 指 南2. 如 果 使 用 了 -mlarge-data 或 -mlarge-scalar 命 令 行 选 项 , 那 么 可 通 过 指 定near 属 性 将 变 量 排 除 在 far 数 据 空 间 外 ( 即 存 放 在 near 数 据 空 间 )。3. 命 令 行 选 项 的 作 用 域 仅 限 于 模 块 内 部 , 也 可 以 不 使 用 命 令 行 选 项 , 而 通 过 指 定far 属 性 将 变 量 存 放 在 far 数 据 段 中 。如 果 应 用 的 near 变 量 在 8K 的 near 数 据 空 间 中 存 放 不 下 , 链 接 器 将 产 生 错 误 消 息 。4.7.2 Near 代 码 和 Far 代 码具 有 near 属 性 的 函 数 ( 函 数 在 彼 此 的 32K 字 范 围 内 ) 互 相 调 用 时 比 非 near 属 性 的 函数 效 率 高 。 如 果 已 知 应 用 程 序 中 的 所 有 函 数 都 是 near 的 , 那 么 在 编 译 每 个 模 块 时 就 可以 使 用 默 认 的 -msmall-code 命 令 行 选 项 来 指 示 编 译 器 采 用 更 高 效 的 函 数 调 用 形 式 。如 果 这 个 默 认 的 选 项 不 适 合 , 可 以 使 用 下 面 的 可 选 方 案 :1. 可 以 使 用 -msmall-code 命 令 行 选 项 来 编 译 应 用 程 序 的 某 些 模 块 。 在 这 种 情 况下 , 只 有 这 些 模 块 中 的 函 数 调 用 可 以 采 用 更 高 效 的 函 数 调 用 形 式 。2. 如 果 已 使 用 -msmall-code 命 令 行 选 项 , 那 么 编 译 器 可 能 被 指 示 对 具 有 far 属 性的 函 数 使 用 长 函 数 调 用 形 式 。3. 命 令 行 选 项 的 作 用 域 限 于 模 块 内 部 , 可 以 不 使 用 命 令 行 选 项 , 而 通 过 在 函 数 的 定义 和 声 明 中 指 定 near 属 性 , 指 示 编 译 器 使 用 更 高 效 的 函 数 调 用 形 式 调 用 这 些 函数 。-msmall-code 命 令 行 选 项 与 -msmall-data 命 令 行 选 项 的 区 别 在 于 , 采 用 前 者时 , 为 确 保 函 数 彼 此 “ 靠 近 ” 分 配 , 编 译 器 不 需 进 行 特 别 的 操 作 ; 而 采 用 后 者 时 , 编译 器 要 将 变 量 分 配 到 特 殊 的 段 中 。如 果 函 数 声 明 为 near, 而 其 调 用 函 数 无 法 采 用 函 数 调 用 的 更 高 效 形 式 调 用 它 时 , 链 接器 将 产 生 错 误 信 息 。DS51284C_CN 第 66 页© 2005 Microchip Technology Inc.

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

Saved successfully!

Ooh no, something went wrong!