如何使用cubemx 配置freertos,實時查看FreeRTOS任務列表和運行狀態


---------------------------------------------------------------------------------------------------------------------------

cubemx版本:version_4.20

stm32型號:stm32f103rct6

---------------------------------------------------------------------------------------------------------------------------

關鍵點:

  在FreeRTOSConfig.h文件中使能如下宏:
(1)*       #define configUSE_TRACE_FACILITY                    1
(2)*       #define configGENERATE_RUN_TIME_STATS               1
(3)*       #define configUSE_STATS_FORMATTING_FUNCTIONS        1
(4)*       #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()    (ulHighFrequencyTimerTicks = 0ul)
(5)*       #define portGET_RUN_TIME_COUNTER_VALUE()            ulHighFrequencyTimerTicks
(6) 然后開啟一個定時器5,作為計算任務信息的時鍾。

--------------------------------------------------------------------------------------------------------------------------

關鍵點中:

這五個宏定義,第一個是自動生成的,第二個在cube里勾選某個選項后也是自動生成的。
第三個是自己手動添加的。
第四個和第五個,配置GENERATE_RUN_TIME_STATS后會自動生成。生成的是這樣的:


#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS configureTimerForRunTimeStats
#define portGET_RUN_TIME_COUNTER_VALUE getRunTimeCounterValue
而后邊的其實是對應着各自的__weak前飾的函數。在函數體里加入了對應的語句:

__weak void configureTimerForRunTimeStats(void)
{
        ulHighFrequencyTimerTicks = 0ul;
}
__weak unsigned long getRunTimeCounterValue(void)
{
        return ulHighFrequencyTimerTicks;
//        return 0;
}

 

除此之外,又用TIM5作為基本定時器,定時值位10us,開啟定時器5,在其回調函數里:

void TIM5_IRQHandler(void)
{
  /* USER CODE BEGIN TIM5_IRQn 0 */

  /* USER CODE END TIM5_IRQn 0 */
  HAL_TIM_IRQHandler(&htim5);
  /* USER CODE BEGIN TIM5_IRQn 1 */

   ulHighFrequencyTimerTicks++;

  /* USER CODE END TIM5_IRQn 1 */
}

 ---------------------------------------------------------------------------------------------------------------------

 執行效果如下:

 

---------------------------------------------------------------------------------------------------------------------

需要注意的地方:

(1)cubemx 4.20這個版本的有個bug:

stm32cubemx生成的main文件里面的void SystemClock_Config(void)函數里面的這部分代碼

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; 

出現了這個bug,會生成下面這樣的代碼,,會導致程序執行不下去。

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE;

用前者,替代掉后者即可。

(2)另外,執行打印任務列表和運行狀態的任務的堆棧需要大於256bype,否者可能會造成程序分配空間失敗,

導致程序卡死。

 

(3)記得在主循環里面開啟定時器TIM5

HAL_TIM_Base_Start_IT(&htim5);

---------------------------------------------------------------------------------------------------------------------------

源碼已上傳到github:源碼地址

---------------------------------------------------------------------------------------------------------------------------

參考blog:

http://www.ing10bbs.com/forum.php?mod=viewthread&tid=498

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM