01.12.2014 Views

RealView Compilation Tools Developer Guide - ARM Information ...

RealView Compilation Tools Developer Guide - ARM Information ...

RealView Compilation Tools Developer Guide - ARM Information ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

嵌 入 式 软 件 开 发<br />

如 果 使 用 分 散 加 载 方 法 加 载 您 的 映 象 , 必 须 重 新 实 现<br />

__user_initial_stackheap()。 否 则 , 链 接 程 序 产 生 如 下 错 误 :<br />

Error : L6218E: Undefined symbol Image$$ZI$$Limit (referred from<br />

sys_stackheap.o)<br />

2.4.7 运 行 时 存 储 器 模 块<br />

RVCT 提 供 了 两 种 可 能 用 到 的 运 行 时 存 储 器 模 型 :<br />

• 单 区 模 型 为 默 认 模 块 ;<br />

• 第 2-20 页 的 双 区 模 型 。<br />

在 两 种 运 行 时 存 储 器 模 型 中 , 默 认 情 况 下 不 检 查 栈 的 增 长 。 可 通 过 使 用 编 译 程 序<br />

选 项 --apcs /swst 编 译 所 有 的 模 块 来 启 用 映 象 中 的 软 件 栈 检 查 。 如 果 使 用 双 区 模<br />

型 , 在 实 现 __user_initial_stackheap() 时 , 还 必 须 指 定 栈 限 制 。<br />

备 注<br />

启 用 软 件 栈 检 查 增 加 了 代 码 的 实 际 大 小 和 执 行 开 销 , 因 为 必 须 在 每 一 次 函 数 调<br />

用 时 检 查 栈 指 针 的 值 , 看 其 是 否 在 栈 限 制 内 。 它 也 使 用 r10 寄 存 器 , 因 此 , 通 常<br />

建 议 不 要 在 嵌 入 式 系 统 中 使 用 。<br />

两 个 例 子 均 适 用 于 Integrator 系 统 。<br />

单 区 模 型<br />

默 认 情 况 下 为 单 区 模 型 , 应 用 程 序 的 堆 和 栈 在 同 一 存 储 器 区 中 互 相 朝 向 对 方 增<br />

长 。 在 此 情 况 下 , 分 配 新 的 堆 空 间 时 ( 即 调 用 malloc() 时 ), 对 照 栈 指 针 的 值 检<br />

查 堆 。<br />

示 例 2-5 和 第 2-20 页 的 图 2-10 说 明 了 __user_initial_stackheap() 实 现 简 单 的 单<br />

区 模 型 的 一 个 示 例 , 其 中 栈 从 地 址 0x40000 向 下 增 长 , 堆 从 地 址 0x20000 向 上 增<br />

长 。 例 程 将 相 应 的 值 加 载 到 寄 存 器 r0 和 r1, 然 后 返 回 。r2 和 r3 保 持 不 变 , 因 为<br />

在 单 区 模 型 中 不 使 用 堆 限 制 和 栈 限 制 。<br />

示 例 2-5 单 区 模 型 例 程<br />

EXPORT __user_initial_stackheap<br />

__user_initial_stackheap<br />

LDR r0, =0x20000 ;HB<br />

<strong>ARM</strong> DUI 0203BSC © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 2-19

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

Saved successfully!

Ooh no, something went wrong!