SystemView+FreeRTOS 移植过程


前言

RTOS的分析是比较困难的,特别是任务多且涉及很多任务通信的时候,程序的稳定性就是一个比较麻烦的问题了,不过好在有很多工具可以用来分析RTOS的运行状况,常见的有SystemView、Tracealyzer,TIRTOS的分析工具ROV(运行时对象查看器)则集成在CCS中。下面以Segger的SystemView为例,如何在FreeRTOS上移植和使用SystemView。

准备工作

移植过程

这里暂不描述从零开始打补丁的过程,而是直接使用官方提供的打好补丁的FreeRTOS源码和RTT源码。

  • 只要把example project这两个文件夹移植到自己的板子工程上就完成一半了。把..\FreeRTOS_STM32F4_TRB_SystemView\lib\FreeRTOS\FreeRTOS-Kernel\Source\portable中不必要的文件删除,只保留对应平台的port.cportmacro.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/


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM