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