簡體   English   中英

STM32 FreeRTOS - 具有相同優先級的任務串行運行

[英]STM32 FreeRTOS - Tasks with same priority running serial

我開始使用 FreeRTOS。 在我的第一次測試中,我發現了一些我不清楚的地方。

創建了 4 個具有相同優先級 (osPriorityNormal) 的任務。 所有 4 個任務都具有相同的代碼:

void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN 5 */

    uint8_t DebugString[50];
    uint32_t ui32_SysTimer;

/* Infinite loop */
for(;;)
{
      ui32_SysTimer = xTaskGetTickCount();
      snprintf(DebugString, 30, "%10lu : DefaultTask\n", ui32_SysTimer);
      HAL_UART_Transmit(&huart2, DebugString, strlen(DebugString), 1000);
      vTaskDelay(500);
}
/* USER CODE END 5 */
}

查看串行監視器上的 output 數據,我期待看到幾乎並行調用所有 4 個任務。 由於 500ms 不應阻塞處理流程。 但是它們是串聯運行的!

相同的優先級

改變優先級比我看到的預期行為。

不同的優先級

為什么他們在使用相同的優先級時不並行啟動? vTaskDelay() 是否適合為任務再次運行提供這個最短時間?

謝謝你。

看來問題出在控制台的 output 中。 HAL_UART_Transmit function 處於忙碌狀態並丟失一些數據。 這就是串行時序的原因。

一種可能的解決方案是將數據存儲在緩沖區中,並在專門的任務中僅將其打印到控制台一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM