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 用 户 指 南.dconst当 使 用 -mlarge-data 命 令 行 选 项 时 , 不 需 使 用 -mconst-in-code 选 项 , 即 可 将常 量 值 , 如 字 符 串 常 量 和 const 限 定 的 变 量 分 配 到 .dconst 段 中 。 MPLAB C30 启动 代 码 将 通 过 从 .dinit 段 复 制 数 据 来 初 始 化 这 种 段 , 除 非 指 定 了 链 接 器 选 项--no-data-init。 .dinit 段 由 链 接 器 生 成 , 分 配 到 程 序 存 储 器 中 。.ndconst当 使 用 默 认 的 -msmall-data 命 令 行 选 项 时 , 不 需 使 用 -mconst-in-code 命 令 行选 项 , 即 可 将 常 量 值 , 如 字 符 串 常 量 和 const 限 定 的 变 量 分 配 到 .ndconst 段 中 。MPLABC30 启 动 代 码 将 通 过 从 .dinit 段 中 复 制 数 据 来 初 始 化 这 种 段 。 .dinit 段 由链 接 器 生 成 , 位 于 程 序 存 储 器 中 。.bss具 有 far 属 性 的 未 初 始 化 变 量 分 配 到 .bss 段 中 。 当 选 择 了 大 数 据 存 储 模 型 时 ( 即 当使 用 -mlarge-data 命 令 行 选 项 时 ), 这 是 未 初 始 化 变 量 的 默 认 位 置 。.nbss具 有 near 属 性 的 未 初 始 化 变 量 分 配 到 .nbss 段 中 。 当 选 择 小 数 据 存 储 模 型 时 ( 即 使用 默 认 的 -msmall-data 命 令 行 选 项 时 ), 这 是 未 初 始 化 变 量 的 默 认 位 置 。.pbss - 持 久 数 据如 果 应 用 需 要 将 数 据 存 储 在 RAM 中 而 不 受 器 件 复 位 的 影 响 , 可 以 使 用 段 .pbss。 段.pbss 分 配 到 near 数 据 存 储 区 中 , 不 会 被 libpic30.a 中 的 默 认 启 动 模 块 修 改 。可 使 用 段 属 性 将 未 初 始 化 变 量 存 放 在 .pbss 段 中 :int i __attribute__((persistent));为 了 利 用 持 久 数 据 存 储 , main() 函 数 的 开 头 要 检 测 所 发 生 复 位 的 类 型 。 在 RCON 复位 控 制 寄 存 器 中 的 各 位 可 用 于 检 测 复 位 源 。 详 细 信 息 请 参 阅 《dsPIC30F 系 列 参 考 手册 》(DS70046C_CN) 的 第 8 章 。DS51284C_CN 第 62 页© 2005 Microchip Technology Inc.

MPLAB C30 C 编 译 器 运 行 时 环 境4.5 启 动 和 初 始 化libpic30.a 归 档 / 库 中 包 含 两 个 C 运 行 时 启 动 模 块 。 这 两 个 启 动 模 块 的 入 口 点 都 是__reset。 链 接 描 述 文 件 在 程 序 存 储 器 的 地 址 0 存 放 了 一 条 GOTO __reset 指 令 , 在器 件 复 位 时 转 移 控 制 。默 认 情 况 下 链 接 主 启 动 模 块 并 进 行 以 下 操 作 :1. 使 用 链 接 器 或 用 户 定 义 链 接 描 述 文 件 提 供 的 值 对 堆 栈 指 针 (W15) 和 堆 栈 指 针限 制 寄 存 器 (SPLIM) 进 行 初 始 化 。 详 细 信 息 参 见 第 4.9 节 “ 软 件 堆 栈 ”。2. 如 果 定 义 了 .const 段 , 那 么 将 通 过 初 始 化 PSVPAG 和 CORCON 寄 存 器 将 其 映 射到 程 序 空 间 可 视 性 (PSV) 窗 口 。 注 意 , 当 在 MPLAB IDE 中 选 择 了“Constants in code space” 选 项 或 在 MPLAB C30 命 令 行 中 指 定 了 默 认 的-mconst-in-code 选 项 时 , 将 定 义 一 个 .const 段 。3. 读 取 .dinit 段 中 的 数 据 初 始 化 模 板 , 会 导 致 所 有 未 初 始 化 的 段 被 清 零 , 同 时 所有 已 初 始 化 段 被 初 始 化 为 从 程 序 存 储 器 中 读 取 的 值 。 数 据 初 始 化 模 板 由 链 接 器 创建 , 并 支 持 第 4.4 节 “ 代 码 段 和 数 据 段 ” 中 列 出 的 标 准 段 和 用 户 定 义 段 。注 : 持 久 数 据 段 .pbss 不 会 被 清 零 或 初 始 化 。4. 调 用 main 函 数 时 不 带 参 数 。5. 如 果 从 main 函 数 返 回 , 处 理 器 将 复 位 。当 指 定 -Wl、 --no-data-init 选 项 时 , 将 链 接 备 用 启 动 模 块 (crtl.o)。 它 执 行和 上 面 相 同 的 操 作 , 除 了 第 3 步 , 这 一 步 省 略 掉 。 备 用 启 动 模 块 比 主 启 动 模 块 小 , 所以 当 不 需 要 初 始 化 数 据 时 , 可 选 择 该 模 块 来 节 省 程 序 存 储 空 间 。这 两 个 模 块 的 源 代 码 ( 采 用 dsPIC 汇 编 语 言 ) 存 放 在 c:\pic30_tools\src 目 录中 。 如 果 需 要 , 可 以 对 启 动 模 块 进 行 修 改 。 例 如 , 如 果 应 用 需 要 在 调 用 main 函 数 时带 参 数 , 可 通 过 改 变 条 件 汇 编 伪 指 令 来 提 供 这 一 支 持 。© 2005 Microchip Technology Inc. DS51284C_CN 第 63 页

MPLAB ® <strong>C30</strong> 用 户 指 南.dconst当 使 用 -mlarge-data 命 令 行 选 项 时 , 不 需 使 用 -mconst-in-code 选 项 , 即 可 将常 量 值 , 如 字 符 串 常 量 和 const 限 定 的 变 量 分 配 到 .dconst 段 中 。 MPLAB <strong>C30</strong> 启动 代 码 将 通 过 从 .dinit 段 复 制 数 据 来 初 始 化 这 种 段 , 除 非 指 定 了 链 接 器 选 项--no-data-init。 .dinit 段 由 链 接 器 生 成 , 分 配 到 程 序 存 储 器 中 。.ndconst当 使 用 默 认 的 -msmall-data 命 令 行 选 项 时 , 不 需 使 用 -mconst-in-code 命 令 行选 项 , 即 可 将 常 量 值 , 如 字 符 串 常 量 和 const 限 定 的 变 量 分 配 到 .ndconst 段 中 。MPLAB<strong>C30</strong> 启 动 代 码 将 通 过 从 .dinit 段 中 复 制 数 据 来 初 始 化 这 种 段 。 .dinit 段 由链 接 器 生 成 , 位 于 程 序 存 储 器 中 。.bss具 有 far 属 性 的 未 初 始 化 变 量 分 配 到 .bss 段 中 。 当 选 择 了 大 数 据 存 储 模 型 时 ( 即 当使 用 -mlarge-data 命 令 行 选 项 时 ), 这 是 未 初 始 化 变 量 的 默 认 位 置 。.nbss具 有 near 属 性 的 未 初 始 化 变 量 分 配 到 .nbss 段 中 。 当 选 择 小 数 据 存 储 模 型 时 ( 即 使用 默 认 的 -msmall-data 命 令 行 选 项 时 ), 这 是 未 初 始 化 变 量 的 默 认 位 置 。.pbss - 持 久 数 据如 果 应 用 需 要 将 数 据 存 储 在 RAM 中 而 不 受 器 件 复 位 的 影 响 , 可 以 使 用 段 .pbss。 段.pbss 分 配 到 near 数 据 存 储 区 中 , 不 会 被 libpic30.a 中 的 默 认 启 动 模 块 修 改 。可 使 用 段 属 性 将 未 初 始 化 变 量 存 放 在 .pbss 段 中 :int i __attribute__((persistent));为 了 利 用 持 久 数 据 存 储 , main() 函 数 的 开 头 要 检 测 所 发 生 复 位 的 类 型 。 在 RCON 复位 控 制 寄 存 器 中 的 各 位 可 用 于 检 测 复 位 源 。 详 细 信 息 请 参 阅 《dsPI<strong>C30</strong>F 系 列 参 考 手册 》(DS70046C_CN) 的 第 8 章 。DS51284C_CN 第 62 页© 2005 Microchip Technology Inc.

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

Saved successfully!

Ooh no, something went wrong!