## IAR相关知识点



### 1.工程操作

#### 1.1各类型文件含义

##### 1.1.1工程核心文件

| 扩展名 |         名称         |                             作用                             |
| :----: | :------------------: | :----------------------------------------------------------: |
|  .ewp  |     IAR 工程文件     |      存储工程配置（编译器选项、链接器设置、包含路径等）      |
|  .ewt  | 嵌入式工作台模板文件 | 用于存储工程或文件的模板配置，方便快速创建具有相同设置的新项目。 |
|  .eww  |   IAR 工作空间文件   |     管理多个工程（.ewp）的集合，方便同时打开多个关联工程     |
|  .dep  |       依赖文件       | 自动生成，记录源文件的依赖关系（如头文件引用），用于增量编译 |

##### 1.1.2源代码文件

| 扩展名    |   名称    |                        作用                         |
| --------- | :-------: | :-------------------------------------------------: |
| .c        |  C源文件  |                     主程序代码                      |
| .cpp/.cxx | c++源文件 |                     c++程序代码                     |
| .h        |  头文件   |             函数声明、宏定义、类型声明              |
| .s/.asm   | 汇编文件  |              底层硬件操作或高性能代码               |
| .icf      | 链接脚本  | 控制内存分配（Flash/ROM、RAM 布局）关键硬件相关文件 |

##### 1.1.3编译输出文件

| 扩展名 |       名称       |                            作用                             |
| ------ | :--------------: | :---------------------------------------------------------: |
| .out   | ELF 格式输出文件 |         包含调试信息的可执行文件（用于下载和调试）          |
| .hex   |  Intel HEX 文件  |                烧录到芯片的标准十六进制格式                 |
| .bin   |    二进制镜像    |     裸机烧录文件（无地址信息，需配合烧录工具指定地址）      |
| .map   |   内存映射文件   | 详细展示代码/数据在内存中的分布（分析栈溢出、内存占用必看） |
| .lst   |     列表文件     |            汇编与源码混合视图（用于优化和调试）             |

##### 1.1.4调试相关文件

| 扩展名   |       名称       |                    作用                    |
| -------- | :--------------: | :----------------------------------------: |
| .cspybat | C-SPY 批处理文件 | 自动化调试脚本（初始化寄存器、批量设断点） |
| .ddf     |   设备描述文件   |    定义芯片寄存器（用于调试器外设视图）    |
| .board   |  开发板描述文件  |      配置板级硬件（时钟、引脚复用等）      |
| .mac     |    调试宏文件    |   扩展调试器功能（如自定义内存填充检测）   |

##### 1.1.5配置与中间文件

| 扩展名          |     名称     |                 作用                 |
| --------------- | :----------: | :----------------------------------: |
| .custom_argvars | 环境变量配置 | 存储用户自定义环境变量（如编译路径） |
| .settings       | IDE 设置文件 |  保存编辑器偏好（字体、颜色方案等）  |
| .o/.obj         |   目标文件   |  单个源文件的编译结果（链接时合并）  |
| .d              | 依赖信息文件 |       Makefile 使用的依赖规则        |

##### 1.1.6特殊工具文件

| 扩展名 |       名称       |                   作用                   |
| ------ | :--------------: | :--------------------------------------: |
| .xcl   | XLINK 链接器配置 |    高级链接控制（段重命名、优化选项）    |
| .i     |  预处理输出文件  | 展开宏和头文件后的源码（排查宏错误必备） |
| .sbr   |   浏览信息文件   |       用于代码导航（函数调用关系）       |

#### 1.2新建/打开工作区

软件左上角File菜单内点击New workspace即可创建新的工作区，如需要打开选择Open即可。

![tupian](./Pictures/image-20250708131909282.png)



#### 1.3新建/打开工程

工作区新建/打开完成后，选择上方的Project，选择Create New project选择创建类型并命名和存档后完成新建工程。

打开工程选择Add。

![tupian](./Pictures/image-20250708131945592.png)

#### 1.4工作区中导入/添加工程

选择上方的Project，点击Add Existing Project，便可以添加项目。

![1](.\Pictures\image-20250708132254972.png)

#### 1.5新建分组

右键项目名称，选择Add Group，新建分组

![1](.\Pictures\image-20250708132546212.png)

#### 1.6新建/打开文件

右键项目名称，选择Add File，新建文件。

![1](.\Pictures\image-20250708133238110.png)

#### 1.7工程目录与文件目录的关系

工程目录是文件目录的容器，通过相对路径引用文件目录中的资源。

工程目录主要负责项目配置和构建控制，而文件目录则是源代码的物理存储位置。两者通过工程文件中的引用关系连接起来，形成完整的开发环境结构。

### 2.工程配置

#### 2.1设备配置

右键工程文件，选择Options，进入工程配置，选择需要的单片机设备型号。

![1](.\Pictures\image-20250708135420393.png)

### 3.编译配置

#### 3.1优化等级

右键Options，选择C/C++ --> Optimizations ，进行优化等级配置。

![1](./Pictures/image-20250709180547755.png)

#### 3.2硬件浮点

General Options 界面，选择32bit或64bit，选择fpu功能是否开启。

![1](.\Pictures\image-20250708140541188.png)

#### 3.3预处理

右键Options，选择C/C++ --> Preprocessor ,Defined symbols进行预处理。

![1](./Pictures/image-20250709180618391.png)

#### 3.4链接文件

Linker页面设置链接文件。

![1](.\Pictures\image-20250708142245783.png)

#### 3.5文件路径位置

在Option页面C/C++设置文件路径位置，包括头文件位置。

![1](.\Pictures\image-20250708142455122.png)

#### 3.6输出文件配置

选择Output页面，然后设置输出文件位置。

![1](.\Pictures\image-20250708142616060.png)

#### 3.7输出文件路径

打开Option，选择General，选择output进行配置。

![1](.\Pictures\image-20250708142932221.png)

### 4.调试器配置

打开Option，选择Debug进行配置

![1](.\Pictures\image-20250708143112548.png)

### 5.库相关配置

设置库文件相关位置，同时在程序内include头文件，使用库。

![1](./Pictures/image-20250710142954145.png)

### 6.静态库的封装和调用

新建项目，同时设置.h和.c文件，进行内部程序的编写。注意减少外部依赖，能够直接移植调用。写完之后点击option进行设置，选择General，OutPut选择library，然后make编译生成.lib文件，使用时复制.lib文件到项目内，并在option内进行配置，然后选择Linker -- > Library，将静态库.lib文件添加，返回工程重新编译。

<img src=".\Pictures\image-20250708144035699.png" alt="image-20250708144035699" style="zoom:50%;" />

<img src="./Pictures/image-20250709181230566.png" alt="image-20250709181230566" style="zoom:50%;" />

### 7.工程调试

#### 7.1断点

##### 7.1.1设置断点

左侧标红设置断点

<img src=".\Pictures\image-20250708150820220.png" alt="image-20250708150820220" style="zoom:50%;" />

##### 7.1.2禁用断点

鼠标右键点击，disable breakpoints。

<img src=".\Pictures\image-20250708151057158.png" alt="image-20250708151057158" style="zoom:50%;" />

##### 7.1.3启用断点

鼠标右键点击，disable breakpoints。

##### 7.1.4取消断点

鼠标左键点击断点即可取消。

##### 7.1.5条件断点

鼠标右键想要断点处，选择Edit Breakpoint，将条件写入即可。

<img src=".\Pictures\image-20250708152500923.png" alt="image-20250708152500923" style="zoom:50%;" />

### 8.监控信息

选择view，找到watch，找到想要监视的信息，将其拖到watch窗口即可。

<img src=".\Pictures\image-20250708152756370.png" alt="image-20250708152756370" style="zoom:50%;" />

### 9.寄存器信息

打开view的registers窗口即可查看寄存器信息。

<img src=".\Pictures\image-20250708152951214.png" alt="image-20250708152951214" style="zoom:50%;" />

### 10.内存信息

打开view的memory窗口即可查看寄存器信息

![image-20250708153108132](.\Pictures\image-20250708153108132.png)

### 11.栈信息

打开view的stack窗口即可查看栈信息

<img src=".\Pictures\image-20250708153204889.png" alt="image-20250708153204889" style="zoom:50%;" />

### 12.汇编信息

打开view的disassembly窗口可以查看汇编信息

<img src=".\Pictures\image-20250708153257586.png" alt="image-20250708153257586" style="zoom:50%;" />

### 13.调用堆栈信息

打开view的call Stack窗口可以查看堆栈信息

<img src=".\Pictures\image-20250708153531949.png" alt="image-20250708153531949" style="zoom:50%;" />

### 14.单步调试

#### 14.1逐过程调试

菜单栏Step over。

<img src=".\Pictures\image-20250708153851629.png" alt="image-20250708153851629" style="zoom:50%;" />

#### 14.2逐语句调试

菜单栏Step into。

#### 14.3 复位

菜单栏Restart。

#### 14.4跳出

菜单栏step out。