SystemView+FreeRTOS的使用
作者:互联网
前言
RTOS的分析是比较困难的,特别是任务多且涉及很多任务通信的时候,程序的稳定性就是一个比较麻烦的问题了,不过好在有很多工具可以用来分析RTOS的运行状况,常见的有SystemView、Tracealyzer,TIRTOS的分析工具ROV(运行时对象查看器)则集成在CCS中。下面以Segger的SystemView为例,如何在FreeRTOS上移植和使用SystemView。
准备工作
- 准备一个jlink
- SystemView的PC端下载(官网下载比较慢,这里用硬汉嵌入式论坛的镜像) http://www.armbbs.cn/forum.php?mod=viewthread&tid=97090&highlight=Systemview
- 下载官方的Example Projects,https://wiki.segger.com/FreeRTOS_with_SystemView ,也可以参考文档从零开始移植,给FreeRTOS打补丁,在添加一些钩子函数。这步骤比较繁琐还是用官方的例程比较简单粗暴,直接下载对应的example project。
- 从零开始移植的话需要一些与RTT相关的库文件 https://www.segger.com/downloads/systemview 如果直接使用上面的 example project 里面的库文件就不需要下载这个
移植过程
这里暂不描述从零开始打补丁的过程,而是直接使用官方提供的打好补丁的FreeRTOS源码和RTT源码。
- 只要把example project这两个文件夹移植到自己的板子工程上就完成一半了。把..\FreeRTOS_STM32F4_TRB_SystemView\lib\FreeRTOS\FreeRTOS-Kernel\Source\portable中不必要的文件删除,只保留对应平台的port.c和portmacro.h,以及MemMang这个文件夹中选择的堆管理文件,这里使用heap4.c。注意不要忘了要把 FreeRTOSConfig.h 也移植到工程中
- 这些步骤完成后添加相应的文件和文件路径到工程中
到这一步工作已经完成80%了 - 添加相应的钩子函数,直接复制Example Project中main.c中实现的函数
vApplicationMallocFailedHook
vApplicationStackOverflowHook
vApplicationIdleHook
vMainConfigureTimerForRunTimeStats
ulMainGetRunTimeCounterValue
vApplicationTickHook
vApplicationGetIdleTaskMemory
vApplicationGetTimerTaskMemory
把这几个函数也复制到main.c中就基本完成了 - 在进入任务调度之前需要对RTT进行初始化,调用SEGGER_SYSVIEW_Conf()。
- 编写一个简单的任务测试
void Led1Task()
{
while(1)
{
BspLedToggle(LED1);
vTaskDelay(100);
}
}
- 编译后通过jink连接下载程序到板子上面,打开安装好的SystemView,点击Start Record 开始记录任务的运行情况。
总结
systemview使用后面再说
参考文档
https://wiki.segger.com/FreeRTOS_with_SystemView
https://blog.csdn.net/qq_29486527/article/details/88010893
https://dalegi.com/2020/01/15/setup-guide-for-segger-j-link-and-systemview-with-stm32-nucleo-boards/
标签:FreeRTOS,segger,SystemView,https,使用,com,移植 来源: https://www.cnblogs.com/neriq/p/14728938.html