
作者 | 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』『嵌入式软件设计与开发』阅读更多相关文章。

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。