第1章 IAR Embedded Workbench基础知识 1
1.1 IAR Embedded Workbench嵌入式集成开发环境简介 1
1.2 IAR Embedded Workbench的菜单及工具栏 3
1.2.1 菜单栏 4
1.2.2 工具栏 13
1.2.3 状态栏 14
第2章 IAR Embedded Workbench快速入门 15
2.1 项目的创建 15
2.1.1 建立一个项目文件目录 15
2.1.2 生成新工作区 15
2.1.3 生成新项目 16
2.1.4 给项目添加文件 17
2.1.5 配置项目选项 18
2.2 编译和链接应用程序 20
2.2.1 编译和链接 20
2.2.2 查看MAP文件 21
2.3 用C-SPY下载和调试应用程序 22
2.3.1 配置Debugger选项 22
2.3.2 下载应用程序 22
2.3.3 源代码级调试 24
2.3.4 查看变量 24
2.3.5 设置和监视断点 26
2.3.6 在反汇编窗口上进行调试 27
2.3.7 监视寄存器 27
2.3.8 查看存储器 27
2.3.9 观察Terminal I/O 28
2.3.10 执行和暂停程序 29
第3章 项目管理 30
3.1 项目组织模型 30
3.2 项目创建与管理 32
3.2.1 工作区及其内容的创建和管理 33
3.2.2 拖拽操作 35
3.2.3 源文件路径 36
3.3 项目文件导航 36
3.3.1 查看工作区 36
3.3.2 显示源代码浏览信息 37
3.4 使用库模块 39
第4章 IAR Embedded Workbench项目参数配置 43
4.1 General Options——基本选项配置 43
4.1.1 Target选项卡 43
4.1.2 Target选项卡(适用于IAR for AVR) 46
4.1.3 Target选项卡(适用于IAR for MSP430) 48
4.1.4 Output选项卡 50
4.1.5 Library Configuration选项卡 51
4.1.6 Library Options选项卡 52
4.1.7 Heap Configuration选项卡 53
4.1.8 Stack/Heap选项卡 53
4.1.9 System选项卡 54
4.1.10 MISRA C选项卡 55
4.2 C/C++编译器配置 55
4.2.1 Language选项卡 56
4.2.2 Code选项卡(适用于IAR for AVR) 58
4.2.3 Code选项卡(适用于IAR for MSP430) 59
4.2.4 Optimizations选项卡 60
4.2.5 Output选项卡 61
4.2.6 List选项卡 63
4.2.7 Preprocessor选项卡 63
4.2.8 Diagnostics选项卡 65
4.2.9 MISRA C选项卡 66
4.2.10 Extra Options选项卡 67
4.3 汇编器配置 67
4.3.1 Language选项卡 67
4.3.2 Output选项卡 69
4.3.3 List选项卡 69
4.3.4 Preprocessor选项卡 70
4.3.5 Diagnostics选项卡 72
4.3.6 Extra Options选项卡 72
4.4 自定义创建配置 73
4.5 项目生成配置 74
4.6 链接器配置 75
4.6.1 Output选项卡 75
4.6.2 Extra Output选项卡 78
4.6.3 #define选项卡 78
4.6.4 Diagnostics选项卡 79
4.6.5 List选项卡 81
4.6.6 Config选项卡 82
4.6.7 Processing选项卡 86
4.6.8 Extra Options选项卡 90
4.7 库生成器配置 90
4.8 调试器配置 91
4.8.1 Setup选项卡 91
4.8.2 Download选项卡 93
4.8.3 Extra Options选项卡 94
4.8.4 Plugins选项卡 94
4.9 IAR J-Link驱动配置 95
4.9.1 Setup选项卡 96
4.9.2 Connection选项卡 97
4.9.3 Breakpoints选项卡 98
第5章 存储方式与段定位 103
5.1 数据存储方式 103
5.1.1 存储空间 103
5.1.2 栈与自动变量 104
5.1.3 堆中的动态存储分配 105
5.2 代码与数据的定位 106
5.2.1 段的定义 106
5.2.2 段的作用 106
5.2.3 段存储类型 106
5.2.4 段在存储器中的定位 108
5.2.5 数据段 110
5.2.6 代码段 114
5.2.7 C++动态初始化 115
5.2.8 变量与函数在存储器中的定位 115
第6章 IAR C-SPY宏系统 119
6.1 C-SPY宏系统 119
6.1.1 宏语言 120
6.1.2 宏函数 125
6.1.3 宏文件 134
6.2 使用C-SPY宏 136
6.2.1 使用设置宏函数和设置文件来注册、运行宏 136
6.2.2 使用Macro Configuration对话框注册宏文件 138
6.2.3 使用Quick Watch界面运行宏函数 138
6.2.4 将宏函数与断点相连以执行宏函数 139
6.3 使用C-SPY模拟器进行中断仿真 141
6.3.1 C-SPY中断仿真系统 141
6.3.2 中断仿真系统的使用 143
6.4 中断仿真实例 147
6.4.1 添加中断句柄 147
6.4.2 设置仿真环境 148
6.4.3 运行仿真中断 151
6.4.4 使用系统宏定义中断和设置断点 152
第7章 IAR Embedded Workbench的工作机制与应用 153
7.1 系统的初始化过程 154
7.2 微处理器的启动与重映射 156
7.2.1 映射的概念 156
7.2.2 存储器映射与存储器重映射 156
7.2.3 微控制的片内存储器 156
7.2.4 ARM处理器的Boot技术 157
7.2.5 与映射和重映射相关的实例 159
7.3 重映射的意义与实现过程 163
7.3.1 软件断点与硬件断点 164
7.3.2 重映射的作用与实现举例 165
7.4 程序入口与启动代码 175
7.4.1 程序入口的概念 175
7.4.2 程序入口的实例分析 175
7.4.3 系统的启动代码 186
7.4.4 在IAR中设置程序的入口 188
7.5 ARM处理器启动代码的深入研究 190
7.5.1 需要IAR运行库支持的纯C语言启动代码 190
7.5.2 不需要IAR运行库支持的纯C语言启动代码 197
7.5.3 纯C语言启动代码的适用情况 204
7.5.4 使用纯C语言气动代码的注意事项 205
7.6 全局变量运行时定位的实例分析 208
7.6.1 变量的简单分类 208
7.6.2 变量定位至RAM的时间 208
7.6.3 变量在只读存储器中的存储方式 209
7.6.4 全局变量的运行时定位分析 210
7.6.5 全局变量的运行时定位过程分析 213
7.7 在RAM中运行的函数 216
7.7.1 RAM函数 216
7.7.2 RAM函数的实现 216
7.8 RAM调试与实现机制 227
7.8.1 MAC文件的概念 227
7.8.2 RAM调试的基础知识 227
7.8.3 RAM调试的工作机制 228
7.9 Flash Loader与Flash调试 237
7.9.1 Flash Loader概述 237
7.9.2 可选的Flash Loader C-SPY宏文件 238
7.9.3 与Flash Loader框架程序的接口 238
7.9.4 Flash Loader驱动程序实例 239
7.9.5 创建Flash Loader的过程举例 240
7.9.6 调试Flash Loader 241
7.9.7 将应用程序下载至Flash中 242
7.9.8 Flash Debug的流程及实例分析 243
7.10 应用程序的完整性校验 258
7.10.1 设置链接器产生checksum 258
7.10.2 在用户代码中加入校验和计算函数 261
7.11 Flash Loader的使用 263
7.11.1 设置Flash Loader 264
7.11.2 Flash装载机制 264
7.11.3 生成程序时需要考虑的事情 264
7.11.4 Flash Loader Overview对话框 265
7.11.5 Flash Loader配置对话框 266
7.12 使用IAR EW直接下载二进制文件到目标Flash存储器 267
7.13 将MSP430系列单片机的片内Flash拟作EEPROM 273
7.13.1 MSP430系列单片机的内部存储器组织 273
7.13.2 Flash的擦除 274
7.13.3 演示程序分析 275
7.13.4 修改和使用XCL文件 279
第8章 IAR EWARM版本迁移 281
8.1 版本迁移概述 281
8.1.1 EWARM版本4.xx与5.xx的区别 281
8.1.2 迁移工作 281
8.2 链接器和链接器的配置 282
8.2.1 EWARM 4.xx的链接器XLINK及其配置文件 282
8.2.2 XLINK选项 282
8.2.3 XCL文件举例 284
8.2.4 EWARM 5.xx的链接器ILINK及其配置文件 286
8.2.5 ICF格式概述 286
8.2.6 ICF文件举例 290
8.2.7 图形化工具ICF Editor的使用 292
8.3 有关版本迁移的其他信息 292
第9章 C与汇编的混合编程 294
9.1 AVR单片机C语言与汇编语言的混合编程 294
9.1.1 在C语言函数和汇编语言函数间传递变量 295
9.1.2 C代码调用汇编函数 296
9.1.3 汇编代码调用C函数 297
9.1.4 使用汇编语言编写中断程序 298
9.1.5 汇编代码访问全局变量 299
9.2 MSF430单片机C语言与汇编语言的混合编程 300
9.2.1 调用内部函数 300
9.2.2 直接嵌入 300
9.2.3 调用汇编模块 300
9.2.4 新的函数调用协议 302
9.2.5 实例分析 303
第10章 程序分析与性能优化 308
10.1 应用程序分析 308
10.1.1 函数级刨析 308
10.1.2 代码覆盖 310
10.2 调整IAR Embedded Workbench以获取最佳性能 312
10.2.1 优化设置——代码容量与速度 312
10.2.2 存储模型选择 313
10.2.3 运行库设置 314
10.2.4 数据类型选择 315
10.2.5 目标处理器专有设置 315
10.3 为嵌入式应用编写高效率代码 315
10.3.1 合理利用编译系统 316
10.3.2 选择数据类型以及数据在存储器中的定位 319
10.3.3 编写高效代码 322
第11章 基于CAN协议的Boot Loader 327
11.1 硬件电路设计 328
11.1.1 电源电路 328
11.1.2 CAN收发器电路 328
11.1.3 单片机电路 330
11.2 软件设计概述 330
11.2.1 Boot Loader运行环境 332
11.2.2 Boot Loader实现 335
11.3 存储空间定义 337
11.3.1 Flash存储空间 338
11.3.2 EEPROM数据存储区 338
11.3.3 签名存储区 339
11.3.4 Boot Loader信息存储区 339
11.3.5 Boot Loader配置存储区 340
11.3.6 设备寄存器 343
11.4 CAN协议和ISP命令 343
11.4.1 CAN协议 343
11.4.2 CAN ISP命令数据流协议 345
11.5 API应用程序编程接口 351
11.5.1 API的定义 351
11.5.2 使用API 351
11.5.3 API的使用限制 351
11.5.4 API细节介绍 351
11.5.5 API入口点 352
11.5.6 IAR环境中的API调用示例 352
11.5.7 使用其他C编译器的API调用 352
11.6 使用Flip软件与CAN结点通信 355
第12章 基于AVR单片机的数码录放模块 356
12.1 系统工作原理 356
12.1.1 语音采样的理论依据 356
12.1.2 数据存储和读取 357
12.1.3 PWM声音回放 358
12.2 硬件电路设计 359
12.2.1 微控制器和存储器电路 360
12.2.2 麦克风和扬声器电路 361
12.3 软件设计 362
12.3.1 初始化设置 362
12.3.2 主循环 362
12.3.3 擦除 364
12.3.4 录音 366
12.3.5 存储 368
12.3.6 回放 370
12.4 调试和优化 372
第13章 基于STR912的USB声卡 374
13.1 硬件设计 374
13.1.1 处理器概述 374
13.1.2 电源电路 374
13.1.3 JTAG及复位电路 376
13.1.4 液晶显示电路 376
13.1.5 USB接口电路 377
13.1.6 微控制器电路 378
13.1.7 音频接口电路 378
13.2 软件设计 380
13.2.1 启动程序 380
13.2.2 驱动程序 390
13.2.3 应用程序 396
13.3 调试和使用 402
13.3.1 硬件电路的调试 402
13.3.2 软件部分的调试 402
附录A 为MSP430系列单片机编写高质量代码 410
附录B 为AVR系列单片机编写高质量代码 412
附录C 编译指南 414
附录D 选择合适的微控制器 416
参考文献 422