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 用 户 指 南C.16 启 动 代 码C.17 编 译 器 管 理 的 资 源MPLAB C18 提 供 了 三 个 启 动 子 程 序 —— 一 个 启 动 子 程 序 不 对 用 户 数 据 进 行 初 始 化 , 一个 启 动 子 程 序 仅 初 始 化 有 显 式 初 始 化 的 变 量 , 另 外 一 个 启 动 子 程 序 初 始 化 所 有 变 量( 按 照 ANSI 标 准 的 要 求 , 将 无 显 式 初 始 化 的 变 量 初 始 化 为 零 )。MPLAB C30 提 供 两 个 启 动 子 程 序 —— 一 个 启 动 子 程 序 不 对 用 户 数 据 进 行 初 始 化 , 另 外一 个 启 动 子 程 序 初 始 化 除 持 久 数 据 段 中 的 变 量 之 外 的 所 有 变 量 ( 按 照 ANSI 标 准 的 要求 , 将 无 显 式 初 始 化 的 变 量 初 始 化 为 零 )。MPLAB C18 有 如 下 编 译 器 管 理 的 资 源 : PC、 WREG、 STATUS、 PROD、 段.tmpdata、 段 MATH_DATA、 FSR0、 FSR1、 FSR2、 TBLPTR 和 TABLAT。MPLAB C30 有 如 下 编 译 器 管 理 的 资 源 :W0-W15、 RCOUNT 和 SR。C.18 优 化下 面 列 出 了 每 个 编 译 器 进 行 的 优 化 。MPLAB C18MPLAB C30转 移 优 化 (-Ob+)优 化 设 置 (-On, 其 中 n 为 1, 2, 3 或 s) (1)代 码 排 序 (-Os+)尾 部 合 并 (-Ot+)删 除 执 行 不 到 的 代 码 (-Ou+)复 制 传 递 (-Op+)冗 余 存 储 删 除 (-Or+)死 代 码 删 除 (-Od+)合 并 相 同 的 字 符 串 (-Om+)-fwritable-strings存 储 区 选 择 优 化 (-On+)无 — 不 使 用 存 储 区W 寄 存 器 内 容 跟 踪 (-Ow+) 自 动 跟 踪 所 有 寄 存 器过 程 抽 象 (-Opa+)过 程 抽 象 (-mpa)注 1: 在 MPLAB C30 中 , 这 些 优 化 设 置 可 满 足 大 部 分 需 要 。 可 使 用 其 他 选 项 来 进 行 “ 微调 ”。 更 多 信 息 参 见 第 3.5.6 节 “ 控 制 优 化 的 选 项 ”。C.19 目 标 模 块 格 式C.20 实 现 定 义 的 操 作MPLAB C18 和 MPLAB C30 使 用 不 同 的 COFF 文 件 格 式 , 文 件 格 式 不 可 互 换 。对 于 负 的 整 型 值 的 右 移 :• MPLAB C18 不 保 留 符 号 位• MPLAB C30 保 留 符 号 位DS51284C_CN 第 158 页© 2005 Microchip Technology Inc.

MPLAB C18 与 MPLAB C30 C 编 译 器 比 较C.21 位 域MPLAB C18 中 的 位 域 不 能 跨 越 字 节 存 储 边 界 , 因 此 长 度 不 能 大 于 8 位 。MPLAB C30 支 持 任 意 位 数 的 位 域 , 位 域 长 度 最 大 为 基 础 类 型 的 长 度 。 任 何 整 型 都 可 以作 为 一 个 位 域 。 分 配 不 能 跨 越 基 础 类 型 的 位 边 界 。例 如 :struct foo {long long i:40;int j:16;char k:8;} x;struct bar {long long I:40;char J:8;int K:16;} y;使 用 MPLAB C30, 结 构 foo 的 大 小 将 为 10 个 字 节 。 i 将 被 分 配 到 位 偏 移 0 处 ( 直到 位 偏 移 39)。 在 j 之 前 会 填 充 8 位 , 分 配 在 位 偏 移 48 处 。 如 果 将 j 分 配 到 下 一 个可 用 的 位 偏 移 40 处 , 那 么 对 于 一 个 16 位 的 整 型 , 将 跨 越 一 个 存 储 边 界 。 将 在 j 之 后分 配 k, 分 配 到 位 偏 移 64 处 。 结 构 的 最 后 包 含 8 位 的 填 充 , 是 为 了 保 持 为 数 组 时 需 要的 对 齐 。 对 齐 为 2 字 节 , 因 为 结 构 中 的 最 大 对 齐 为 2 字 节 。使 用 MPLAB C30, 结 构 bar 的 大 小 将 为 8 个 字 节 。 i 将 被 分 配 到 位 偏 移 0 处 ( 直 到位 偏 移 39)。 j 之 前 不 需 要 填 充 , 因 为 对 于 一 个 char, 不 会 跨 越 存 储 边 界 。 J 被 分配 到 位 偏 移 40。 K 可 从 位 偏 移 48 开 始 分 配 , 这 样 就 完 成 了 整 个 结 构 的 分 配 , 没 有 浪费 任 何 存 储 空 间 。© 2005 Microchip Technology Inc. DS51284C_CN 第 159 页

MPLAB C18 与 MPLAB <strong>C30</strong> C 编 译 器 比 较C.21 位 域MPLAB C18 中 的 位 域 不 能 跨 越 字 节 存 储 边 界 , 因 此 长 度 不 能 大 于 8 位 。MPLAB <strong>C30</strong> 支 持 任 意 位 数 的 位 域 , 位 域 长 度 最 大 为 基 础 类 型 的 长 度 。 任 何 整 型 都 可 以作 为 一 个 位 域 。 分 配 不 能 跨 越 基 础 类 型 的 位 边 界 。例 如 :struct foo {long long i:40;int j:16;char k:8;} x;struct bar {long long I:40;char J:8;int K:16;} y;使 用 MPLAB <strong>C30</strong>, 结 构 foo 的 大 小 将 为 10 个 字 节 。 i 将 被 分 配 到 位 偏 移 0 处 ( 直到 位 偏 移 39)。 在 j 之 前 会 填 充 8 位 , 分 配 在 位 偏 移 48 处 。 如 果 将 j 分 配 到 下 一 个可 用 的 位 偏 移 40 处 , 那 么 对 于 一 个 16 位 的 整 型 , 将 跨 越 一 个 存 储 边 界 。 将 在 j 之 后分 配 k, 分 配 到 位 偏 移 64 处 。 结 构 的 最 后 包 含 8 位 的 填 充 , 是 为 了 保 持 为 数 组 时 需 要的 对 齐 。 对 齐 为 2 字 节 , 因 为 结 构 中 的 最 大 对 齐 为 2 字 节 。使 用 MPLAB <strong>C30</strong>, 结 构 bar 的 大 小 将 为 8 个 字 节 。 i 将 被 分 配 到 位 偏 移 0 处 ( 直 到位 偏 移 39)。 j 之 前 不 需 要 填 充 , 因 为 对 于 一 个 char, 不 会 跨 越 存 储 边 界 。 J 被 分配 到 位 偏 移 40。 K 可 从 位 偏 移 48 开 始 分 配 , 这 样 就 完 成 了 整 个 结 构 的 分 配 , 没 有 浪费 任 何 存 储 空 间 。© 2005 Microchip Technology Inc. DS51284C_CN 第 159 页

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

Saved successfully!

Ooh no, something went wrong!