IAR Embedded Workbench快速入门



Similar documents
EK-STM32F

untitled

ARM JTAG实时仿真器安装使用指南

目 录

epub83-1

言1.PDF

51 C 51 isp 10 C PCB C C C C KEIL

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

Oracle Solaris Studio makefile C C++ Fortran IDE Solaris Linux C/C++/Fortran IDE "Project Properties" IDE makefile 1.

NEXT SDT2.51 C:\ARM251 SDT2.51 ARM SDT 2.51 ARM PROJECT MANAGER SDT 2

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

IAR Embedded Workbench用户指南

ICD ICD ICD ICD ICD

Smart2.doc

untitled

IAR visualSTATE Workshop

Oracle Oracle Solaris Studio IDE makefile C C++ Fortran makefile IDE Solaris Linux C/C++/Fortran Oracle IDE "P

Abstract arm linux tool-chain root NET-Start! 2

mvc

PTS7_Manual.PDF

KL DSC DEMO 使用说明

AL-MX200 Series

IP505SM_manual_cn.doc

USB解决方案.ppt

untitled

C/C++ - 文件IO

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Chapter 2

AL-M200 Series

Microsoft Word - InoTouch Editor编程软件手册 doc

JTAG ICE PC JTAG ICE JTAG ISP... 5 IDE AVR STUDIO JTAGICE JTAGICE... 12

untitled

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

ebook140-9

audiogram3 Owners Manual

Ch03_嵌入式作業系統建置_01

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

untitled

Bus Hound 5

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明

典型自编教材

Microsoft Word - 11.doc

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

68369 (ppp quickstart guide)

CC213

STM32 STM3232ARM Cortex-M3 Cortex-M3 STM32Thumb-2 STM32MCU Cortex-M3ARM MCU STM32ARM 32 ARMCortex-M3 32 STM32 Cortex-M3 ARM Cortex-M3 ARM ARM

rz_Newsletter2016_en_ indd

KT-SOPCx开发套件简明教程


ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica

,,, PCB, AR M VxWorks DSP,,,,,,,,,,, (CIP) /,,.:,2005 ISBN TP36 CIP (2005) : ( 10 ) : : (010 ) : (010)

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS

ebook140-8

目次 

AXIS P7224 Video Encoder Blade – Installation Guide

f2.eps

一个开放源码的嵌入式仿真环境 ― SkyEye

untitled

P4VM800_BIOS_CN.p65

行业

CC213

solutions guide

PROFIBUS3.doc

PCM-3386用户手册.doc

PPBSalesDB.doc

DSP

untitled

P4V88+_BIOS_CN.p65

图 片 展 示 : 资 源 简 介 : FPGA Altera CycloneII EP2C5T144C8 (4608 个 LE) 2 路 有 源 晶 振 (50M,25M) AS & JTAG 标 准 接 口 VGA 接 口 UART 接 口 蜂 鸣 器 8bit 并 行 DAC 8 路 按 键

P4Dual-915GL_BIOS_CN.p65

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

MICROCHIP EVM Board : APP APP001 PICmicro Microchip APP001 40pin PDIP PICmicro Design Tips Character LCM Temperature Sensor Application I/O Pi

Windows XP

Microsoft Word - 正文.doc

目录

如何使用MyNSLab(MNSL)完成老師指派的作業(學生篇)

基于UML建模的管理管理信息系统项目案例导航——VB篇

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM

P4i45GL_GV-R50-CN.p65

Cadence SPB 15.2 VOICE Cadence SPB 15.2 PC Cadence 3 (1) CD1 1of 2 (2) CD2 2of 2 (3) CD3 Concept HDL 1of 1

PROTEUS VSM

untitled

Guide to Install SATA Hard Disks

untitled

Serial ATA ( Silicon Image SiI3114)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 5 (4) S A T A... 8 (5) S A T A... 10

IP TCP/IP PC OS µclinux MPEG4 Blackfin DSP MPEG4 IP UDP Winsock I/O DirectShow Filter DirectShow MPEG4 µclinux TCP/IP IP COM, DirectShow I

Java 1 Java String Date

C语言的应用.PDF

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG

Learning Java

Transcription:

2006 年 2 月 IAR EWARM 快 速 入 门 (V1.0) www.manley.com.cn 0

目 录 前 言 1 第 一 章 EWARM 集 成 开 发 环 境 及 配 套 仿 真 器. 2 第 二 章 在 EWARM 中 生 成 一 个 新 项 目.........10 第 三 章 编 译 和 连 接 应 用 程 序...... 14 第 四 章 用 C-SPY 调 试 应 用 程 序......20 第 五 章 EWARM Flash Loader 开 发 指 南......28 0

编 者 序 IAR Embedded Workbench for ARM 是 IAR Systems 公 司 为 ARM 微 处 理 器 开 发 的 一 个 集 成 开 发 环 境 ( 下 面 简 称 IAR EWARM) 比 较 其 他 的 ARM 开 发 环 境,IAR EWARM 具 有 入 门 容 易 使 用 方 便 和 代 码 紧 凑 等 特 点 故 在 这 里 介 绍 给 打 算 学 习 使 用 或 正 在 使 用 ARM 芯 片 的 朋 友 们 共 同 探 讨 IAR Systems 公 司 目 前 推 出 的 最 新 版 本 是 IAR Embedded Workbench for ARM version 4.31, 并 提 供 一 个 32k 代 码 限 制 但 时 间 限 制 长 达 25 年 的 免 费 评 估 版 有 兴 趣 的 朋 友 可 以 到 IAR 公 司 的 网 站 www.iar.com/ewarm 或 的 网 站 www.manley.com.cn ( 本 地 网 站 ) 去 寻 找 和 下 载 IAR EWARM 中 包 含 一 个 全 软 件 的 模 拟 程 序 (simulator) 用 户 不 需 要 任 何 硬 件 支 持 就 可 以 模 拟 各 种 ARM 内 核 外 部 设 备 甚 至 中 断 的 软 件 运 行 环 境 从 中 可 以 了 解 和 评 估 IAR EWARM 的 功 能 和 使 用 方 法 我 们 编 译 整 理 的 这 本 快 速 用 户 指 南 采 用 评 估 版 软 件 安 装 目 录 C:\Program files\iar System\Embedded workbench 4.0\ARM\tutor 下 的 教 程 为 例, 一 步 一 步 介 绍 IAR EWARM 的 使 用 方 法 该 教 程 采 用 了 两 个 C 语 言 程 序,tutor.c 和 utilities.c 它 们 不 和 任 何 特 定 的 硬 件 关 联, 所 以 介 绍 中 的 全 部 操 作 都 是 用 模 拟 程 序 完 成 的 在 以 后 的 章 节 里, 我 们 将 具 体 介 绍 EWARM 软 件 及 配 套 硬 件 工 具 如 何 使 用 EWARM 集 成 开 发 环 境 以 及 在 EWARM 下 烧 写 Flash 的 方 法 如 果 用 户 希 望 在 真 实 的 目 标 板 上 进 行 代 码 运 行 和 调 试, 请 到 全 国 各 直 销 点 购 买 IAR 的 JTAG 仿 真 器 J-Link 宋 祈 真 2006 年 于 南 京 附 :EWARM 的 学 习 步 骤 1 下 载 安 装 EWARM 32K 学 习 版 软 件 ; 2 进 入 www.iar.com/ewarm -> Online Demos, 下 载 Flash 格 式 的 软 件 使 用 动 画 演 示 ; 3 以 本 入 门 手 册 结 合 软 件 使 用 的 动 画 演 示, 进 行 软 件 使 用 的 入 门 学 习 ; 4 在 软 件 安 装 目 录...\arm\src\examples 下, 寻 找 感 兴 趣 的 芯 片 例 程 学 习 ; 5 可 选 项 1: 购 买 J-Link 仿 真 器 和 开 发 板, 实 现 在 硬 件 上 的 代 码 运 行 和 调 试 ; 6 可 选 项 2: 购 买 由 北 航 出 版 社 的 IAR EWARM 嵌 入 式 系 统 编 程 与 实 践 一 书, 深 入 学 习 ; 7 学 习 可 选 项 1 或 2 的 随 附 光 盘 中 Converting ADS Projects to EWARM Projects 白 皮 书, 实 践 如 何 移 植 一 个 ADS 工 程 到 EWARM 格 式 的 工 程 1

第 一 章 EWARM 集 成 开 发 环 境 及 配 套 仿 真 器 IAR Embedded Workbench for ARM version 4.31 是 一 个 针 对 ARM 处 理 器 的 集 成 开 发 环 境, 包 含 项 目 管 理 器 编 辑 器 编 译 连 接 工 具 和 支 持 RTOS 的 调 试 工 具, 在 该 环 境 下 可 以 使 用 C/C++ 和 汇 编 语 言 方 便 地 开 发 嵌 入 式 应 用 程 序 IAR EWARM 的 主 要 模 块 如 下 : 项 目 管 理 器 功 能 强 大 的 编 辑 器 高 度 优 化 的 IAR ARM C/C++ Compiler IAR ARM Assembler 1 个 通 用 的 IAR XLINK Linker IAR XAR 和 XLIB 建 库 程 序 和 IAR DLIB C/C++ 运 行 库 IAR C-SPY 调 试 器 ( 先 进 的 高 级 语 言 调 试 器 ) 命 令 行 实 用 程 序 以 下 介 绍 一 下 EWARM 4.31 版 本 及 其 相 关 配 套 硬 件 的 一 些 特 点 : 1. IAR EWAM 软 件 的 特 点 1 EWARM 4.31 版 基 本 特 点 完 善 的 ARM 内 核 支 持 - 最 新 支 持 到 ARM11 内 核 (ARM1136J,ARM1136J-S,ARM1136JF,ARM1136JF-S) - 早 已 支 持 的 其 他 ARM 内 核 ARM7(ARM7TDMI,ARM7TDMI-S,ARM720T) ARM9(ARM9TDMI,ARM920T,ARM922T,ARM940T,ARM9E,ARM9E-S, ARM926EJ-S,ARM946E-S,ARM966E-S,ARM968E-S) ARM10(ARM10E,ARM1020E,ARM1022E,ARM1026EJ-S) XScale(XScale,XScale-IR7) 更 加 客 户 化 地 提 供 芯 片 级 的 支 持 - 完 备 的 各 厂 商 ARM 处 理 器 的 C/C++ 和 汇 编 语 言 外 设 寄 存 器 定 义 文 件 支 持 的 芯 片 厂 商 有 Analog Devices ARM Atmel Cirrus Logic Freescale Intel NetSilicon OKI Philips Samsung Sharp ST 和 TI - 支 持 Analog Devices Atmel Freescale OKI Philips ST 和 TI 等 厂 商 的 ARM 处 理 器 的 Flash Loader 程 序 - 软 件 集 成 了 200 余 个 代 码 例 程, 对 应 于 各 种 不 同 的 芯 片, 位 于...\arm\src\examples 目 录 下 进 一 步 改 进 了 编 译 器 速 度 优 化, 重 写 了 的 浮 点 运 算 库 2

对 更 多 嵌 入 式 操 作 系 统 的 支 持 - 新 增 支 持 OSEK 类 操 作 系 统 的 OSEK Run-Time Interface (ORTI) - 新 增 支 持 OSE Epsilon RTOS 的 Kernel Awareness 调 试 - 新 增 支 持 embos SMX NORTi 等 的 支 持 调 试 器 的 增 强 功 能 - 对 堆 栈 运 行 的 监 测 功 能 - 配 合 IAR J-Link 仿 真 器 的 新 增 功 能 J-Link TCP/IP 服 务 器 调 试 器 和 IAR J-Link 仿 真 器 协 同 配 合, 实 现 对 ARM 处 理 器 的 多 核 调 试 - 对 IAR J-Trace 仿 真 器 提 供 全 面 的 支 持 - 在 C-SPY 模 拟 器 中 可 执 行 Trace 的 模 拟 - 支 持 同 一 芯 片 上 多 颗 Flash 的 Flash Loader 程 序, 以 及 通 用 的 Flash Loader 开 发 指 南 2 EWARM 软 件 在 芯 片 级 支 持 方 面 的 特 色 完 备 的 各 厂 商 ARM 处 理 器 的 C/C++ 和 汇 编 语 言 外 设 寄 存 器 定 义 文 件 大 量 适 合 于 嵌 入 式 代 码 的 编 程 语 言 扩 展 特 性, 包 括 存 储 器 关 键 字, 本 征 函 数, 中 断 函 数, 存 储 器 映 射 I/O 等 针 对 评 估 板 的 例 程, 包 含 IAR Analog Devices Aiji System ARM Atmel Cirrus Logic Freescale Keil OKI Olimex Pasat Philips Phytec ST 和 TI 等 厂 家 的 开 发 板 支 持 ARM 或 Thumb 模 式 下 大 至 4G 字 节 的 应 用 程 序 每 个 函 数 都 能 选 择 在 ARM 或 Thumb 模 式 下 编 译 可 生 成 VFP 向 量 浮 点 协 处 理 器 代 码 支 持 Analog Devices Atmel Freescale OKI Philips ST 和 TI 等 厂 商 的 ARM 处 理 器 的 Flash Loader 程 序 支 持 ARM Angel Debug monitor 3 EWARM 编 译 器 的 软 件 特 色 先 进 的 通 用 编 译 器 优 化 和 针 对 特 定 处 理 器 的 速 度 优 化 及 存 储 器 优 化 功 能 轻 量 运 行 库, 用 户 可 以 根 据 需 要 自 行 配 置, 提 供 全 部 源 代 码 灵 活 的 存 储 器 控 制, 允 许 详 细 地 为 代 码 和 数 据 分 配 地 址 去 除 不 需 要 的 函 数 和 变 量 C/C++ 变 量 和 函 数 连 接 时 全 局 类 型 检 查 可 选 的 校 验 和 生 成 功 能, 用 于 运 行 时 映 象 校 验 自 动 将 代 码 和 数 据 放 置 到 非 连 续 的 存 储 器 区 域 强 大 的 可 重 定 位 宏 汇 编 器, 支 持 丰 富 的 命 令 集 和 操 作 符 3

4 EWARM 调 试 器 的 软 件 特 色 完 全 集 成 的 源 代 码 和 反 汇 编 程 序 调 试 器 非 常 细 化 的 执 行 控 制 ( 函 数 调 用 级 步 进 ) 复 杂 的 代 码 和 数 据 断 点 丰 富 的 数 据 监 视 功 能 Locals,Watch,Auto,Live Watch 和 Quick Watch 等 变 量 查 看 窗 口 寄 存 器 和 存 储 器 查 看 窗 口 支 持 STL 容 器 C/C++ 调 用 栈 窗 口, 同 时 还 可 以 显 示 将 要 进 入 的 函 数 双 击 调 用 链 上 的 任 何 函 数 将 更 新 编 辑 器 局 部 变 量 寄 存 器 变 量 查 看 和 反 汇 编 窗 口, 以 显 示 在 该 函 数 调 用 时 的 状 态 跟 踪 功 能, 可 以 检 查 执 行 的 历 史 记 录 在 跟 踪 窗 口 中 移 动 时 将 更 新 编 辑 器 和 反 汇 编 窗 口 以 显 示 合 适 的 位 置 控 制 台 I/O 仿 真 中 断 和 I/O 模 拟 仿 真 类 似 C 语 言 的 宏 系 统, 可 扩 充 调 试 器 的 功 能 由 主 机 执 行 的 应 用 程 序 系 统 调 用 仿 真 代 码 覆 盖 率 和 执 行 时 间 分 析 工 具 通 用 的 Flash Loader 程 序 及 开 发 指 南 同 时 支 持 多 颗 Flash 的 Flash Loader 程 序 支 持 OSEK Run-Time Interface (ORTI) 提 供 为 调 试 器 扩 充 第 三 方 功 能 的 软 件 开 发 包, 如 RTOS 调 试 扩 充 和 仿 真 器 驱 动 扩 充 命 令 行 调 试 工 具 5 IAR C-SPY 支 持 的 调 试 方 法 IAR J-Link JTAG 接 口 ( 支 持 所 有 ARM7 和 ARM9 核, 通 过 USB 或 TCP/IP 连 接 ) IAR J-Trace JTAG 接 口 ( 支 持 所 有 ARM7 和 ARM9 核, 通 过 USB 或 TCP/IP 连 接 ) RDI 接 口 类 的 第 三 方 仿 真 器 (Abatron BDI1000 & BDI2000, EPI Majic, Ashling Opella, Aiji OpenICE, Signum JTAGjet, ARM Multi-ICE 等 ) Macraigor Wiggler, Raven, mpdemon 和 USBdemon 等 调 试 接 口 EPI Jeeni 仿 真 器 支 持 IAR 的 ROM-Monitor ARM 公 司 的 Angel ROM-Monitor( 用 于 Atmel 和 Cirrus Logic 的 评 估 板 ) 6 IAR 对 嵌 入 式 实 时 操 作 系 统 的 Kernel Awareness 调 试 支 持 4

操 作 系 统 CMA-RX CMX-Tiny + uc/os-ii ThreadX RTXC Quadros Fusion RTOS OSEK(ORTI) ENEA OSE Epsilon MiSPO NORTi Micro Digital SMX Segger embos IAR EWARM 内 置 的 插 件 X X X X X X 由 第 三 方 RTOS 厂 商 提 供 的 插 件 X X X X X 每 种 RTOS 插 件 都 会 在 C-SPY 中 安 装 一 批 新 的 窗 口, 其 中 最 重 要 的 是 任 务 或 线 程 列 表 窗 口, 在 此 窗 口 中 可 以 在 指 定 的 任 务 上 设 置 断 点 和 执 行 程 序 其 它 不 同 的 监 测 窗 口 可 以 显 示 RTOS 内 部 数 据 结 构 的 内 容, 例 如 定 时 器 队 列 信 号 量 资 源 和 邮 箱 等 7 EWARM 图 形 化 的 集 成 开 发 环 境 的 界 面 特 色 分 层 次 的 工 程 组 织 同 一 工 作 空 间 中 允 许 存 放 多 个 工 程 可 停 靠 的 窗 口 和 多 视 图 源 代 码 浏 览 创 建 和 维 护 库 的 工 具 可 以 和 源 代 码 控 制 系 统 相 集 成 文 本 编 辑 器 - 支 持 多 字 节 字 符 ( 汉 字 ) - 上 下 文 相 关 的 帮 助 系 统 - 根 据 句 法 着 色 - 无 限 制 的 undo/redo - 搜 寻 替 换 和 增 量 搜 寻 - Go to - 书 签 - 错 误 标 签 : 查 阅 前 一 个 / 下 一 个 5

- 自 动 括 号 配 对 - 智 能 缩 排 - 类 似 网 页 浏 览 器 的 前 向 / 后 向 源 码 查 阅 - 代 码 断 点 的 设 置 / 清 除 / 使 能 / 禁 止 命 令 行 编 译 连 接 工 具 8 EWARM 的 编 程 语 言 和 标 准 遵 循 ISO/ANSI C94( 带 有 一 些 从 C99 标 准 中 挑 选 的 特 性 ) 标 准 的 C 编 程 语 言 嵌 入 式 C++ 扩 展, 支 持 模 板 多 重 继 承 和 虚 拟 继 承 名 字 空 间 以 及 其 它 不 增 加 执 行 时 间 或 存 储 器 开 销 的 C++ 特 性 完 整 的 嵌 入 式 C++ 库 还 包 含 字 符 串 流 等 特 性, 以 及 标 准 模 板 库 (STL) IEEE-754 浮 点 运 算 规 则 MISRA C 检 查 器 支 持 大 量 工 业 标 准 的 调 试 和 映 象 文 件 格 式 ( 如 ELF/DWARF), 与 大 多 数 常 见 的 调 试 器 和 仿 真 器 兼 容 9 用 户 帮 助 完 备 的 例 程 和 工 程 模 板 上 下 文 相 关 的 联 机 帮 助 系 统, 带 有 库 函 数 查 阅 功 能 印 刷 好 的 用 户 指 南, 带 有 详 细 的 step-by-step 教 程 友 好 详 尽 和 精 确 的 错 误 信 息 和 警 告 信 息 2.IAR J-Link 仿 真 器 简 介 IAR J-Link 是 IAR 为 支 持 仿 真 ARM 内 核 芯 片 推 出 的 JTAG 方 式 仿 真 器 配 合 IAR EWARM 集 成 开 发 环 境 支 持 所 有 ARM7/ARM9 内 核 芯 片 的 仿 真, 无 需 安 装 任 何 驱 动 程 序 与 EWARM 集 成 开 发 环 境 无 缝 连 接, 操 作 方 便 连 接 方 便 简 单 易 学 是 学 习 开 发 ARM 最 好 最 实 用 的 开 发 工 具 同 时, 最 近 的 有 关 权 威 测 试 显 示,J-Link 目 前 是 同 类 产 品 中 下 载 调 试 速 度 最 快 的 J-Tag 仿 真 器 : 公 司 产 品 通 讯 接 口 支 持 内 核 下 载 速 度 对 开 发 板 供 电 功 能 备 注 Macraigor Wiggler LPT ARM7/9 16 KB/ 秒 无 即 并 口 仿 真 头 Keil U-Link USB ARM7 28 KB/ 秒 无 IAR J-Link USB 2.0 ARM7/9 600 KB/ 秒 有 1 J-Link ARM 主 要 特 点 IAR EWARM 集 成 开 发 环 境 无 缝 连 接 的 JTAG 仿 真 器 支 持 所 有 ARM7/ARM9 内 核 的 芯 片, 包 括 Thumb 模 式 6

下 载 速 度 高 达 600 kb/s 最 高 JTAG 速 度 12 MHz 目 标 板 电 压 范 围 1.2V 3.3V 自 动 速 度 识 别 功 能 监 测 所 有 JTAG 信 号 和 目 标 板 电 压 完 全 即 插 即 用 使 用 USB 电 源 带 USB 连 接 线 和 20 芯 扁 平 电 缆 支 持 多 JTAG 器 件 串 行 连 接 标 准 20 芯 JTAG 仿 真 插 头 选 配 14 芯 JTAG 仿 真 插 头 选 配 用 于 5V 目 标 板 的 适 配 器 带 J-Link TCP/IP server, 允 许 通 过 TCP/ IP 网 络 使 用 J-Link 2 IAR J-Link 的 物 理 连 接 J-LINK 一 端 通 过 USB 口 与 PC 连 接, 另 一 端 通 过 标 准 20 芯 JTAG 插 头 与 目 标 板 连 接 建 议 首 先 连 接 J-LINK 到 PC, 再 连 接 J-LINK 到 目 标 系 统, 最 后 给 目 标 系 统 供 电 ( 如 果 目 标 系 统 为 独 立 供 电 而 非 由 J-TAG 口 供 电 的 情 况 ) 3 IAR J-Link 主 要 技 术 指 标 功 耗 吸 取 USB 供 电 电 力 < 50 ma 通 讯 方 式 USB 2.0 全 速 目 标 板 接 口 20 芯 JTAG 口 (14 芯 JTAG 口 选 件 ) J-Link 和 ARM 间 串 行 传 输 速 率 最 高 12 MHz 支 持 目 标 电 压 1.2 3.3 V (5V 适 配 头 选 件 ) 工 作 温 度 +5 C - +60 C 储 存 温 度 -20 C - +65 C 相 对 湿 度 ( 无 冷 凝 水 ) < 90% RH 体 积 100mm x 53mm x 27mm 重 量 ( 不 含 电 缆 ) 70 克 电 磁 兼 容 性 (EMC) EN 55022,EN55024 4 目 标 板 5V 电 源 适 配 器 选 件 当 目 标 系 统 为 5V 电 源 系 统 时, 必 须 使 用 J-LINK 提 供 的 5V 电 源 适 配 器 选 件 对 于 1.2V~3.3V 电 源 系 统, 可 以 直 接 使 用 J-Link 使 用 时 将 适 配 器 的 20 芯 IDC 插 头 插 进 J-Link 的 20 芯 插 座, 再 将 连 接 目 标 的 20 芯 扁 平 电 缆 插 进 适 配 器 的 插 座 5V 适 配 器 选 件 由 目 标 供 电 (3.3V~ 5V), 电 流 <20mA, 有 一 个 LED 指 示 电 源 状 态 7

5 JTAG 插 头 定 义 J-Link 的 JTAG 20 芯 的 IDC 插 头 与 ARM 公 司 的 仿 真 器 插 头 定 义 兼 容, 有 关 定 义 如 下 : 引 脚 名 称 方 向 功 能 描 述 1 VTref Input 目 标 系 统 参 考 电 压 用 于 检 查 目 标 系 统 是 否 供 电, 并 产 生 一 个 逻 辑 电 平 送 给 J-Link 内 部 比 较 器 检 测 结 果 用 来 控 制 输 出 给 目 标 的 逻 辑 电 平 幅 度 此 引 脚 通 常 与 目 标 的 Vdd 联, 中 间 不 允 许 串 接 电 阻 2 Vsupply NC J-Link 不 用 此 引 脚, 在 目 标 系 统 中 连 接 到 Vdd 或 开 路 3 ntrst Output JTAG 复 位,J-Link 输 出 给 目 标 的 Reset 信 号 通 常 连 接 到 目 标 CPU 的 ntrst 引 脚 目 标 板 上 应 将 此 脚 上 拉 到 高 电 位, 避 免 意 外 复 位 4 GND - 公 共 地 5 TDI Output J-Link 输 出 给 目 标 CPU 的 JTAG 数 据 通 常 与 目 标 CPU 的 TDI 引 脚 相 连 建 议 在 目 标 板 上 将 此 脚 上 拉 到 Vdd 6 GND - 公 共 地 7 TMS Output J-Link 输 出 给 目 标 CPU 的 JTAG 模 式 设 置 信 号 通 常 与 目 标 CPU 的 TMS 引 脚 相 连 建 议 在 目 标 板 上 将 此 脚 上 拉 8 GND - 公 共 地 9 TCK Output J-Link 输 出 给 目 标 CPU 的 JTAG 时 钟 信 号 通 常 与 目 标 CPU 的 TCK 引 脚 相 连 建 议 在 目 标 板 上 将 此 脚 上 拉 10 GND - 公 共 地 11 RTCK Intput 目 标 CPU 提 供 给 J-Link 的 测 试 时 钟 信 号 有 些 目 标 要 求 JTAG 的 输 入 与 其 内 部 时 钟 同 步 J-Link 利 用 此 引 脚 的 输 入 可 动 态 地 控 制 自 己 的 TCK 速 率 若 不 使 用 此 功 能, 在 目 标 板 上 将 此 脚 接 地 12 GND - 公 共 地 13 TDO Intput 目 标 CPU 返 回 给 J-Link 的 数 据 信 号 通 常 与 目 标 CPU 的 TDO 引 脚 相 连 14 GND - 公 共 地 15 RESET I/O 目 标 CPU Reset 信 号 16 GND - 公 共 地 17 DBGRQ NC J-Link 不 用 此 引 脚, 在 目 标 系 统 中 将 此 引 脚 开 路 18 GND 公 共 地 19 Vdd Output +3.3V 电 源 输 出 20 GND 公 共 地 8

6 JTAG 速 度 J-Link 有 两 种 速 度 设 定, 即 固 定 JTAG 速 度 自 动 JTAG 速 度, 该 功 能 选 项 位 于 Project Options -> Debugger -> J-Link 设 置 页 面 中 固 定 JTAG 速 度 目 标 被 锁 定 在 固 定 时 钟 速 度 目 标 能 执 行 的 最 大 JTAG 速 度 取 决 于 目 标 自 身 一 般 来 讲, 不 带 JTAG 同 步 逻 辑 的 ARM 内 核 ( 如 ARM7-TDMI) 能 执 行 与 CPU 速 度 相 当 的 JTAG 速 度 而 带 JTAG 同 步 逻 辑 的 ARM 内 核 ( 例 如 ARM7-TDMI-S,ARM946E-S,ARM966EJ-S) 能 执 行 相 当 CPU 速 度 1/6 的 JTAG 速 度 JTAG 速 度 不 应 超 过 10 MHz 自 动 JTAG 速 度 由 TAP 控 制 器 选 择 最 大 的 JTAG 速 度 要 注 意, 不 带 同 步 逻 辑 的 ARM 内 核 可 能 会 工 作 不 稳 定 因 为 CPU 内 核 时 钟 可 能 慢 于 最 大 JTAG 速 度 附 :J-Link 全 国 分 销 点 地 区 销 售 点 地 址 电 话 华 北 北 京 万 利 北 京 海 淀 区 知 春 路 118 号 知 春 电 子 城 B193 柜 010-62562744 / 62526647 天 津 万 利 天 津 南 开 区 鞍 山 西 道 323 号 增 1 号 022-27376292 / 27471810 华 南 深 圳 万 利 深 圳 深 南 中 路 赛 格 电 子 市 场 3 楼 3B35 柜 0755-83681644 / 83681644 深 圳 深 南 中 路 华 强 电 子 世 界 一 楼 20A257 柜 0755-83687350 / 83665281 广 州 万 利 广 州 天 河 区 天 河 路 龙 苑 大 厦 3 栋 506 室 020-87588300 / 87543761 华 东 上 海 万 利 上 海 北 京 东 路 赛 格 电 子 市 场 2A19-2A20 柜 021-53081472 / 53082644 上 海 太 平 洋 电 脑 城 三 楼 347 室 021-54904533 / 54901862 南 京 万 利 南 京 珠 江 路 雄 狮 电 子 商 城 A529 柜 025-83615784 / 83675529 南 京 中 山 东 路 110 号 华 龙 电 子 商 城 二 楼 96# 柜 025-84412638 / 84412638 杭 州 万 利 杭 州 登 云 路 639 号 杭 州 电 子 市 场 1C205 柜 0571-89901205 西 北 西 安 万 利 西 安 西 部 电 子 商 城 2 楼 C 区 2C033-035 029-88221873 / 88270877 东 北 沈 阳 万 利 沈 阳 三 好 街 90 号 甲 百 脑 汇 科 技 广 场 B 区 -W35 024-83991288 / 83990602 华 中 武 汉 万 利 武 汉 武 昌 珞 瑜 路 158 号 华 中 数 码 城 3098 室 027-87654225 长 沙 万 利 长 沙 人 民 路 9 号 百 脑 汇 商 城 二 楼 H23-25 0731-4175141 / 4175141 香 港 香 港 万 利 香 港 九 龙 上 海 街 67 号 10 楼 00852-27303434 9

第 二 章 在 EWARM 中 生 成 一 个 新 项 目 EWARM 是 按 项 目 进 行 管 理 的, 它 提 供 了 应 用 程 序 和 库 程 序 的 项 目 模 板 项 目 下 面 可 以 分 级 或 分 类 管 理 源 文 件 允 许 为 每 个 项 目 定 义 一 个 或 多 个 编 译 连 接 (build) 配 置 在 生 成 新 项 目 之 前, 必 须 建 立 一 个 新 的 工 作 区 (Workspace) 一 个 工 作 区 中 允 许 存 放 一 个 或 多 个 项 目 另 外 用 户 最 好 建 立 一 个 专 用 的 目 录 存 放 自 己 的 项 目 文 件 例 如 在 本 指 南 中 我 们 生 成 一 个 C:\Program files\iar System\My project 目 录 现 在 双 击 桌 面 上 的 IAR Embedded Workbench 图 标, 出 现 IAR EWARM 开 发 环 境 窗 口 1. 生 成 新 的 工 作 区 (Workspace) 选 择 主 菜 单 File > New > Workspace 生 成 新 工 作 区 2. 生 成 新 项 目 1 选 择 主 菜 单 Project > Create New Project, 弹 出 生 成 新 项 目 窗 口, 见 图 1 本 例 选 择 项 目 模 板 (Project template) 中 的 Empty project 图 1. 生 成 新 项 目 窗 口 2 在 Tool chain 栏 中 选 择 ARM, 然 后 点 击 OK 按 钮 3 在 弹 出 的 另 存 为 窗 口 中 浏 览 和 选 择 新 建 的 My projects 目 录, 输 入 文 件 名 project1, 然 后 保 存 这 时 在 屏 幕 左 边 的 Workspace 窗 口 中 将 显 示 新 建 的 项 目 名 见 图 2 所 示 : 10

图 2. Workspace 窗 口 IAR EWARM 提 供 两 种 缺 省 的 项 目 生 成 配 置, 即 Debug 和 Release 本 例 在 Workspace 窗 口 顶 部 的 下 拉 菜 单 中 选 取 Debug 现 在 My projects 目 录 下 已 生 成 一 个 project1.ewp 文 件 该 文 件 中 包 含 与 project1 项 目 设 置 有 关 的 信 息, 如 build 选 件 等 项 目 名 后 缀 上 的 * 号 表 示 该 工 作 区 有 改 变 但 还 没 有 被 保 存 本 例 调 用 printf 库 函 数, 这 是 在 C-SPY 模 拟 器 中 的 一 个 低 级 write 函 数 如 果 用 户 希 望 在 真 实 硬 件 上 以 release 配 置 运 行 例 子, 就 必 须 提 供 与 硬 件 相 适 配 的 write 函 数 4 保 存 工 作 区 先 选 择 主 菜 单 File > Save Workspace, 浏 览 并 选 择 My projects 目 录 然 将 工 作 区 取 名 为 tutorials 输 进 File name 输 入 框, 按 保 存 按 钮 退 出 这 时 在 My projects 目 录 下 将 生 成 一 个 tutorials.eww 文 件, 该 文 件 中 保 存 了 用 户 添 加 到 tutorials 工 作 区 中 的 所 有 项 目 窗 口 和 断 点 放 置 等 与 当 前 操 作 有 关 的 其 他 信 息 则 被 存 储 在 My projects\ settings 目 录 下 的 文 件 中 3. 给 项 目 添 加 文 件 本 例 我 们 将 采 用 arm\tutor 目 录 下 的 两 个 源 文 件,Tutor.c 和 Utilities.c Tutor.c 是 一 个 只 用 到 标 准 C 语 言 的 简 单 程 序 它 用 Fibonacci 数 列 的 前 十 个 数 初 始 化 一 个 数 组, 并 把 结 果 打 印 到 stdout;utilities.c 包 含 计 算 Fibonacci 数 列 的 实 用 程 序 IAR EWARM 允 许 生 成 若 干 个 源 文 件 组 用 户 可 以 根 据 项 目 需 要 来 组 织 自 己 的 源 文 件 但 在 本 例 中 没 有 必 要 1 在 Workspace 中 选 择 希 望 添 加 文 件 的 目 的 地, 可 以 是 项 目 或 源 文 件 组 本 例 直 接 选 project1 11

2 选 择 主 菜 单 Project > Add Files 打 开 标 准 浏 览 窗 口, 见 图 3 选 择 安 装 目 录 ARM\tutor 下 的 上 述 2 个 文 件, 点 击 打 开 按 钮, 把 它 们 添 加 到 Project1 目 录 下 图 3. 添 加 文 件 窗 口 4. 设 置 项 目 选 件 生 成 新 项 目 和 添 加 文 件 后 就 应 该 为 项 目 设 置 选 件 IAR EWARM 允 许 为 任 何 一 级 目 录 和 文 件 单 独 设 置 选 件, 但 是 用 户 必 须 为 整 个 项 目 设 置 通 用 的 编 译 连 接 (build) 选 件 1 选 择 通 用 选 件 选 中 Workspace 中 的 project1 Debug, 然 后 选 择 主 菜 单 Project > Options 也 可 以 先 选 择 project1 Debug, 然 后 选 择 鼠 标 右 键 命 令 中 的 Options 图 4. 项 目 通 用 选 件 窗 口 在 打 开 的 Options 窗 口 左 边 的 Category 中 选 择 General Options 然 后 分 别 在 : 12

- Target 页 面 /Core 条 目 下 选 择 ARM7TDMI-S - Output 页 面 中,Output file 条 目 下 选 择 Executable - Library Configuration 页 面 中,Library 条 目 下 选 择 Normal 2 选 择 编 译 器 选 件 在 Options 窗 口 的 Category 中 选 择 C/C++ Compiler, 见 图 5 图 5. C/C++ Compiler 选 件 窗 口 然 后 在 : - Language 页 面 中, 选 择 C,Allow IAR extensions 等 - Optimization 页 面 中, 选 择 Generate debug information - Output 页 面 中, 选 择 Output list file 和 Assemble mnemonics - List 页 面 中, 选 择 Output list file 并 选 择 Assembler mnemonics 和 Diagnostics - 点 击 OK 按 钮, 确 认 选 择 的 选 件 在 设 置 项 目 选 件 窗 口 中 有 许 多 其 他 信 息 由 于 本 例 比 较 简 单, 所 以 不 涉 及 这 些 内 容 13

第 三 章 编 译 和 连 接 应 用 程 序 这 一 步 编 译 和 连 接 (build) 项 目 程 序, 同 时 生 成 一 个 编 译 器 列 表 文 件 (compiler list file) 和 一 个 连 接 器 存 储 器 分 配 文 件 (linker map file) 1. 编 译 源 文 件 1 选 中 workspace 中 utilities.c 文 件 2 选 择 主 菜 单 Project > Compile, 或 工 具 条 中 的 Compile 按 钮, 或 按 右 键 后 选 择 Compile 命 令 编 译 结 束 后 在 消 息 窗 口 中 出 现 如 图 6 中 的 信 息 图 6. Build 窗 口 中 的 编 译 处 理 消 息 3 用 同 样 的 方 法 编 译 tutor.c 编 译 完 成 后 在 My projects 目 录 下 将 生 成 一 批 新 子 目 录 因 为 我 们 在 建 立 新 项 目 时 选 择 Debug 配 置, 所 以 在 My projects 目 录 下 自 动 生 成 一 个 Debug 子 目 录 Debug 子 目 录 下 又 包 含 另 3 个 子 目 录, 名 字 分 别 为 List Obj Exe 它 们 的 用 途 如 下 : List 目 录 存 下 放 列 表 文 件, 列 表 文 件 的 后 缀 是 lst; Obj 目 录 下 存 放 Compiler 和 Assembler 生 成 的 目 标 文 件, 这 些 文 件 的 后 缀 为 r79, 可 以 用 作 IAR XLINK 连 接 器 的 输 入 文 件 ; Exe 目 录 下 存 放 可 执 行 文 件, 这 些 文 件 的 后 缀 为 d79, 可 以 用 作 IAR C-SPY 调 试 器 的 输 入 文 件, 注 意 在 执 行 连 接 处 理 之 前 这 个 目 录 是 空 的 点 击 project1 Debug 前 面 的 + 号 将 目 录 展 开 你 可 以 从 自 动 生 成 的 Output 目 录 中 看 到 所 有 生 成 的 输 出 文 件 名 以 及 反 映 相 互 依 赖 关 系 的 的 头 文 件 名 14

图 7. 编 译 处 理 后 的 文 件 结 构 2. 查 看 编 译 器 列 表 文 件 现 在 我 们 通 过 改 变 编 译 器 选 件 中 的 优 化 级 别 (Optimization) 来 观 察 list 文 件 是 如 何 自 动 更 新 生 成 的 代 码 量 的 1 list 文 件 的 结 构 双 击 Workspace 窗 口 中 的 Utilities.lst, 打 开 list 文 件, 它 包 含 以 下 信 息 : 文 件 头 显 示 编 译 器 的 版 本 信 息, 列 表 文 件 生 成 时 间,source 文 件 list 文 件 和 object 文 件 的 名 字 和 路 径, 编 译 命 令 行 及 选 件 等 信 息 文 件 体 显 示 为 每 条 源 语 句 生 成 的 汇 编 代 码 和 二 进 制 代 码, 以 及 变 量 如 何 被 分 配 到 不 同 的 段 文 件 尾 显 示 所 需 的 堆 栈 程 序 代 码 以 及 数 据 存 储 器 的 总 量, 同 时 报 告 错 误 和 警 告 信 息 2 选 择 主 菜 单 Tools > Options 弹 出 IDE Options 对 话 窗 口, 选 择 Editor 页 面 选 择 Scan for Change Files 选 件 此 选 件 将 自 动 打 开 编 辑 窗 口 中 的 文 件, 目 前 是 Utilities.lst 文 件 按 OK 按 钮 15

图 8. IDE Option 窗 口 3 选 中 Workspace 窗 口 中 的 Utilities.c, 按 鼠 标 右 键 选 择 弹 出 框 中 的 Options 从 弹 出 的 对 话 框 左 边 的 Category 中 选 择 C/C++ Compiler 并 确 定 Override inherited settings 打 开 Optimization 页 面, 把 优 化 级 别 从 None 改 定 为 High 然 后 按 OK 按 钮 4 重 新 编 译 Utilities.c, 请 注 意 这 时 编 辑 窗 口 中 的 Utilities.lst 文 件 已 经 自 动 被 刷 新 文 件 尾 显 示 的 代 码 大 小 已 经 因 优 化 级 别 的 升 高 而 减 小 5 对 本 例 而 言,Optimization 应 选 择 None 所 以 在 连 接 处 理 前 应 该 将 优 化 级 别 恢 复 到 原 来 的 设 置 这 时 应 选 中 Utilities.c, 按 鼠 标 右 键 选 择 弹 出 框 中 的 Options 选 择 C/C++ Compiler 并 取 消 Override inherited settings 然 后 重 新 编 译 Utilities.c 3. 连 接 应 用 程 序 1 先 选 中 Workspace 窗 口 中 的 Project1 Debug, 然 后 选 择 主 菜 单 Project > Options, 弹 出 Options 对 话 窗 口, 见 图 9 在 左 边 的 Category 中 选 择 Linker, 显 示 IAR XLINK 的 各 选 件 页 面 16

图 9. XLINK 参 数 选 件 窗 口 本 例 全 部 采 用 缺 省 的 连 接 处 理 选 件 但 是 仍 需 要 强 调 一 下 输 出 文 件 格 式 和 Linker 命 令 行 文 件 的 选 择 方 法 : 输 出 格 式 选 择 合 适 的 输 出 格 式 十 分 重 要 你 可 能 需 要 将 输 出 文 件 送 给 一 个 调 试 器 进 行 调 试, 这 时 就 要 求 输 出 格 式 带 有 调 试 信 息 本 例 采 用 适 合 C-SPY 调 试 器 的 缺 省 输 出 选 件, 它 们 是 Debug information for C-SPY With runtime control modules 和 With I/O emulation modules 指 示 需 要 连 接 将 stdin 和 stdout 指 向 C-SPY 的 I/O 窗 口 的 低 级 例 程 如 果 用 户 希 望 把 应 用 下 载 到 一 个 PROM 编 程 器 时, 则 其 输 出 格 式 不 需 要 带 调 试 信 息, 如 Intel-hex 或 Motorola S-records 在 list 页 面 中 选 择 Generate Linker listing 和 Segment map( 见 图 10) 允 许 生 成 存 储 器 分 配 MAP 文 件 注 ) 本 例 连 接 器 命 令 文 件 中 的 定 义 不 与 任 何 特 定 的 硬 件 相 关 联 EWARM 提 供 的 连 接 器 命 令 文 件 模 板 都 可 以 在 模 拟 器 (simulator) 中 使 用 但 是 如 果 要 把 它 们 用 于 目 标 系 统 时 必 须 与 实 际 的 硬 件 存 储 器 分 布 相 适 配 用 户 可 以 从 src\ examples 目 录 中 找 到 与 评 估 板 相 关 的 连 接 器 命 令 17

文 件 连 接 器 命 令 文 件 在 连 接 器 命 令 文 件 中, 用 于 段 (segment) 控 制 的 XLINK 命 令 行 是 用 来 放 置 段 的 熟 悉 连 接 器 命 令 文 件 和 段 的 放 置 十 分 重 要 用 户 可 以 从 ARM IAR C/C++ Compiler Reference Guide 中 了 解 更 多 信 息 本 例 使 用 缺 省 的 连 接 器 命 令 文 件, 请 见 图 9 或 图 10 中 的 Config 页 面 用 户 如 果 要 检 查 连 接 器 命 令 文 件, 需 用 合 适 的 文 本 编 辑 器, 例 如 IAR EWARM 的 编 辑 器 也 可 以 打 印 出 来, 检 查 各 项 定 义 是 否 符 合 要 求 2 点 击 OK 按 钮 保 存 IAR XLINK 选 件 3 选 择 主 菜 单 Project > Make 或 鼠 标 右 键 Make 命 令, 连 接 目 标 文 件, 生 成 可 执 行 代 码 Build 消 息 窗 口 中 将 显 示 连 接 处 理 的 消 息 连 接 的 结 果 将 生 成 一 个 带 调 试 信 息 的 代 码 文 件 project1.d79 和 一 个 存 储 器 分 配 (MAP) 文 件 project1.map 图 10. XLINK 选 件 中 的 list 页 面 4. 查 看 MAP 文 件 双 击 Workspace 中 的 project1.map 文 件 名, 编 辑 器 窗 口 中 将 显 示 该 MAP 文 件 从 MAP 文 件 中 我 们 可 以 了 解 以 下 内 容 : - 文 件 头 中 显 示 连 接 器 版 本, 输 出 文 件 名 以 及 连 接 命 令 使 用 的 选 件 18

- CROSS REFERENCE 段 显 示 程 序 入 口 地 址 - RUNTIME MODEL 段 显 示 使 用 的 运 行 时 模 块 的 属 性 - MODULE MAP 段 显 示 所 有 被 连 接 的 文 件 每 个 文 件 中, 作 为 应 用 程 序 一 部 分 加 载 的 有 关 模 块 的 信 息, 包 括 各 段 和 每 个 段 中 声 明 的 全 局 符 号 都 列 出 来 - SEGMENTS IN ADDRESS ORDER 段 列 出 了 组 成 应 用 程 序 的 所 有 段 的 起 始 地 址 和 结 束 地 址, 字 节 数, 类 型 和 对 齐 标 准 等 - END OF CROSS REFERENCE 段 落 显 示 总 的 代 码 和 数 据 字 节 数 到 此 为 止, 已 经 生 成 project1.d79 应 用 程 序 并 可 以 用 于 在 IAR C-SPY 中 调 试 新 闻 : 成 为 IAR 公 司 8051 开 发 工 具 代 理 商 2 月 23 日, 中 国 上 海 IAR 公 司 今 天 宣 布 万 利 电 子 成 为 其 8051 开 发 工 具 代 理 商, 并 在 其 最 新 发 布 的 7.20c 版 的 EW8051 集 成 开 发 环 境 中, 无 缝 集 成 了 万 利 Insight 仿 真 器 的 系 列 驱 动 双 方 在 软 硬 件 技 术 上 的 互 补 能 力, 使 得 该 工 具 包 比 同 类 竞 争 产 品 代 码 效 率 提 高 15%-20%, 并 实 现 完 全 实 时 的 在 线 调 试 双 方 同 时 联 合 宣 布 在 中 国 发 布 一 套 市 场 售 价 为 人 民 币 2,900 元 的 8051 开 发 工 具 包, 其 中 包 含 : - 1 套 8k 代 码 限 制 版 的 IAR EW8051 集 成 开 发 软 件 - 1 个 Insight 8051 仿 真 器 ( 用 户 可 从 万 利 8051 系 列 仿 真 器 中 选 配 1 款, 以 适 用 不 同 的 8051 芯 片 ) 该 工 具 包 即 日 起 于 万 利 电 子 全 国 13 个 直 销 点 上 柜 销 售 双 方 在 技 术 上 将 紧 密 配 合, 进 一 步 为 国 内 外 8051 芯 片 厂 商 提 供 工 具 链 定 制 的 服 务 新 闻 :IAR 公 司 宣 布 支 持 ARM Cortex M3 2 月 28 日, 瑞 典 乌 普 萨 拉 IAR 公 司 今 天 宣 布 了 在 集 成 开 发 环 境 EWARM 中 支 持 新 的 ARM Cortex M3(CM3) 架 构, 这 在 ARM 第 三 方 工 具 合 作 伙 伴 中, 首 个 宣 布 支 持 该 架 构 新 的 EWARM 集 成 开 发 环 境 中 将 会 包 含 一 个 高 度 优 化 Thumb2 指 令 的 C/C++ 编 译 器 4 月 份,IAR 将 在 一 些 选 定 的 合 作 伙 伴 中 进 行 该 编 译 器 的 β 版 测 试, 同 时 还 将 发 布 新 版 的 USB 接 口 的 J-Link JTAG 仿 真 器, 无 缝 支 持 Cortex M3 新 处 理 器 的 调 试 和 flash 烧 写 功 能 19

第 四 章 用 C-SPY 调 试 应 用 程 序 本 例 使 用 C-SPY 的 模 拟 器 (Simulator) 来 展 现 IAR C-SPY 调 试 器 的 基 本 特 点 前 面 各 节 生 成 的 project1.d79 应 用 程 序 已 经 可 以 用 C-SPY 调 试 器 进 行 调 试 用 户 利 用 调 试 器 可 以 查 看 变 量 设 置 断 点 观 察 反 汇 编 代 码 监 视 寄 存 器 和 存 储 器 在 Terminal I/O 窗 口 打 印 输 出 1. 开 始 调 试 在 开 始 调 试 之 前 必 须 设 置 几 个 C-SPY 选 件 具 体 操 作 如 下 : 1 选 择 主 菜 单 Project > Option, 选 择 Category 中 的 Debugger 在 Setup 页 面, 在 Driver 的 下 拉 菜 单 中 选 择 Simulator, 同 时 选 择 Run to main, 点 击 OK 如 果 用 户 已 经 购 买 了 IAR 的 JTAG 仿 真 器, 请 选 择 J-Link 2 选 择 主 菜 单 Project > Debug 或 工 具 条 上 的 Debugger 按 钮 IAR C-SPY 将 开 始 装 载 project1.d79 除 了 已 经 打 开 的 窗 口 外, 将 显 示 一 组 C-SPY 专 用 窗 口 2. 组 织 窗 口 在 EWARM 中 可 以 固 定 窗 口 ( 所 谓 dock), 也 可 以 组 织 成 书 签 形 式, 也 可 以 让 它 们 浮 动 改 变 浮 动 窗 口 的 大 小 时 其 他 窗 口 不 受 影 响 注 意 EWARM IDE 窗 口 最 底 部 的 状 态 条 中 包 含 如 何 安 排 窗 口 的 有 用 信 息 详 细 信 息 请 参 见 77 页 Organizing the windows on screen 在 开 始 调 试 前 请 确 认 如 图 11 所 示 的 各 窗 口 和 内 容 已 经 显 示 在 屏 幕 上 在 编 辑 器 窗 口 应 能 看 到 源 文 件 Tutor.c 和 Utilities.c 以 及 Debug Log 消 息 窗 口 3. 检 查 源 语 句 1 检 查 源 语 句, 双 击 Workspace 中 的 Tutor.c; 2 在 编 辑 器 显 示 文 件 Tutor.c 后, 用 Debug > Step Over 命 令 ( 或 F10), 步 进 到 init_fib 函 数 调 用 语 句 ; 3 用 Debug > Step Into 命 令 ( 或 F11) 进 入 函 数 init_fib; 注 )Step Over 命 令 用 来 执 行 源 程 序 中 的 一 条 语 句 或 一 条 指 令, 即 使 这 条 语 句 是 一 函 数 调 用 语 句 20

而 Step Into 命 令 则 进 入 到 函 数 或 子 程 序 调 用 内 部 当 执 行 Step Into 后, 活 跃 窗 口 已 经 切 换 到 Utilities.c, 因 为 init_fib 在 这 个 文 件 里 4 继 续 用 Step Into 命 令 直 到 for 循 环 语 句 ; 5 再 用 Step Over 命 令 回 到 for 循 环 的 头 请 注 意, 现 在 是 在 函 数 调 用 级 上 而 不 是 语 句 级 步 进 注 ) 还 有 一 种 语 句 级 步 进 的 命 令,Debug > Next statement 或 工 具 条 上 的 Next statement 按 钮 这 条 命 令 与 Step Into 和 Step over 不 同 图 11. C-SPY 调 试 窗 口 4. 检 查 变 量 C-SPY 允 许 在 源 程 序 上 查 看 变 量 或 表 达 式, 所 以 可 以 在 执 行 程 序 过 程 中 跟 踪 它 们 的 值 的 变 化 查 看 变 量 的 方 法 有 几 种, 在 源 码 窗 口 用 鼠 标 双 击 变 量 名 然 后 打 开 Locals Live Watch 或 Auto 窗 口 如 何 检 查 变 量 的 更 详 细 信 息 请 看 章 节 Working with variables and expressions 注 ) 当 采 用 None 优 化 级 时, 所 有 的 非 静 态 变 量 在 它 们 的 活 动 范 围 内 都 是 活 跃 的, 所 以 这 些 变 量 是 完 全 能 够 调 试 的 但 如 果 使 用 更 高 级 别 的 优 化, 变 量 可 能 不 能 完 全 调 试 1 利 用 Auto 窗 口 查 看 变 量 选 择 View > Auto 打 开 Auto 窗 口 Auto 窗 口 显 示 最 近 修 改 过 的 表 达 式 的 当 前 值, 单 步 执 行 程 序 观 察 变 量 如 何 变 化 21

图 12. Auto 窗 口 中 检 查 变 量 2 设 置 一 个 Watchpoint, 利 用 Watch 窗 口 查 看 变 量 选 择 View > Watch 打 开 Watch 窗 口 请 注 意 Watch 窗 口 和 Auto 窗 口 按 书 签 形 式 显 示 按 以 下 步 骤 在 变 量 i 上 设 置 一 个 Watchpoint - 点 击 Watch 窗 口 中 的 虚 线 框, 当 输 入 区 出 现 时 输 入 i, 然 后 按 Enter 键 也 可 以 从 编 辑 器 窗 口 拖 一 个 变 量 到 Watch 窗 口 - 双 击 init_fib 函 数 中 的 root 数 组 名, 将 其 拖 到 Watch 窗 口 Watch 窗 口 将 显 示 i 和 root 的 值 将 root 展 开 观 察 每 个 元 素 的 值 图 13. Watch 窗 口 - 继 续 执 行 单 步, 观 察 i 和 root 值 的 变 化 - 从 Watch 窗 口 中 除 去 一 个 变 量 时, 只 需 选 择 它 然 后 删 除 5. 设 置 和 监 视 断 点 IAR C-SPY 具 有 强 大 的 断 点 功 能 详 细 请 见 手 册 131 页 The breakpoint system 设 置 断 点 最 简 单 的 方 法 是 将 光 标 定 位 到 某 条 语 句, 然 后 按 鼠 标 右 键 选 择 Toggle Breakpoint 命 令 实 验 22

方 法 如 下 : 1 设 置 断 点 用 下 面 方 法 在 get_fib(i) 语 句 上 设 置 断 点 在 编 辑 器 窗 口 显 示 utilities.c 点 击 要 设 置 断 点 的 语 句, 选 择 主 菜 单 Edit > Toggle Breakpoint 也 可 以 按 工 具 条 上 的 Toggle Breakpoint 按 钮 这 时 该 语 句 上 将 出 现 断 点 标 记 如 果 要 查 看 刚 定 义 的 断 点, 选 择 主 菜 单 View > Breakpoint 打 开 Breakpoint 窗 口 在 Debug Log 窗 口 也 显 示 有 关 断 点 执 行 的 信 息 图 14. 设 置 断 点 2 执 行 到 断 点 选 择 主 菜 单 Debug > Go 或 者 工 具 条 上 的 Go 按 钮 都 可 以 让 程 序 执 行 到 断 点 Watch 窗 口 将 显 示 root 表 达 式 的 值 Debug Log 窗 口 将 显 示 关 于 断 点 的 信 息 3 消 除 断 点 可 用 主 菜 单 Edit > Toggle Breakpoint 或 按 鼠 标 右 键 选 择 Toggle Breakpoint 6. 在 反 汇 编 窗 口 上 调 试 通 常, 在 C\C++ 程 序 上 调 试 应 该 更 快 速 和 更 直 接 但 是 如 果 用 户 希 望 在 反 汇 编 程 序 上 调 试,C-SPY 也 提 供 了 这 种 功 能, 而 且 C-SPY 允 许 方 便 地 在 两 种 方 式 上 切 换 反 汇 编 程 序 的 调 试 方 法 如 下 : 1 按 Reset 按 钮 复 位 应 用 程 序 2 调 试 时 反 汇 编 窗 口 通 常 是 打 开 的 如 果 还 没 打 开 可 以 选 择 主 菜 单 View > Disassembly 打 开 反 汇 编 窗 口 23

图 15. 反 汇 编 窗 口 反 汇 编 窗 口 如 图 15 所 示 可 以 看 到 汇 编 代 码 与 C 语 句 一 一 对 应 用 上 面 介 绍 的 几 种 单 步 命 令 执 行 程 序 观 察 结 果 7. 监 视 寄 存 器 寄 存 器 窗 口 允 许 用 户 监 视 和 修 改 CPU 寄 存 器 的 内 容 具 体 方 法 如 下 : 1 选 择 主 菜 单 View > Register 打 开 寄 存 器 窗 口, 见 图 16 图 16. 寄 存 器 窗 口 2 用 Step Over 命 令 执 行 下 一 条 指 令, 观 察 寄 存 器 窗 口 中 的 数 据 如 何 变 化 3 关 闭 寄 存 器 窗 口 24

8. 查 看 存 储 器 用 户 可 以 在 存 储 器 窗 口 监 视 所 选 择 的 存 储 器 区 域 下 面 是 检 查 与 变 量 root 有 关 的 存 储 器 内 容 1 选 择 主 菜 单 View >Memory 打 开 存 储 器 窗 口, 见 图 17( 用 8-bit 显 示 数 据 ) 2 激 活 Utilities.c 窗 口 并 双 击 变 量 root 用 鼠 标 将 其 拖 到 存 储 器 窗 口 3 如 果 希 望 以 16-bit 显 示 数 据, 在 存 储 器 窗 口 定 部 的 下 拉 菜 单 中 选 择 2x Units 命 令 如 果 C 应 用 程 序 的 init_fib 函 数 没 有 初 始 化 所 有 的 存 储 器 单 元, 继 续 执 行 单 步, 同 时 观 察 存 储 器 的 内 容 是 如 何 修 改 的 用 户 可 以 在 存 储 器 窗 口 修 改 存 储 单 元 的 内 容 只 需 把 插 入 点 放 在 希 望 修 改 的 地 方, 然 后 输 入 新 值 就 可 以 了 4 关 闭 存 储 器 窗 口 图 17. 8-bit 模 式 显 示 存 储 器 窗 口 图 18. 16-bit 模 式 显 示 存 储 器 窗 口 9. 观 察 Terminal I/O 用 户 有 时 可 能 希 望 调 试 应 用 程 序 中 的 stdin 和 stdout 结 构, 但 是 又 没 有 实 际 的 硬 件 支 持,C-SPY 允 许 用 户 使 用 Terminal I/O 模 拟 stdin 和 stdout 注 )Terminal I/O 只 有 在 使 用 了 连 接 输 出 文 件 选 件 With I/O emulation module 时 才 可 用 也 就 是 说, 某 些 把 stdin 和 stdout 指 向 Terminal I/O 的 低 级 例 程 将 被 连 接 进 应 用 程 序 25

1 选 择 主 菜 单 View > Terminal I/O 显 示 I/O 操 作 的 输 出, 见 图 19 Terminal I/O 窗 口 显 示 的 内 容 取 决 于 应 用 程 序 执 行 了 多 远 图 19. Terminal I/O 窗 口 10. 执 行 程 序 到 结 束 1 选 择 主 菜 单 Debug > Go 或 工 具 条 上 的 Go 按 钮 因 为 只 有 一 个 断 点, 所 以 程 序 一 直 执 行 到 结 束 同 时 在 Debug Log 窗 口 显 示 已 经 到 达 程 序 exit 的 消 息, 见 图 20 图 20. Debug Log 窗 口 2 如 果 要 求 复 位 应 用 程 序, 选 择 主 菜 单 Debug > Reset 或 工 具 条 上 的 Reset 按 钮 3 如 果 要 退 出 C-SPY, 选 择 Debug > Stop Debugging, 或 工 具 条 上 的 Stop Debugging 按 钮 C-SPY 还 提 供 许 多 其 他 的 调 试 功 能, 如 宏 和 中 断 模 拟 等, 将 在 指 南 的 其 他 章 节 讨 论 有 关 如 何 使 用 Debug 功 能 的 详 细 介 绍 请 见 手 册 Part 4 C-SPY 的 特 点 介 绍 请 见 手 册 Part 7 以 及 联 机 帮 助 信 息 26

新 闻 :IAR 公 司 发 布 首 款 ARM Trace 仿 真 器 2 月 14 日, 德 国 纽 伦 堡 IAR 公 司 今 天 发 布 了 其 ARM 系 列 调 试 工 具 中 的 新 一 代 产 品 : 硬 件 调 试 设 备 IAR J-Trace 它 支 持 所 有 带 ETM (Embedded Trace Macrocell) 的 ARM7 和 ARM9 处 理 器, 通 过 全 速 USB 2.0 接 口 与 主 机 连 接, 并 提 供 2M 字 节 的 Trace 缓 存,IAR 公 司 新 版 EWARM 能 够 完 全 支 持 J-Trace 该 Trace 仿 真 器 零 售 价 仅 为 1195 美 元, 由 于 还 带 有 标 准 JTAG 接 口,IAR J-Trace 对 于 绝 大 多 数 开 发 者 而 言 都 可 以 是 唯 一 需 要 的 ARM 硬 件 调 试 设 备 技 术 细 节 Trace 规 格 USB 驱 动 的 JTAG 和 Trace (38-pin Mictor) 接 口 ; Trace 支 持 最 高 200 MHz 全 速 时 钟 和 100 MHz 支 持 所 有 ARM7 和 ARM9 处 理 器 ; 半 速 时 钟 无 需 电 源, 通 过 USB 接 口 供 电 ; 也 带 有 外 接 电 源 插 口 ; Trace 功 能 基 于 ARM ETM (Embedded Trace 集 成 在 IAR Embedded Workbench for ARM 中, 易 于 Macrocell) 设 置 和 使 用 Trace 支 持 带 有 内 置 Trace 端 口 的 设 备 2M 字 节 Trace 缓 存 基 本 性 能 体 积 紧 凑, 易 于 放 置 在 桌 面 JTAG 速 率 12 MHz 安 静, 无 风 扇 设 计 自 动 速 率 识 别 支 持 cycle accurate 和 compressed tracing USB 2.0 全 速 (12Mbit/sec) 支 持 4 位 / 8 位 / 16 位 的 Trace 端 口, 每 种 端 基 于 RTCK JTAG 信 号 的 自 适 应 时 钟 口 均 支 持 全 速 时 钟 和 半 速 时 钟 所 有 信 号 均 可 监 控 ; 目 标 电 压 可 测 量 集 成 在 IAR Embedded Workbench for ARM 中, 20-pin 标 准 JTAG 接 口,38-pin 标 准 Trace Mictor 接 口 易 于 设 置 和 使 用 含 USB 电 缆,20-pin 扁 平 电 缆 和 38-pin Trace 电 缆 Trace 窗 口 与 Source 和 Disassembly 窗 口 同 步 支 持 的 主 机 操 作 系 统 :Windows 2000 和 Windows XP Function Trace 能 够 分 层 次 地 显 示 被 调 用 的 函 数 与 C-SPY 调 试 器 全 面 集 成 ; 进 阶 的 调 试 功 能 都 可 以 在 C-SPY 中 使 用 IAR J-Trace 使 得 IAR Systems 为 ARM 开 发 者 提 供 的 工 具 链 更 为 完 整,IAR 公 司 如 今 能 够 为 我 们 所 有 不 同 种 类 的 STR ARM 微 控 制 器 用 户 提 供 完 美 的 服 务 Mr.Dominique Jugnon, 意 法 半 导 体 微 控 制 器 开 发 工 具 经 理 IAR J-Trace 对 于 我 们 的 汽 车 客 户 来 说 将 会 极 有 价 值 在 这 一 价 位 提 供 的 功 能 允 许 大 多 数 开 发 者 方 便 地 使 用 先 进 的 Trace 调 试 方 案, 提 高 开 发 质 量 Mr. Gualtiero Bagnuoli,Micronas 的 汽 车 产 品 应 用 经 理 毫 无 疑 问, 该 产 品 的 发 布 将 给 ARM 硬 件 调 试 工 具 市 场 带 来 改 变 他 总 结 道 : 内 嵌 一 定 容 量 Flash Memory 的 ARM 处 理 器 的 使 用 者 现 在 有 了 一 个 完 整 的 高 端 开 发 工 具 解 决 方 案 :IAR Embedded Workbench for ARM BaseLine 版 本, 一 块 开 发 板 以 及 IAR J-Trace 调 试 工 具, 总 价 低 于 4000 美 元! Mr. Mike Skrtic,IAR 公 司 的 开 发 套 件 经 理 27

第 五 章 EWARM Flash Loader 开 发 指 南 本 章 包 含 以 下 内 容 : 如 何 将 应 用 程 序 下 载 到 RAM 中 如 何 将 应 用 程 序 下 载 到 Flash 中 从 框 架 程 序 和 驱 动 程 序 两 个 部 份 分 别 介 绍 Flash Loader 本 文 还 介 绍 了 如 何 编 写 和 调 试 自 己 的 Flash Loader, 最 后, 详 细 描 述 了 Flash Loader 框 架 API 函 数 注 ) 本 文 中 的 xx 表 示 2 个 数 字, 用 于 识 别 所 用 的 处 理 器 1. 将 应 用 程 序 下 载 到 RAM 中 将 应 用 程 序 下 载 到 RAM 发 生 在 C-SPY 启 动 期 间, 由 C-SPY 自 己 控 制 执 行 所 谓 下 载 就 是 通 过 JTAG 接 口 把 数 据 写 进 目 标 系 统 当 C-SPY 启 动 时, 它 执 行 以 下 步 骤 : 从 application.dxx 文 件 中 读 取 应 用 程 序 的 二 进 制 映 象 和 调 试 信 息 ; 通 过 JTAG 接 口 将 二 进 制 映 象 传 输 到 目 标 系 统 的 RAM 中 ; 将 程 序 计 数 器 (PC) 指 向 RAM 中 的 应 用 程 序 入 口 点 此 时 RAM 中 的 应 用 程 序 已 经 准 备 好 可 以 运 行 28

2. 将 应 用 程 序 下 载 到 Flash 中 将 应 用 程 序 下 载 到 Flash 也 发 生 在 C-SPY 启 动 期 间, 但 不 是 由 C-SPY 执 行, 而 是 由 一 个 叫 做 Flash Loader 的 专 用 程 序 执 行 Flash Loader 先 被 装 入 到 RAM 并 运 行, 再 将 应 用 程 序 写 进 Flash 链 接 器 (linker) 生 成 两 个 输 出 文 件, 第 一 个 是 常 规 的 UBROF 格 式 目 标 文 件 ( 扩 展 名 为 dxx), 另 一 个 是 简 单 二 进 制 格 式 目 标 文 件 (simple-code, 扩 展 名 为 sim) Simple-code 格 式 十 分 简 洁 而 且 容 易 拆 包, 这 是 Flash Loader 得 以 在 目 标 硬 件 中 执 行 的 重 要 条 件 Flash Loader 是 一 个 常 规 的 IAR Embedded Workbench 应 用 程 序, 可 以 在 IAR Embedded Workbench 环 境 中 开 发 和 调 试 29

当 C-SPY 启 动 时, 它 执 行 以 下 步 骤 : 从 flashloader.dxx 文 件 中 读 取 Flash Loader 的 二 进 制 映 象 ; 通 过 JTAG 接 口 将 该 二 进 制 映 象 写 进 目 标 系 统 的 RAM; 将 程 序 计 数 器 (PC-1) 指 向 Flash Loader 在 RAM 中 的 入 口 点, 并 开 始 运 行 ; 通 过 文 件 I/O,Flash Loader 经 由 JTAG 接 口 把 application.sim 文 件 中 的 应 用 程 序 二 进 制 映 象 读 入 目 标 系 统 并 写 进 Flash 存 储 器 ; C-SPY 从 application.dxx 文 件 中 读 取 调 试 信 息, 并 将 程 序 计 数 器 (PC-2) 指 向 Flash 中 的 应 用 程 序 入 口 点 ; 此 时 Flash 中 的 应 用 程 序 已 经 准 备 好 可 以 运 行 3.Flash Loader 介 绍 Flash Loader 是 用 IAR Embedded Workbench 开 发 的 本 地 应 用 程 序 其 任 务 是 通 过 文 件 I/O 从 主 机 读 取 应 用 程 序 的 二 进 制 映 象, 将 映 象 拆 包, 并 写 进 Flash 存 储 器 Flash Loader 可 以 分 成 两 个 部 分 一 是 所 有 Flash Loader 所 共 用 的 框 架 部 分, 其 源 代 码 由 IAR Systems 提 供 并 包 含 在 IAR Embedded Workbench 中 ; 二 是 驱 动 部 份, 它 是 一 小 段 用 于 实 际 烧 写 Flash 存 储 器 的 小 程 序 在 IAR Embedded Workbench 中 已 经 包 含 了 一 组 用 于 各 种 芯 片 的 Flash Loader 驱 动 程 序 由 于 Flash Loader 驱 动 程 序 很 简 单, 所 以 用 户 可 以 自 行 编 写 IAR Systems 尚 未 支 持 的 芯 片 驱 动 程 序 Flash Loader 框 架 程 序 实 现 了 所 有 Flash Loader 都 具 备 的 公 共 功 能, 包 含 从 调 试 器 读 取 二 进 制 映 象, 把 用 户 变 量 ( 选 件 ) 传 递 给 Flash Loader 的 机 制, 以 及 为 了 与 用 户 交 互 而 创 建 GUI 元 素 GUI 元 素 包 括 消 息 窗 口 消 息 记 录 和 进 度 条 等 缺 省 情 况 下, 进 度 条 由 Flash Loader 框 架 程 序 所 控 制 Flash Loader 必 须 遵 循 Flash<device>.dxx 的 命 名 约 定 例 如 假 设 某 器 件 名 叫 IAR X99, 则 它 的 Flash 30

Loader 应 命 名 为 FlashIarX99.dxx IAR 公 司 提 供 的 Flash Loader 源 代 码 位 于 下 列 目 录 : arm\src\flashloader\framework Flash Loader 框 架 程 序 源 代 码, 含 API 头 文 件 arm\src\flashloader\<vendor>\lash<device> 各 Flash Loader 驱 动 程 序 源 代 码, 含 工 程 文 件 IAR 公 司 提 供 的 可 执 行 的 Flash Loader 位 于 下 列 目 录 : arm\config\flashloader\<vendor>\lash<device>.dxx 对 应 于 各 驱 动 程 序 的 Flash Loader 可 执 行 文 件 arm\config\flashloader\<vendor>\lash<device>.mac 可 选 的 C-SPY 宏 文 件 如 果 宏 文 件 的 名 字 和 Flash Loader 可 执 行 文 件 相 同, 该 宏 文 件 将 先 于 同 名 Flash Loader 被 装 进 RAM 并 运 行 有 些 芯 片 需 要 对 一 些 I/O 寄 存 器 进 行 初 始 化 之 后 RAM 才 能 正 常 工 作, 这 时 此 项 功 能 就 很 有 用 4. 可 选 的 Flash Loader C-SPY 宏 文 件 在 将 Flash Loader 装 入 RAM 之 前 可 能 需 要 执 行 一 个 C-SPY 宏 来 设 置 目 标 系 统 例 如, 某 些 芯 片 在 复 位 后 RAM 还 不 能 正 常 工 作, 就 需 要 用 一 个 宏 来 初 始 化 必 要 的 寄 存 器, 以 便 让 RAM 正 常 工 作 在 将 Flash Loader 装 入 RAM 之 前 所 执 行 的 宏 应 满 足 以 下 规 定 : 宏 文 件 应 存 放 在 同 名 Flash Loader 的 目 录 下 ; 宏 文 件 的 扩 展 名 应 为 mac; 宏 文 件 名 应 与 其 关 联 的 Flash Loader 名 相 同 ; 宏 文 件 中 必 须 定 义 execuserflashinit() 宏 函 数 C-SPY 将 在 把 Flash Loader 装 进 RAM 之 前 调 用 该 宏 函 数 请 注 意 在 调 试 阶 段, 当 Flash Loader 作 为 一 个 应 用 程 序 运 行 时, 必 须 用 execuserpreload() 替 代 execuserflashinit() 必 要 的 话, 在 Flash Loader 运 行 结 束 之 后, 可 以 用 宏 函 数 execuserflashexit() 来 恢 复 目 标 系 统 的 初 始 设 置 31

5. 与 Flash Loader 框 架 程 序 的 接 口 Flash Loader 框 架 程 序 将 首 先 初 始 化 Flash Loader 驱 动 程 序 此 时, 驱 动 程 序 可 以 执 行 各 种 初 始 化 工 作, 但 至 少 要 向 框 架 程 序 注 册 它 的 写 函 数 在 初 始 化 之 后, 框 架 程 序 将 通 过 驱 动 程 序 的 写 函 数, 一 次 传 输 一 个 字 节 给 Flash Loader 根 据 所 用 的 Flash 算 法, 有 可 能 需 要 在 驱 动 程 序 中 缓 冲 多 个 字 节, 以 便 在 将 一 个 扇 区 写 入 Flash 存 储 器 之 前 填 满 整 个 扇 区 空 间 从 框 架 程 序 向 驱 动 程 序 的 最 后 一 次 写 操 作 将 被 视 为 清 空 请 求, 允 许 驱 动 程 序 清 空 扇 区 缓 冲 中 的 任 何 剩 余 数 据 如 果 Flash Loader 驱 动 程 序 没 有 缓 冲 任 何 数 据, 清 空 请 求 可 以 被 忽 略 驱 动 程 序 不 返 回 任 何 错 误 状 态 给 框 架 程 序 一 旦 驱 动 程 序 中 发 生 错 误, 驱 动 程 序 应 通 过 调 用 FlIMessageBox()API 函 数 向 用 户 报 告 错 误, 然 后 调 用 FlErrorExit() 函 数 退 出 Flash Loader 6.Flash Loader 驱 动 程 序 实 例 本 例 展 示 如 何 为 一 种 芯 片 编 写 Flash Loader 驱 动 程 序 为 简 单 起 见, 假 设 该 芯 片 中 有 一 块 很 容 易 编 程 的 Flash; 可 以 用 一 个 简 单 的 Flash 算 法, 在 一 次 操 作 中 将 一 个 字 节 写 入 Flash 存 储 器 本 例 还 展 示 了 如 何 读 取 用 户 指 定 的 选 件, 该 选 件 说 明 了 芯 片 运 行 的 时 钟 频 率 关 于 怎 样 实 现 一 个 带 扇 区 缓 冲 的 Flash Loader, 请 参 考 IAR Embedded Workbench 所 安 装 的 Flash Loader 驱 动 程 序 源 代 码 // Flash loader driver example. #include <stdio> #include <stdlib.h> 32

#include Interface.h // The flash loader framework API declaration. // The CPU clock speed, the default value 4000 khz is used if no clock // is found. static int clock = 4000; // Write one byte to flash at addr. // If byte == -1 the flash loader framework signals a flush operation // at the end of the input file. static void FlashWriteByte(unsigned long addr, int byte) { unsigned char* ptr = (usigned char*)addr; if (byte == -1) return; // Simple return when the flush operation is requested. // Insert device specific instructions here to enable write // access to the flash device. *ptr = byte; // Write data byte to flash. // If some error occurs when writing to flash, this can be // communicated to the user by using code like // if (ret!= STATUS_CMD_SUCCESS) // { // FlMessageBox( CMD_ERASE_SECTORS failed. ); // FlERrrorExit(); // } // A message box will be displayed by C-SPY and downloading // will terminate after the user has clicked the OK button. } void FlashDriverInitialize(int argc, char const* argv[]) { const char* str; // Register the flash write function. FlRegisterWriteFunction(FlashWriteByte); 33

// See if user has passed a clock speed option. // If not, the default CCLK value is used. str = FlFindOption( - clock, 1, argc, argv); if (str) { clock = strtoul(str, 0, 0); } } 7. 编 译 链 接 Flash Loader 1 拷 贝 一 个 现 有 的 Flash Loader, 例 如 arm\src\flashloader\philips\flashphilipslpc210x; 2 确 认 编 译 器 所 用 的 文 件 包 含 路 径 包 括 了 Flash Loader 框 架 程 序 目 录 arm\src\flashloader\framework 和 Flash Loader 驱 动 程 序 目 录 ; 3 修 改 FlashPhilipsLPC210x.c 和 FlashPhilpsLPC210x.h 这 两 个 文 件 的 名 称, 使 之 与 所 用 的 芯 片 相 符 合 ; 4 链 接 器 控 制 文 件 也 应 该 设 置 为 与 所 用 的 芯 片 相 符 合 拷 贝 FlashPhilipsLPC210x.xcl, 并 修 改 其 中 的 地 址 定 义 行 : DMEMSTART=40000000 DMEMEND=40003FDF 实 际 使 用 的 地 址 必 须 能 够 映 射 到 目 标 硬 件 上 请 注 意 Flash Loader 的 代 码 和 数 据 都 是 下 载 到 RAM 中 的, 这 就 是 为 什 么 ROM 段 和 RAM 段 都 映 射 到 同 一 段 存 储 空 间 栈 和 堆 都 应 该 保 持 在 最 小 框 架 程 序 大 约 需 要 300 字 节 的 栈 空 间 请 注 意 下 面 xcl 文 件 中 的 数 字 都 是 十 六 进 制 的 : D_CSTAK_SIZE=180 D_IRQ_STACK_SIZE=40 D_HEAP_SIZE=0 Flash Loader 框 架 程 序 将 使 用 堆 (heap) 和 RAMEND( 在 链 接 器 控 制 文 件 中 声 明 ) 之 间 的 内 存 作 为 读 缓 冲 区 这 就 保 证 了 读 缓 冲 区 能 够 利 用 所 有 剩 余 的 内 存 读 缓 冲 区 应 当 尽 可 能 的 大, 以 提 高 下 载 性 能 每 次 JTAG 传 输 的 数 据 字 节 越 多, 性 能 就 越 高 如 果 剩 余 的 读 缓 冲 区 少 于 256 字 节, 框 架 程 序 将 会 报 错, 因 为 少 于 256 字 节 将 严 重 影 响 性 能 在 编 译 链 接 Flash Loader 程 序 之 前, 链 接 选 项 With I/O emulation modules 必 须 被 打 开 得 到 的 输 出 文 件 将 以 dxx 为 文 件 扩 展 名 34

Flash Loader 已 经 可 以 用 于 把 应 用 程 序 下 载 到 Flash 在 Embedded Workbench 中, 打 开 应 用 程 序 工 程, 再 打 开 Debugger download option 对 话 框 使 能 Flash download 选 项, 并 选 择 Override default flash loader 选 项, 指 定 你 生 成 的 Flash Loader 输 出 文 件 任 何 需 要 传 递 给 Flash Loader 的 参 数 都 可 以 写 进 Flash Loader arguments 文 本 域 现 在 启 动 调 试 器, 就 可 以 用 你 自 己 的 Flash Loader 将 应 用 程 序 下 载 到 Flash 8. 调 试 Flash Loader 调 试 Flash Loader 的 方 法 和 调 试 普 通 的 应 用 程 序 一 样 需 要 指 出 的 是,Flash Loader 程 序 在 作 为 Flash Loader 被 装 入 调 试 器 时 是 不 能 调 试 的 只 有 当 Flash Loader 本 身 就 是 IAR Embedded Workbench 中 当 前 打 开 的 工 程 时, 它 才 能 被 调 试 在 Flash Loader 框 架 程 序 中 有 一 个 调 试 环 境 该 环 境 受 头 文 件 DriverConfig.h 中 定 义 的 C 预 处 理 器 宏 变 量 控 制, 而 DriverConfig.h 被 包 含 在 框 架 程 序 的 头 文 件 Congig.h 中 在 Congig.h 文 件 中, 你 可 以 看 到 哪 些 变 量 允 许 在 DriverConfig.h 中 被 覆 盖 在 调 试 器 中 以 一 个 独 立 的 应 用 程 序 运 行 Flash Loader 时 有 几 点 不 同 要 启 动 框 架 程 序 的 调 试 环 境, 必 须 设 置 调 试 宏 变 量 DEBUG 要 写 入 Flash 的 文 件 也 必 须 用 宏 变 量 DEBUG_FILE 显 式 说 明 在 独 立 调 试 时,argc/argv 参 数 传 递 机 制 是 不 工 作 的, 参 数 必 须 用 C 预 处 理 器 宏 变 量 DEBUG_ARGS 硬 性 编 码 9.Flash Loader 框 架 程 序 的 API 本 节 介 绍 Flash Loader 框 架 程 序 所 提 供 的 API 对 于 大 多 数 Flash Loader 来 说, 很 多 API 函 数 都 是 用 不 到 的, 把 它 们 罗 列 在 此 只 是 为 了 内 容 的 完 整 性 而 已 所 有 函 数 都 标 出 了 它 们 的 用 途 Mandatory 表 示 Flash Loader 驱 动 程 序 必 须 实 现 此 函 数 Optional 表 示 Flash Loader 驱 动 程 序 可 以 根 据 需 要 选 择 性 地 实 现 此 函 数 Framework 表 示 该 函 数 只 会 被 Flash Loader 框 架 程 序 调 用, 而 通 常 不 应 该 被 Flash Loader 驱 动 程 序 调 用 所 有 API 函 数 的 原 型 都 定 义 在 头 文 件 arm\src\flashloader\framework\interface.h 之 中 初 始 化 函 数 void FlashDriverInitialize (int argc, char const* argv); 用 途 :Mandatory 35

Flash Loader 驱 动 程 序 必 须 定 义 此 函 数 Flash Loader 框 架 程 序 用 它 来 初 始 化 Flash Loader 驱 动 程 序 argc 传 递 Flash 变 量 的 数 目 ;argv 传 递 Flash 变 量 Flash 变 量 允 许 通 过 C-SPY 的 Flash 选 项 对 话 框 将 参 数 传 递 给 Flash Loader 此 函 数 的 一 个 典 型 用 例 是 将 CPU 的 时 钟 速 率 传 递 给 Flash Loader 驱 动 程 序 void FlRegisteWriteFunction (WriteFunctionType write_func); 用 途 :Mandatory Flash Loader 驱 动 程 序 调 用 此 函 数 向 Flash Loader 框 架 程 序 注 册 写 函 数 变 量 write_func 是 指 向 写 函 数 的 指 针 Flash Loader 框 架 程 序 将 为 每 个 要 写 进 Flash 的 字 节 调 用 这 个 写 函 数, 并 将 字 节 和 要 写 的 地 址 作 为 参 数 传 递 地 址 的 顺 序 应 确 保 是 递 增 的, 但 不 一 定 连 续 ( 即 允 许 有 间 隙 ) Flash Loader 驱 动 程 序 必 须 从 FlashDriverInitialize() 中 调 用 此 函 数 typedef void (*WriteFunctionType) (unsigned long address, int byte); 此 类 型 声 明 定 义 了 写 函 数 的 函 数 指 针 类 型 该 写 函 数 必 须 在 Flash Loader 驱 动 程 序 中 定 义 unsigned long FlGetBaseAddress (); 这 是 一 个 可 选 函 数, 用 于 获 得 用 户 在 IDE 中 设 置 的 Flash 基 地 址 如 果 用 户 没 有 设 置 Flash 基 地 址, 该 函 数 返 回 0xffffffff 例 如,AMD 兼 容 的 Flash 器 件 在 进 行 编 程 和 擦 除 时 不 依 赖 于 任 何 控 制 寄 存 器, 而 是 对 以 Flash 基 地 址 为 基 准 的 多 个 偏 移 地 址 进 行 一 系 列 总 线 写 操 作 此 时 就 有 必 要 知 道 Flash 的 基 地 址, 以 便 执 行 可 能 的 Flash 地 址 重 映 射 变 量 传 递 函 数 const char* FlFindOption (char* option, int with_value, int argc, char const* argv[]); 用 途 :optional 此 函 数 用 于 在 变 量 数 组 argv 中 寻 找 指 定 的 选 件 with_value 参 数 说 明 了 该 函 数 是 用 于 检 argv 中 是 否 存 在 某 个 选 件, 或 者 是 否 需 要 返 回 该 选 件 的 值 该 选 件 的 值 是 在 argv 中 找 到 匹 配 变 量 后 的 下 一 个 变 量 如 果 要 检 查 一 个 flag 选 件, 例 如 --smallram, 赋 with_value 为 0 如 果 要 检 查 一 个 带 值 的 选 件, 例 如 -speed 14600, 则 赋 with_value 为 1 argc 参 数 是 argv 数 组 中 的 变 量 个 数,argv 参 数 是 字 符 串 指 针 数 组 当 调 用 此 函 数 时, 可 以 直 接 使 用 FlashDriverInitialize() 函 数 中 的 argc/argv 参 数 如 果 在 argv 中 没 有 找 到 指 定 的 选 件, 函 数 返 回 一 个 空 指 针 如 果 with_value 设 为 1, 函 数 返 回 指 向 匹 配 选 件 后 面 的 那 个 变 量 的 指 针 如 果 with_value 设 为 0, 函 数 返 回 指 向 匹 配 选 件 在 argv 中 入 口 的 指 针 int FlMakeArgs (char* args, char const* argv[]); 36

用 途 :framework 取 一 个 用 space/tab 分 隔 的 字 符 串, 并 生 成 一 个 argv 字 符 串 数 组, 每 个 数 组 元 素 对 应 于 一 个 选 件 argv 字 符 指 针 数 组 必 须 足 够 大, 以 便 容 纳 args 字 符 串 中 的 所 有 选 件 函 数 返 回 argv 数 组 中 的 字 符 串 数 目 ( 变 量 数 ) C-SPY 用 户 接 口 函 数 void FlMessageBox (char* msg); 用 途 :optional C-SPY 将 显 示 一 个 消 息 窗 口, 其 中 显 示 msg 参 数 给 出 的 文 本 消 息 字 符 串 中 的 文 本 可 以 用 换 行 符 (\n) 分 割 成 多 行 Flash Loader 将 停 止 执 行, 直 到 按 下 消 息 窗 口 中 的 OK 按 钮 为 止 void FlMesagaLog (char* msg); 用 途 :optional C-SPY 将 在 调 试 器 的 log 窗 口 显 示 一 个 由 msg 给 出 的 log 消 息 消 息 字 符 串 中 的 文 本 可 以 用 换 行 符 (\n) 分 割 成 多 行 void FlProgressBarCreate (char* title); 用 途 :optional C-SPY 将 生 成 一 个 进 度 条 窗 口 Title 参 数 字 符 串 显 示 在 进 度 条 窗 口 的 上 方 void FlProgressBarDestroy (); 用 途 :optional C-SPY 将 关 闭 进 度 条 窗 口 void FlProgressBarUpdate (int progress); 用 途 :optional C-SPY 将 更 新 进 度 条, 以 反 映 progess 参 数 的 值 progess 参 数 的 有 效 范 围 是 0 至 100 此 函 数 只 有 在 进 度 条 已 经 生 成 的 前 提 下 才 有 效 调 用 FlProgressBarValue() 的 次 数 应 尽 可 能 少 (<10), 目 的 是 为 了 减 少 JTAG 总 线 上 的 ( 慢 ) 传 输 次 数 void FlOverrideProgressBar (); 用 途 :optional 重 载 由 Flash Loader 框 架 程 序 实 现 的 缺 省 进 度 条 大 多 数 情 况 下,Flash Loader 驱 动 程 序 不 需 要 操 纵 进 度 条, 因 为 这 是 由 框 架 程 序 中 的 输 入 文 件 读 取 例 程 来 控 制 的 如 果 Flash Loader 驱 动 程 序 实 现 了 它 自 己 的 进 度 条, 就 必 须 调 用 此 函 数 来 禁 止 缺 省 的 进 度 条 37

void FlErrorExit (); 用 途 :optional 终 止 Flash Loader, 并 通 知 C-SPY 调 试 器 :Flash 下 载 已 经 失 败 文 件 函 数 int FlFileOpen (char* name); 用 途 :framework 此 函 数 打 开 一 个 文 件 用 于 二 进 制 读 如 果 打 开 成 功 返 回 一 个 文 件 句 柄 ; 如 果 打 开 失 败 返 回 -1 int FlFileReadByte (int fd); 用 途 :framework 从 与 文 件 句 柄 fd 相 关 联 的 已 打 开 文 件 中 读 取 一 个 字 节 该 函 数 返 回 读 到 的 字 节 ; 当 已 读 到 文 件 末 尾 时 返 回 -1 void FlFileClose (int fd); 用 途 :framework 关 闭 与 文 件 句 柄 fd 相 关 联 的 已 打 开 文 件 IAR EWARM 嵌 入 式 系 统 编 程 与 实 践 作 者 : 徐 爱 钧 首 本 以 IAR 开 发 工 具 为 主 题 的 参 考 书 IAR EWARM 嵌 入 式 系 统 编 程 与 实 践,06 年 2 月 27 日 由 北 航 出 版 社 正 式 出 版 发 行 本 书 以 IAR 公 司 4.30A 版 本 的 EWARM 为 核 心, 详 细 介 绍 了 IAR 嵌 入 式 C 编 译 器 和 集 成 开 发 环 境 的 使 用 方 法, 并 提 供 了 Philips Atmel ST 等 世 界 著 名 半 导 体 公 司 多 种 ARM 核 嵌 入 式 处 理 器 编 程 实 例 随 书 附 送 光 盘, 包 括 免 费 学 习 软 件 和 动 画 的 软 件 使 用 演 示, 以 及 ADS 项 目 移 植 指 南 等 丰 富 技 术 文 档, 全 国 各 地 主 要 新 华 书 店 柜 台 都 有 出 售 38