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> 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 页

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

Saved successfully!

Ooh no, something went wrong!