add tutorial for GDB debug process

This commit is contained in:
NeoZeng 2022-11-17 12:27:41 +08:00
parent 1a13992391
commit 613939fe23
2 changed files with 14 additions and 0 deletions

View File

@ -108,6 +108,10 @@ C语言代码由固定的词汇关键字按照固定的格式语法
> 在CubeMX初始化的时候Project mananger标签页下有一个Linker Setting的选项这里是设置最小堆内存和栈内存的地方。如果你的程序里写了大规模的数组或使用`malloc()`等分配了大量的空间可能出现栈溢出或堆挤占栈空间的情况。需要根据MCU的资源大小设置合适的stack size和heap size。
RTOS创建任务的时候也会为每个任务分配一定的栈空间它会替代MCU的硬件裸机进行内存的分配。可以在CubeMX中设置。如果一个任务里定义了大量的变量可能导致实时系统运行异常请增大栈空间。
> 开发板C型使用F407IG芯片片上RAM的大小为1MB。
### C language标准和编译器
不同的C语言标准一般以年份作代号支持的语法特性和关键字不同拥有的功能也不同。一般来说语言标准都是向前兼容的在更新之后仍然会保存前代的基本功能支持legacy support。不过为了程序能够正常运行我们还需要一些硬件或平台支持的组件。比如`malloc()`这个函数在linux平台和windows平台上的具体实现就相去甚远跟单片机更是差了不止一点。前两者一般和对应的操作系统有关后者在裸机上则是直接通过硬件或ST公司提供的硬件抽象层代码实现。
@ -132,6 +136,16 @@ ITM是instrument trace macrocell指令追踪宏单元的缩写它用于提供
以上三个模块都需要通过TPIUtrace port interface unit和外部调试器j-link等进行连接TPIU会将三个模块发来的数据进行封装并通过DWT记录时间发送给上位机。
### GDB调试MCU原理
![image-20221117121323757](assets/image-20221117121323757.png)
不论使用MDKKEIL还是VSCode还是Ozone实际上背后的流程相同。首先GDB会建立TCP/IP端口并提供接口调试服务器Server作为硬件调试器和GDB软件的桥梁将硬件调试器的相关功能也就是DBG外设支持的那些功能映射到GDB的接口上通过连接到GDB建立的端口。之后启动调试将可执行文件下载到目标MCU上然后从main开始执行
> 当然你也可以选择从其他启动点开始执行,调试器开始执行的位置叫做**entry point**。同样在MCU已经正在运行程序的时候可以**attach**到程序上开始监控attach=附加,贴上;很形象了)。
> 而对于直接运行在电脑上的程序(.exe就不需要GDBserver和物理调试器GDB程序可以直接访问电脑上运行的程序和CPU的寄存器等。
## 环境配置
- ***所有需要编辑的配置文件都已经在basic_framework的仓库中提供如果不会写照猫画虎。***

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB