扩展名 | 名称 | 作用 |
---|---|---|
.ewp | IAR 工程文件 | 存储工程配置(编译器选项、链接器设置、包含路径等) |
.ewt | 嵌入式工作台模板文件 | 用于存储工程或文件的模板配置,方便快速创建具有相同设置的新项目。 |
.eww | IAR 工作空间文件 | 管理多个工程(.ewp)的集合,方便同时打开多个关联工程 |
.dep | 依赖文件 | 自动生成,记录源文件的依赖关系(如头文件引用),用于增量编译 |
扩展名 | 名称 | 作用 |
---|---|---|
.c | C源文件 | 主程序代码 |
.cpp/.cxx | c++源文件 | c++程序代码 |
.h | 头文件 | 函数声明、宏定义、类型声明 |
.s/.asm | 汇编文件 | 底层硬件操作或高性能代码 |
.icf | 链接脚本 | 控制内存分配(Flash/ROM、RAM 布局)关键硬件相关文件 |
扩展名 | 名称 | 作用 |
---|---|---|
.out | ELF 格式输出文件 | 包含调试信息的可执行文件(用于下载和调试) |
.hex | Intel HEX 文件 | 烧录到芯片的标准十六进制格式 |
.bin | 二进制镜像 | 裸机烧录文件(无地址信息,需配合烧录工具指定地址) |
.map | 内存映射文件 | 详细展示代码/数据在内存中的分布(分析栈溢出、内存占用必看) |
.lst | 列表文件 | 汇编与源码混合视图(用于优化和调试) |
扩展名 | 名称 | 作用 |
---|---|---|
.cspybat | C-SPY 批处理文件 | 自动化调试脚本(初始化寄存器、批量设断点) |
.ddf | 设备描述文件 | 定义芯片寄存器(用于调试器外设视图) |
.board | 开发板描述文件 | 配置板级硬件(时钟、引脚复用等) |
.mac | 调试宏文件 | 扩展调试器功能(如自定义内存填充检测) |
扩展名 | 名称 | 作用 |
---|---|---|
.custom_argvars | 环境变量配置 | 存储用户自定义环境变量(如编译路径) |
.settings | IDE 设置文件 | 保存编辑器偏好(字体、颜色方案等) |
.o/.obj | 目标文件 | 单个源文件的编译结果(链接时合并) |
.d | 依赖信息文件 | Makefile 使用的依赖规则 |
扩展名 | 名称 | 作用 |
---|---|---|
.xcl | XLINK 链接器配置 | 高级链接控制(段重命名、优化选项) |
.i | 预处理输出文件 | 展开宏和头文件后的源码(排查宏错误必备) |
.sbr | 浏览信息文件 | 用于代码导航(函数调用关系) |
软件左上角File菜单内点击New workspace即可创建新的工作区,如需要打开选择Open即可。
工作区新建/打开完成后,选择上方的Project,选择Create New project选择创建类型并命名和存档后完成新建工程。
打开工程选择Add。
选择上方的Project,点击Add Existing Project,便可以添加项目。
右键项目名称,选择Add Group,新建分组
右键项目名称,选择Add File,新建文件。
工程目录是文件目录的容器,通过相对路径引用文件目录中的资源。
工程目录主要负责项目配置和构建控制,而文件目录则是源代码的物理存储位置。两者通过工程文件中的引用关系连接起来,形成完整的开发环境结构。
右键工程文件,选择Options,进入工程配置,选择需要的单片机设备型号。
右键Options,选择C/C++ --> Optimizations ,进行优化等级配置。
2+3
为 5
)。General Options 界面,选择32bit或64bit,选择fpu功能是否开启。
硬件浮点单元通过专用电路加速浮点数运算,显著提升了嵌入式系统的计算能力、能效比和开发效率。对于需要处理复杂算法、高精度数据或实时响应的应用,FPU 几乎是必备组件。
右键Options,选择C/C++ --> Preprocessor ,Defined symbols进行预处理。
Linker页面设置链接文件。
作用:
malloc()
)。关键段说明:
int a = 10;
)。int b;
),不占用 Flash 空间,运行时自动初始化为 0。malloc()
、free()
)。在Option页面C/C++设置文件路径位置,包括头文件位置。
选择Output页面,然后设置输出文件位置。
打开Option,选择General,选择output进行配置。
打开Option,选择Debug进行配置
选项 | 功能描述 |
---|---|
Core Reset | 是指针对微控制器(MCU)内核(如 ARM Cortex-M 系列)的复位操作,软件触发:通过写入特定寄存器触发 |
System(default) Reset | 上电复位 |
Software Reset | 通过写入 SCB_AIRCR 寄存器触发软件系统复位(SYSRESETREQ)。 |
Hardware Reset | 通过控制 NRST 引脚触发硬件复位。 |
Connect During Reset(复位期间连接) | 允许调试器在目标设备复位期间建立并保持连接 |
操作 | 功能描述 | 适用场景 |
---|---|---|
Debug Download | 下载程序并启动调试会话 | 开发阶段调试代码 |
Production Download | 仅下载程序,不启动调试(如 Flash 编程) | 生产环境烧录固件 |
Run to main() | 下载后自动运行到 main() 函数入口 |
跳过冗长的启动代码 |
Load Symbol File | 仅加载符号表(不下载程序) | 附加到已运行的程序 |
jlink:提供了高效的硬件调试、Flash 编程和性能分析功能。
stlink:ST-Link 是意法半导体(STMicroelectronics)为其 STM32 系列微控制器开发的官方调试工具,用于程序下载、调试和系统开发。它集成了 JTAG/SWD 接口和 USB 通信功能
ijet:iJet 是德国 Lauterbach 公司开发的高性能调试工具,专为复杂嵌入式系统设计,尤其适用于对调试深度、实时性和性能要求极高的场景
工具 | 优势 | 劣势 |
---|---|---|
iJet | 超高性能追踪、多处理器支持、全系统可见性 | 价格昂贵,适用于高端场景 |
J-Link | 功能全面、性价比高 | 追踪能力较 iJet 有限 |
ST-Link | 低成本、官方支持 | 仅支持 STM32 系列 |
设置库文件相关位置,同时在程序内include头文件,使用库。
选项 | 功能描述 |
---|---|
none | 不链接任何标准库,适合资源受限的环境。 |
normal | 链接标准 C 库的常规版本,平衡了代码大小和运行速度。 |
full | 链接标准 C 库的完整版本,包含所有功能和调试信息,适合调试阶段。 |
custom | 允许用户自定义库配置,可选择性地包含或排除某些库功能,用于优化代码大小。 |
libc++ | 链接 C++ 标准库,适用于 C++ 开发。 |
CMSIS提供 Cortex-M 处理器内核的底层访问接口,包括:
新建项目,同时设置.h和.c文件,进行内部程序的编写。注意减少外部依赖,能够直接移植调用。写完之后点击option进行设置,选择General,OutPut选择library,然后make编译生成.lib文件,使用时复制.lib文件到项目内,并在option内进行配置,然后选择Linker -- > Library,将静态库.lib文件添加,返回工程重新编译。
左侧标红设置断点
鼠标右键点击,disable breakpoints。
鼠标右键点击,disable breakpoints。
鼠标左键点击断点即可取消。
鼠标右键想要断点处,选择Edit Breakpoint,将条件写入即可。
选择view,找到watch,找到想要监视的信息,将其拖到watch窗口即可。
类型 | 特点 | 适用场景 | 更新方式 | ||
---|---|---|---|---|---|
Watch Window | 手动添加、持续跟踪 | 长期监视关键变量 | 自动(暂停时) | ||
Quick Watch | 临时查看、即时计算 | 快速验证单个变量 | 手动触发 | ||
Auto Watch | 自动跟踪当前上下文 | 快速了解局部变量状态 | 自动(执行时) | ||
Memory Watch | 直接访问内存地址 | 调试内存相关问题 | 自动(暂停时) | ||
Register Watch | 监控硬件寄存器 | 底层硬件调试 | 自动(执行时) | ||
断点条件 Watch | 条件触发与监视结合 | 捕获特定状态 | 条件满足时 | ||
Live Watch | 允许在程序运行过程中实时跟踪变量值,而无需暂停 CPU 执行。 | 实时系统调试 | 自动 | ||
Local Watch(局部监视) | 主要用于跟踪程序中局部变量的变化 | 查看局部函数内的局部变量 | 自动 | ||
打开view的registers窗口即可查看寄存器信息。
r0~r3 主要用于子程序间传递参数, r4~r11 主要用于保存局部变量,但在 Thumb 程序中,通常只能使用 r4~r7 来保存局部变量; r12 用作子程序间scratch 寄存器,即 ip 寄存器; r13 通常用做栈指针,即 sp; r14 寄存器又被称为连接寄存器(lr),用于保存子程序以及中断的返回地址; r15 用作程序计数器(pc),由于 ARM 采用了流水线机制,当正确读取了 PC 的值后,该值为当前指令地址加 8 个字节,即 PC 指向当前指令的下两条指令地址。
CPSR和SPSR都是程序状态寄存器,其中SPSR是用来保存中断前的CPSR中的值,以便在中断返回之后恢复处理器程序状态。s
打开view的memory窗口即可查看寄存器信息
想要查看变量信息,可以通过添加取址符号&进行查看。
打开view的stack窗口即可查看栈信息
打开view的disassembly窗口可以查看汇编信息
打开view的call Stack窗口可以查看堆栈信息
**堆栈的解释:**是内存中的一块连续区域,遵循 后进先出(LIFO) 原则。
核心作用:
保存函数调用时的上下文(如返回地址、寄存器值)。
存储局部变量和函数参数。
支持中断处理和异常响应。
特性 | 堆栈(Stack) | 堆(Heap) |
---|---|---|
管理方式 | 由 CPU 自动管理(SP 指针) | 由程序员手动分配(如 malloc() ) |
分配效率 | 快(直接移动 SP) | 慢(需动态查找空闲内存块) |
空间大小 | 固定(由链接脚本指定) | 动态(受限于剩余内存) |
数据生存期 | 与函数调用周期绑定 | 由程序员控制(free() ) |
生长方向 | 通常向下(低地址) | 向上(高地址) |
内存碎片 | 不存在 | 可能产生(多次分配 / 释放) |
菜单栏Step over。
调试图标介绍(从左到右)
序号 | 作用 |
---|---|
1 | 编译当前页 |
2 | 编译全部文件 |
3 | 切换断点 |
4 | 编译并重新启动调试 |
5 | 重新开始调试 |
6 | 推出调试 |
7 | 逐语句 |
8 | 逐过程 |
9 | 跳出 |
10 | 运行到下一个结尾符号 |
11 | 运行到光标处 |
12 | 全速运行 |
13 | 停止运行 |
14 | 重新运行 |
15 |
菜单栏Step into。
菜单栏Restart。
菜单栏step out。