通过串口实现SystemView分析FreeRTOS v10.3.1
准备文件
我的STM32项目是经由STM32CubeMX
v6.2.0生成的Makefile
项目;使用VS-Code-STM32-IDE来生成VS
Code项目;使用v10.3.1的FreeRTOS系统;芯片为STM32F407VE
;使用USART1作为输出端口,开启DMA传输。
下载SystemView
v3.30版本。在安装目录内的SystemView_V330\Src
文件夹中,将SEGGER
和Sample
内的相关文件复制到STM32项目的文件夹STM32_Project\Middlewares\Third_Party\SystemView
中12。注意根据项目的需求,选择复制Sample
中对应的系统和SEGGER\Syscalls
中对应的编译器:
1 | SystemView |
注意:SEGGER_RTT_ASM_ARMv7M.S
需要改名为SEGGER_RTT_ASM_ARMv7M.s
,不然后面编译时会出现No rule to make target
错误。
FreeRTOS补丁
SystemView提供了针对FreeRTOS
v10.0.0版本的补丁FreeRTOSV10_Core.patch
,但不适合新的版本。这里我们提供了针对FreeRTOS
v10.3.1版本的补丁。复制下面内容,并且保存名为patch
的文件,并且放到STM32_Project\Middlewares\Third_Party
,内含FreeRTOS
的文件夹下:
1 | diff -rupwN FreeRTOS/Source/include/FreeRTOS.h FreeRTOS_systemview/Source/include/FreeRTOS.h |
在命令行窗口中输入打补丁指令:
1 | patch -p0 < patch |
监听程序
在STM32_Project\Inc\FreeRTOSConfig.h
下添加以下语句:
1 | /* USER CODE BEGIN Defines */ |
新建文件STM32_Project\Modules\include\systemview_task.h
和STM32_Project\Modules\src\systemview_task.c
3:
1 | #ifndef __SYSTEMVIEW_TASK_H |
1 | #include "systemview_task.h" |
修改STM32_Project\Src\main.c
函数:
1 | ... |
修改STM32_Project\.vscode\c_cpp_properties.json
,添加:
1 | ... |
编译并且烧录到单片机中。
SystemView
打开SystemView
软件,打开Target->Recorder Configuration
,选择UART
并且填好相应的串口和波特率。
点击Start Recording
,重启单片机,成功监控FreeRTOS: