[英]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.