diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/IAR/IAR.md b/IAR/IAR.md index 60da620..69d9427 100644 --- a/IAR/IAR.md +++ b/IAR/IAR.md @@ -117,24 +117,78 @@ ![1](./Pictures/image-20250709180547755.png) +1. **None (-O0)** + - **特点**:不进行优化,编译速度最快。 + - **应用场景**:调试阶段,便于跟踪源代码与机器码的对应关系。 + - **缺点**:生成的代码体积大、执行慢。 +2. **Low (-O1)** + - **特点**:基本优化,主要减少代码大小。 + - 优化内容: + - 消除未使用的变量和函数。 + - 简化常量表达式(如计算 `2+3` 为 `5`)。 + - 执行基本的循环优化(如循环展开小迭代次数的循环)。 + - **应用场景**:需要平衡代码大小和编译时间的场景。 +3. **Medium (-O2)** + - **特点**:中度优化,兼顾代码大小和执行速度。 + - 优化内容: + - 执行更激进的循环优化(如循环不变代码外提)。 + - 函数内联(对小函数)。 + - 寄存器分配优化。 + - **应用场景**:大多数生产环境的默认选择。 +4. **High (-O3)** + - **特点**:最高级优化,侧重执行速度。 + - 优化内容: + - 激进的函数内联(包括较大的函数)。 + - 循环展开和向量化(适用于 DSP 等架构)。 + - 全局变量和内存访问优化。 + - **缺点**:可能增加代码体积,编译时间显著延长。 + - **应用场景**:对性能要求极高的代码(如算法核心、中断处理)。 + + + #### 3.2硬件浮点 General Options 界面,选择32bit或64bit,选择fpu功能是否开启。 ![1](.\Pictures\image-20250708140541188.png) +硬件浮点单元通过专用电路加速浮点数运算,显著提升了嵌入式系统的计算能力、能效比和开发效率。对于需要处理复杂算法、高精度数据或实时响应的应用,FPU 几乎是必备组件。 + #### 3.3预处理 右键Options,选择C/C++ --> Preprocessor ,Defined symbols进行预处理。 ![1](./Pictures/image-20250709180618391.png) +- 硬件资源的抽象映射(如寄存器地址)。 +- 代码的灵活配置与优化。 +- 跨平台兼容性支持。 +- 调试与生产版本的快速切换。 + #### 3.4链接文件 Linker页面设置链接文件。 ![1](.\Pictures\image-20250708142245783.png) +作用: + +- 定义物理内存布局(如 Flash、RAM 的起始地址和大小)。 +- 指定代码段(.text)、数据段(.data)、BSS 段(.bss)等如何分配到物理内存。 +- 控制栈(Stack)和堆(Heap)的大小与位置。 +- 支持复杂的内存分区(如将关键代码放在特定 Flash 区域)。 +- .stack:栈区域,用于局部变量和函数调用。 +- .heap:堆区域,用于动态内存分配(如`malloc()`)。 + +**关键段说明**: + +- **.intvec**:中断向量表,包含系统启动和中断处理函数的地址,必须位于 Flash 起始位置(0x08000000)。 +- **.text**:程序代码段,包含编译后的指令。 +- **.data**:已初始化的全局变量和静态变量(如 `int a = 10;`)。 +- **.bss**:未初始化的全局变量和静态变量(如 `int b;`),不占用 Flash 空间,运行时自动初始化为 0。 +- **.stack**:栈区域,由编译器自动管理,用于存储局部变量和函数调用上下文。 +- **.heap**:堆区域,用于动态内存分配(如 `malloc()`、`free()`)。 + #### 3.5文件路径位置 在Option页面C/C++设置文件路径位置,包括头文件位置。 @@ -147,6 +201,12 @@ Linker页面设置链接文件。 ![1](.\Pictures\image-20250708142616060.png) +1. .hex文件:十六进制文件。 +2. .bin文件:二进制文件。 +3. .txt文件:文本格式文件。 +4. .srec文件:SREC(也称为 S-Record、S-File)是一种 ASCII 文本格式,将二进制数据编码为可读字符串,便于在不同系统间传输和存储。 +5. .sim:通常指用于仿真(Simulation)的配置文件或结果文件。 + #### 3.7输出文件路径 打开Option,选择General,选择output进行配置。 @@ -159,6 +219,35 @@ Linker页面设置链接文件。 ![1](.\Pictures\image-20250708143112548.png) +| 选项 | 功能描述 | +| ---------------------------------------- | ------------------------------------------------------------ | +| **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 系列 | + ### 5.库相关配置 设置库文件相关位置,同时在程序内include头文件,使用库。 @@ -173,6 +262,12 @@ Linker页面设置链接文件。 ![1](./Pictures/image-20250710142954145.png) +CMSIS提供 Cortex-M 处理器内核的底层访问接口,包括: + +- 寄存器定义(如 NVIC、SCB、SysTick)。 +- 中断处理函数接口。 +- 系统时钟配置函数。 + ### 6.静态库的封装和调用 新建项目,同时设置.h和.c文件,进行内部程序的编写。注意减少外部依赖,能够直接移植调用。写完之后点击option进行设置,选择General,OutPut选择library,然后make编译生成.lib文件,使用时复制.lib文件到项目内,并在option内进行配置,然后选择Linker -- > Library,将静态库.lib文件添加,返回工程重新编译。 @@ -217,6 +312,18 @@ Linker页面设置链接文件。 image-20250708152756370 +| 类型 | 特点 | 适用场景 | 更新方式 | | | +| --------------------------- | --------------------------------------------------------- | ------------------------ | -------------- | ---- | ---- | +| **Watch Window** | 手动添加、持续跟踪 | 长期监视关键变量 | 自动(暂停时) | | | +| **Quick Watch** | 临时查看、即时计算 | 快速验证单个变量 | 手动触发 | | | +| **Auto Watch** | 自动跟踪当前上下文 | 快速了解局部变量状态 | 自动(执行时) | | | +| **Memory Watch** | 直接访问内存地址 | 调试内存相关问题 | 自动(暂停时) | | | +| **Register Watch** | 监控硬件寄存器 | 底层硬件调试 | 自动(执行时) | | | +| **断点条件 Watch** | 条件触发与监视结合 | 捕获特定状态 | 条件满足时 | | | +| **Live Watch** | 允许在程序运行过程中实时跟踪变量值,而无需暂停 CPU 执行。 | 实时系统调试 | 自动 | | | +| **Local Watch(局部监视)** | 主要用于跟踪程序中**局部变量**的变化 | 查看局部函数内的局部变量 | 自动 | | | +| | | | | | | + ### 9.寄存器信息 打开view的registers窗口即可查看寄存器信息。 @@ -233,6 +340,8 @@ CPSR和SPSR都是程序状态寄存器,其中SPSR是用来保存中断前的CP ![image-20250708153108132](.\Pictures\image-20250708153108132.png) +想要查看变量信息,可以通过添加取址符号&进行查看。 + ### 11.栈信息 打开view的stack窗口即可查看栈信息 @@ -251,6 +360,25 @@ CPSR和SPSR都是程序状态寄存器,其中SPSR是用来保存中断前的CP image-20250708153531949 +**堆栈的解释:**是内存中的一块连续区域,遵循 **后进先出(LIFO)** 原则。 + +- 核心作用: + + - 保存函数调用时的上下文(如返回地址、寄存器值)。 + + - 存储局部变量和函数参数。 + + - 支持中断处理和异常响应。 + + | **特性** | **堆栈(Stack)** | **堆(Heap)** | + | -------------- | -------------------------- | --------------------------------- | + | **管理方式** | 由 CPU 自动管理(SP 指针) | 由程序员手动分配(如 `malloc()`) | + | **分配效率** | 快(直接移动 SP) | 慢(需动态查找空闲内存块) | + | **空间大小** | 固定(由链接脚本指定) | 动态(受限于剩余内存) | + | **数据生存期** | 与函数调用周期绑定 | 由程序员控制(`free()`) | + | **生长方向** | 通常向下(低地址) | 向上(高地址) | + | **内存碎片** | 不存在 | 可能产生(多次分配 / 释放) | + ### 14.单步调试 #### 14.1逐过程调试 @@ -259,6 +387,26 @@ CPSR和SPSR都是程序状态寄存器,其中SPSR是用来保存中断前的CP image-20250708153851629 +调试图标介绍(从左到右) + +| **序号** |**作用**| +| :--------: |:--------: | +| 1 | 编译当前页 | +| 2 | 编译全部文件 | +| 3 | 切换断点 | +| 4 | 编译并重新启动调试 | +| 5 | 重新开始调试 | +| 6 | 推出调试 | +| 7 | 逐语句 | +| 8 | 逐过程 | +| 9 | 跳出 | +| 10 | 运行到下一个结尾符号 | +| 11 | 运行到光标处 | +| 12 | 全速运行 | +| 13 | 停止运行 | +| 14 | 重新运行 | +| 15 | | + #### 14.2逐语句调试 菜单栏Step into。 diff --git a/MarkDown/MarkDown.md b/MarkDown/MarkDown.md index 6818400..6c1a4d8 100644 --- a/MarkDown/MarkDown.md +++ b/MarkDown/MarkDown.md @@ -85,9 +85,9 @@ ___下划线 #### 3.4删除线 -前后加两个~ ~ ~ ~ +前后加两个~~ ~~~什么~~ -~~比如这样~~ +~~比如这样~~ ~~也可以只在前面加,但是会删除整行 diff --git a/Source Insight/Pictures/image-20250715110850248.png b/Source Insight/Pictures/image-20250715110850248.png new file mode 100644 index 0000000..7aacb7b Binary files /dev/null and b/Source Insight/Pictures/image-20250715110850248.png differ diff --git a/Source Insight/Source Insight.md b/Source Insight/Source Insight.md index dd7826f..9bf0339 100644 --- a/Source Insight/Source Insight.md +++ b/Source Insight/Source Insight.md @@ -1,3 +1,5 @@ + + ## Source Insight相关知识点 @@ -32,7 +34,7 @@ image-20250708160619344 -选择windows,选择Arrange,选择多视图排版,可以进行使徒的切换。 +选择windows,选择Arrange,选择多视图排版,可以进行视图的切换。 image-20250710161708689 @@ -56,6 +58,15 @@ 在VIew菜单进行想要的窗口打开或关闭即可。 +##### + +| 窗口 | 名称 | 作用 | +| :-----------------: | :------------: | :----------------------------------------------------------: | +| **Relation Window** | **关系窗口** | **函数调用关系**, **变量引用关系**,**继承与实现关系** | +| **Context Window** | **上下文窗口** | **代码结构可视化**,**实时跟踪光标位置**,**快速导航** | +| **Project Window** | **项目窗口** | **文件与目录管理**,**符号索引**,**快速搜索与跳转** | +| **Window List** | **窗口列表** | **显示所有打开的窗口**,**快速切换窗口**,**窗口分组与排序** | + image-20250708160639717 #### 1.6搜索引用 @@ -64,4 +75,36 @@ 上方选择search也可以进行搜索引用。 -image-20250708160654871 \ No newline at end of file +image-20250708160654871 + +Options各个选项作用 + +| 名称 | 作用 | +| ------------------------ | ------------------------------------------------------------ | +| case Sensitive | 区分大小写 | +| whole Words Only | 确控制搜索范围的选项,确保搜索结果仅包含完整的单词,而非单词的一部分 | +| Skip inactive Code | 用于处理由条件编译(如 `#ifdef`、`#ifndef`)或其他逻辑控制导致的未激活代码区域 | +| Skip Comments | 让搜索操作忽略代码中的注释内容 | +| Search Only Comment | 仅搜索注释内容 | +| Smart Reference Marching | 用于识别和匹配代码中的符号引用(如变量、函数、类型等),而非简单的文本匹配 | + +Serach Method(搜索方法) + +| 名称 | 作用 | +| ------------------ | ------------------------------------------------------------ | +| simple string | 一种基本的搜索模式,用于执行直接的文本匹配 | +| regular Expression | 允许使用特殊字符和元字符来定义复杂的文本匹配规则 | +| Keyword Expression | 是一种介于简单字符串和正则表达式之间的搜索模式,它允许使用预定义的关键字符号来构建更灵活的搜索规则 | +| look up Reference | 用于快速定位代码中符号(如变量、函数、类型等)的定义和所有引用位置 | + +查找的选项功能表 + +![image-20250715110850248](./Pictures/image-20250715110850248.png) + +| 名称 | 作用 | +| ----------------------- | ------------------------------------------------------------ | +| case Sensitive | 区分大小写 | +| use regular Exprossions | **Use Regular Expressions**(使用正则表达式)是搜索功能的高级模式,允许通过特殊字符和元字符定义复杂的匹配规则 | +| warp Around | 循环查找 | +| select when found | 会高亮查找的文本 | +| whole words only | 启用该选项后,工具只会查找与搜索词完全一致的**完整单词**,而不会匹配包含该词的更长单词 | \ No newline at end of file diff --git a/UintTest/Pictures/image-20250714094111503.png b/UintTest/Pictures/image-20250714094111503.png new file mode 100644 index 0000000..f1aef8f Binary files /dev/null and b/UintTest/Pictures/image-20250714094111503.png differ diff --git a/UintTest/Pictures/企业微信截图_17522164518089.png b/UintTest/Pictures/企业微信截图_17522164518089.png new file mode 100644 index 0000000..3a7e762 Binary files /dev/null and b/UintTest/Pictures/企业微信截图_17522164518089.png differ diff --git a/UintTest/Pictures/企业微信截图_17524732096026.png b/UintTest/Pictures/企业微信截图_17524732096026.png new file mode 100644 index 0000000..3072e47 Binary files /dev/null and b/UintTest/Pictures/企业微信截图_17524732096026.png differ diff --git a/UintTest/UnitTest.md b/UintTest/UnitTest.md index 6bb2487..33d1954 100644 --- a/UintTest/UnitTest.md +++ b/UintTest/UnitTest.md @@ -34,7 +34,7 @@ 想要查看代码覆盖度可以使用第三方工具,例如Goole Test。 -image-20250709124618237 +![image-20250714094111503](./Pictures/image-20250714094111503.png) #### 2.3运行性能