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> 用 户 指 南section ("section-name")通 常 , 编 译 器 将 生 成 的 代 码 存 放 在 .text 段 中 。 但 有 时 可 能 需 要 其 他 的 段 , 或 者 需 要将 某 些 函 数 存 放 在 特 殊 的 段 中 。 Section 属 性 指 定 将 一 个 函 数 存 放 在 特 定 的 段 中 。 例如 下 面 的 声 明 :extern void foobar (void)__attribute__ ((section (".libtext")));上 述 语 句 将 函 数 foobar 存 放 在 .libtext 段 中 。section 属 性 与 address 属 性 有 冲 突 。 忽 略 段 名 会 导 致 警 告 。shadowshadow 属 性 使 编 译 器 使 用 影 子 寄 存 器 而 不 是 软 件 堆 栈 来 保 存 寄 存 器 。 该 属 性 通 常 与interrupt 属 性 同 时 使 用 。void __attribute__ ((interrupt, shadow)) _T1Interrupt (void)interrupt [ ( [ save(list) ] [, irq(irqid) ][, altirq(altirqid)] [, preprologue(asm) ]) ]使 用 这 个 选 项 来 指 明 指 定 的 函 数 是 一 个 中 断 服 务 程 序 。 当 指 定 该 属 性 时 , 编 译 器 将 生成 适 合 在 中 断 服 务 程 序 中 使 用 的 函 数 prologue 和 epilogue 序 列 。 可 选 参 数 save指 定 在 函 数 prologue 和 epilogue 中 各 自 要 保 存 和 恢 复 的 一 系 列 变 量 。 可 选 参 数irg 和 altirg 指 定 要 使 用 的 中 断 向 量 表 ID。 可 选 参 数 preprologue 指 定 要 在 编 译器 生 成 的 prologue 代 码 前 生 成 的 汇 编 代 码 。 完 整 描 述 和 例 子 , 参 见 第 7 章 “ 中断 ”。unused这 个 函 数 属 性 , 表 明 函 数 可 能 不 会 被 使 用 。MPLAB <strong>C30</strong> 不 会 为 这 种 函 数 发 出 未 使 用 函数 的 警 告 。weak关 于 weak 属 性 , 参 见 第 2.3.1 节 “ 指 定 变 量 的 属 性 ”。2.3.3 内 联 函 数通 过 声 明 一 个 函 数 为 inline, 可 以 指 示 MPLAB <strong>C30</strong> 将 这 个 函 数 的 代 码 集 成 到 调 用 函数 的 代 码 中 。 通 常 这 样 可 避 免 函 数 调 用 的 开 销 , 使 代 码 执 行 速 度 更 快 。 另 外 , 若 任 何实 际 的 参 数 值 为 常 数 , 它 们 的 已 知 值 可 允 许 在 编 译 时 进 行 简 化 , 这 样 不 用 包 含 所 有 的内 联 函 数 代 码 。 对 代 码 量 的 影 响 是 不 容 易 预 估 的 。 使 用 内 联 函 数 , 机 器 代 码 量 视 具 体情 况 可 能 更 大 也 有 可 能 更 小 。注 :仅 当 函 数 定 义 可 见 ( 不 只 是 有 函 数 原 型 ) 时 , 才 能 使 用 函 数 内 联 。 为 将 一个 函 数 内 联 到 多 个 源 文 件 中 , 可 将 函 数 定 义 放 在 每 个 源 文 件 包 含 的 头 文 件中 。DS51284C_CN 第 22 页© 2005 Microchip Technology Inc.

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

Saved successfully!

Ooh no, something went wrong!