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 用 户 指 南mode (mode)在 变 量 声 明 中 使 用 该 属 性 来 指 定 与 模 式 mode 对 应 的 数 据 类 型 。 实 际 上 就 是 允 许 根 据变 量 的 宽 度 指 定 整 数 或 浮 点 数 类 型 。 mode 的 有 效 值 见 下 表 :这 一 属 性 对 于 编 写 可 在 所 有 MPLAB C30 支 持 的 目 标 单 片 机 之 间 移 植 的 代 码 很 有 用 。例 如 , 如 下 函 数 将 两 个 32 位 有 符 号 整 数 相 加 , 并 返 回 一 个 32 位 有 符 号 整 数 结 果 :typedef int __attribute__((__mode__(SI))) int32;int32add32(int32 a, int32 b){return(a+b);}可 以 指 定 byte 或 __byte__ 模 式 指 明 模 式 对 应 于 单 字 节 整 数 , word 或 __word__模 式 对 应 于 单 字 整 数 , pointer 或 __pointer__ 模 式 用 于 表 示 指 针 。nearnear 属 性 告 知 编 译 器 将 变 量 分 配 到 near 数 据 空 间 ( 数 据 存 储 器 的 前 8 KB)。 对 这 种 变量 的 存 取 有 时 比 存 取 未 分 配 ( 或 不 知 已 分 配 ) 到 near 数 据 空 间 的 变 量 效 率 高 。int num __attribute__ ((near));noload模 式 宽 度 MPLAB C30 类 型QI 8 位 charHI 16 位 intSI 32 位 longDI 64 位 long longSF 32 位 floatDF 64 位 long doublenoload 属 性 指 明 应 该 为 变 量 分 配 空 间 , 但 不 应 为 变 量 装 入 初 值 。 这 一 属 性 对 于 设 计 在运 行 时 将 变 量 装 入 存 储 器 ( 如 从 串 行 EEPROM) 的 应 用 程 序 会 有 用 。int table1[50] __attribute__ ((noload)) = { 0 };DS51284C_CN 第 14 页© 2005 Microchip Technology Inc.

MPLAB C30 与 ANSI C 的 差 别packedpacked 属 性 指 定 变 量 或 结 构 位 域 采 用 最 小 的 可 能 对 齐 方 式 —— 变 量 占 一 个 字 节 , 位域 占 一 位 , 除 非 用 aligned 属 性 指 定 了 一 个 更 大 的 值 。下 面 的 结 构 中 位 域 x 被 压 缩 , 所 以 它 紧 接 在 a 之 后 :struct foo{char a;int x[2] __attribute__ ((packed));};注 :dsPIC 器 件 要 求 字 按 偶 数 字 节 对 齐 , 因 此 在 使 用 packed 属 性 时 要 特 别小 心 , 避 免 运 行 时 寻 址 错 误 。persistentpersistent 属 性 指 定 在 启 动 时 变 量 不 应 被 初 始 化 或 清 零 。 具 有 persistent 属 性 的变 量 可 用 于 存 储 器 件 复 位 后 仍 保 持 有 效 的 状 态 信 息 。int last_mode __attribute__ ((persistent));reverse (alignment)reverse 属 性 为 变 量 的 结 束 地 址 加 1 指 定 最 小 对 齐 。 对 齐 以 字 节 指 定 , 必 须 是 2 的 次幂 。 反 向 对 齐 的 变 量 可 用 于 递 减 dsPIC 汇 编 语 言 中 的 模 缓 冲 区 。 如 果 应 用 程 序 需 要 在C 中 定 义 的 变 量 可 从 汇 编 语 言 访 问 , 这 一 属 性 会 有 用 。int buf1[128] __attribute__ ((reverse(256)));reverse 属 性 与 aligned 和 section 属 性 冲 突 。 试 图 为 反 向 对 齐 的 变 量 指 定 一 个 段 将被 忽 略 , 并 发 出 警 告 。 为 同 一 个 变 量 同 时 指 定 reverse 和 aligned 会 产 生 错 误 。 带有 reverse 属 性 的 变 量 不 能 存 放 到 auto_psv 空 间 ( 参 见 space 属 性 或-mconst-in-code 选 项 ); 试 图 这 样 做 将 导 致 警 告 , 且 编 译 器 会 将 变 量 存 放 到 psv 空间 。section ("section-name")默 认 情 况 下 , 编 译 器 将 其 生 成 的 目 标 代 码 存 放 在 .data 和 .bss 段 中 。 section 属性 允 许 指 定 变 量 ( 或 函 数 ) 存 放 到 特 定 的 段 中 。struct array {int i[32];}struct array buf __attribute__ ((section("userdata"))) = {0};section 属 性 与 address 和 reverse 属 性 冲 突 。 在 这 两 种 冲 突 情 形 下 , 段 名 将 被 忽略 , 并 发 出 警 告 。 这 一 属 性 还 可 能 与 space 属 性 冲 突 。 更 多 信 息 , 参 见 关 于 space属 性 的 说 明 。© 2005 Microchip Technology Inc. DS51284C_CN 第 15 页

MPLAB <strong>C30</strong> 与 ANSI C 的 差 别packedpacked 属 性 指 定 变 量 或 结 构 位 域 采 用 最 小 的 可 能 对 齐 方 式 —— 变 量 占 一 个 字 节 , 位域 占 一 位 , 除 非 用 aligned 属 性 指 定 了 一 个 更 大 的 值 。下 面 的 结 构 中 位 域 x 被 压 缩 , 所 以 它 紧 接 在 a 之 后 :struct foo{char a;int x[2] __attribute__ ((packed));};注 :dsPIC 器 件 要 求 字 按 偶 数 字 节 对 齐 , 因 此 在 使 用 packed 属 性 时 要 特 别小 心 , 避 免 运 行 时 寻 址 错 误 。persistentpersistent 属 性 指 定 在 启 动 时 变 量 不 应 被 初 始 化 或 清 零 。 具 有 persistent 属 性 的变 量 可 用 于 存 储 器 件 复 位 后 仍 保 持 有 效 的 状 态 信 息 。int last_mode __attribute__ ((persistent));reverse (alignment)reverse 属 性 为 变 量 的 结 束 地 址 加 1 指 定 最 小 对 齐 。 对 齐 以 字 节 指 定 , 必 须 是 2 的 次幂 。 反 向 对 齐 的 变 量 可 用 于 递 减 dsPIC 汇 编 语 言 中 的 模 缓 冲 区 。 如 果 应 用 程 序 需 要 在C 中 定 义 的 变 量 可 从 汇 编 语 言 访 问 , 这 一 属 性 会 有 用 。int buf1[128] __attribute__ ((reverse(256)));reverse 属 性 与 aligned 和 section 属 性 冲 突 。 试 图 为 反 向 对 齐 的 变 量 指 定 一 个 段 将被 忽 略 , 并 发 出 警 告 。 为 同 一 个 变 量 同 时 指 定 reverse 和 aligned 会 产 生 错 误 。 带有 reverse 属 性 的 变 量 不 能 存 放 到 auto_psv 空 间 ( 参 见 space 属 性 或-mconst-in-code 选 项 ); 试 图 这 样 做 将 导 致 警 告 , 且 编 译 器 会 将 变 量 存 放 到 psv 空间 。section ("section-name")默 认 情 况 下 , 编 译 器 将 其 生 成 的 目 标 代 码 存 放 在 .data 和 .bss 段 中 。 section 属性 允 许 指 定 变 量 ( 或 函 数 ) 存 放 到 特 定 的 段 中 。struct array {int i[32];}struct array buf __attribute__ ((section("userdata"))) = {0};section 属 性 与 address 和 reverse 属 性 冲 突 。 在 这 两 种 冲 突 情 形 下 , 段 名 将 被 忽略 , 并 发 出 警 告 。 这 一 属 性 还 可 能 与 space 属 性 冲 突 。 更 多 信 息 , 参 见 关 于 space属 性 的 说 明 。© 2005 Microchip Technology Inc. DS51284C_CN 第 15 页

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

Saved successfully!

Ooh no, something went wrong!