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-6:将 被 调 用 函 数 保 存 的 寄 存 器 弹 出 堆 栈SP(W15)堆 栈向 高地 址增 长被 调 用 函 数保 存 的 寄 存 器局 部 变 量和 临 时 变 量前 一 个 FP返 回 地 址 [23:16]返 回 地 址 [15:0]参 数 1:参 数 n-1参 数 n[W14+n] 访 问局 部 现 场FP (W14)[W14-n] 访 问基 于 堆 栈 的函 数 参 数调 用 函 数 的 帧4.11 C 堆 使 用C 运 行 时 堆 是 数 据 存 储 器 中 的 未 初 始 化 区 域 , 用 于 使 用 标 准 C 函 数 库 中 的 动 态 存 储 器管 理 函 数 calloc、 malloc 和 realloc 进 行 动 态 存 储 器 分 配 。 如 果 不 使 用 这 些 函数 , 就 不 需 要 分 配 堆 。 默 认 情 况 下 不 创 建 堆 。如 果 确 实 需 要 通 过 调 用 一 个 存 储 器 分 配 函 数 直 接 使 用 动 态 存 储 器 分 配 , 或 通 过 使 用 标准 C 函 数 库 的 输 入 / 输 出 函 数 来 间 接 使 用 动 态 存 储 器 分 配 的 话 , 就 必 须 创 建 一 个 堆 。通 过 使 用 链 接 器 命 令 行 选 项 --heap 在 链 接 器 命 令 行 中 指 定 堆 的 大 小 即 可 创 建 一 个堆 。 例 如 , 使 用 命 令 行 来 分 配 一 个 512K 字 节 的 堆 :pic30-gcc foo.c -Wl,--heap=512链 接 器 会 在 堆 栈 下 面 分 配 一 个 堆 ( 图 4-2)。如 果 使 用 标 准 C 函 数 库 的 输 入 / 输 出 函 数 , 就 必 须 分 配 一 个 堆 。 如 果 stdout 是 使 用的 唯 一 文 件 , 那 么 堆 的 大 小 为 0, 即 使 用 命 令 行 选 项 :-Wl,--heap=0如 果 打 开 几 个 文 件 , 那 么 对 于 同 时 打 开 的 每 个 文 件 , 堆 的 大 小 必 须 包 含 40 个 字 节 。 如果 堆 存 储 区 的 空 间 不 足 , open 函 数 将 返 回 错 误 指 示 。 对 于 每 个 应 被 缓 存 的 文 件 , 都 需要 514 字 节 的 堆 空 间 。 如 果 没 有 足 够 的 堆 存 储 区 空 间 用 于 缓 存 , 文 件 将 以 非 缓 存 模 式打 开 。© 2005 Microchip Technology Inc. DS51284C_CN 第 71 页

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

Saved successfully!

Ooh no, something went wrong!