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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

处 理 处 理 器 异 常<br />

BL C_SWI_Handler ; Call C routine to handle the SWI<br />

示 例 6-8 展 示 了 如 何 实 现 C 函 数 。<br />

示 例 6-8<br />

void C_SWI_handler (unsigned number)<br />

{ switch (number)<br />

{case 0 : /* SWI number 0 code */<br />

break;<br />

case 1 : /* SWI number 1 code */<br />

break;<br />

:<br />

:<br />

default : /* Unknown SWI - report error */<br />

}<br />

}<br />

超 级 用 户 堆 的 空 间 可 能 是 有 限 的 , 因 此 要 避 免 使 用 需 要 大 量 堆 空 间 的 函 数 。<br />

可 将 值 传 入 和 传 出 用 C 语 言 编 写 的 SWI 处 理 程 序 中 , 前 提 条 件 是 最 高 层 处 理 程<br />

序 将 堆 指 针 值 作 为 第 二 参 数 (r1 中 ) 传 递 到 C 函 数 中 :<br />

MOV r1, sp ; Second parameter to C routine...<br />

; ...is pointer to register values.<br />

BL C_SWI_Handler ; Call C routine to handle the SWI<br />

然 后 更 新 C 函 数 以 访 问 它 :<br />

void C_SWI_handler(unsigned number, unsigned *reg)<br />

现 在 ,C 函 数 在 主 应 用 程 序 代 码 ( 请 参 阅 第 6-21 页 的 图 6-4) 中 遇 到 SWI 指 令 时<br />

即 可 存 取 存 储 在 寄 存 器 中 的 值 了 。 它 可 从 其 中 读 取 :<br />

value_in_reg_0 = reg [0];<br />

value_in_reg_1 = reg [1];<br />

value_in_reg_2 = reg [2];<br />

value_in_reg_3 = reg [3];<br />

并 可 写 入 其 中 :<br />

reg [0] = updated_value_0;<br />

reg [1] = updated_value_1;<br />

reg [2] = updated_value_2;<br />

reg [3] = updated_value_3;<br />

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

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

Saved successfully!

Ooh no, something went wrong!