
作者 | strongerHuang
微信公眾號 | 嵌入式專欄
嵌入式專欄
創建互斥量
任務A占用資源 使用資源(發送數據) 任務A釋放資源
優先級高的任務B占用資源 使用資源 任務B釋放資源
依次,優先級任務占用資源 · · ·
代碼:
//創建互斥量資源SemaphoreHandle_t xSemaphore = NULL;xSemaphore = xSemaphoreCreateMutex();void TaskA(void *pvParameters){for(;;){//占用資源if(xSemaphoreTake(xSemaphore, 10 ) == pdTRUE){//使用資源(發送數據)USART_SendNByte();//釋放資源xSemaphoreGive(xSemaphore);}}}
嵌入式專欄
創建一個隊列(發送數據隊列) 創建一個任務(UART發送數據任務)
任務A加入隊列 任務B加入隊列 · · ·
另外一邊的任務,依次讀取隊列數據,使用UART發送出去。
代碼:
QueueHandle_t xQueue;xQueue = xQueueCreate(QUEUE_LENGTH, QUEUE_ITEM_SIZE);xTaskCreate(UART_Send_Task, "UART_Send", STACK_SIZE, NULL, TASK_PRIORITY, NULL);void TaskA(void *pvParameters){for(;;){//任務相關操作//加入隊列xQueueSend(xQueue, &TaskA_Buf, 10)}}void TaskB(void *pvParameters){for(;;){//任務相關操作//加入隊列xQueueSend(xQueue, &TaskB_Buf, 10)}}void UART_Send_Task(void *pvParameters){for(;;){//循環讀取隊列BUFif(xQueueReceive(xQueue, &Buf, 10) == pdTRUE){USART_SendNByte(&Buf);}}}
以上兩種方法比較常用,也比較簡單,希望對大家有幫助。
提示:代碼僅供學習理解原理,在項目中需要結合實際情況增、刪、修改代碼。
后臺回復『STM32』『FreeRTOS』『嵌入式軟件設計與開發』閱讀更多相關文章。

點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。