在RTOS多任务编程的时候,同一个串口(硬件)被多个任务访问的情况比较多,如果不合理处理,就会导致“混乱”的局面。
处理“混乱”局面的方法比较多,下面基于FreeRTOS,以UART为例讲讲常见的互斥、队列这两种方法。
互斥访问
互斥量:是一个可以处于两态之一的变量:解锁和加锁。 原理:创建一个互斥量,任务A在需要占用资源(使用UART发送数据),把资源(UART)占用。此时,任务B及其他任务就不能占用该资源。当任务A使用完资源(UART发送完数据),释放资源,其他任务就可以抢占该资源。创建互斥量 任务A占用资源使用资源(发送数据)任务A释放资源 优先级高的任务B占用资源使用资源任务B释放资源 依次,优先级任务占用资源···
代码:
//创建互斥量资源
SemaphoreHandle_t xSemaphore = NULL;
xSemaphore = xSemaphoreCreateMutex();
void TaskA(void *pvParameters)
{
for(;;)
{
//占用资源
if(xSemaphoreTake(xSemaphore, 10 ) == pdTRUE)
{
//使用资源(发送数据)
USART_SendNByte();
//释放资源
xSemaphoreGive(xSemaphore);
}
}
}
信号量与互斥量区别:信号量:多个任务同步使用某个资源;一个任务完成某个动作后通过信号告诉别的任务,别的任务才可以执行某些动作;
互斥量:多任务互斥使用某个资源;一个任务占用某个资源,那么别的任务就无法访问,直到该任务离开,其他任务才可以访问该资源;
队列操作
队列操作方法就是FIFO,先入先出的原理。比如:任务A要使用UART发送一串数据,将其加入队列;接着任务B也要使用UART发送一串数据。 那么,任务A将这串数据加入队列,接着任务B又将要发送的一串数据加入队列。 在另外一个UART发送的任务中,从队列中按照FIFO方式读取队列里面的数据,依次发送出去即可。创建一个队列(发送数据队列)创建一个任务(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(;;)
{
//循环读取队列BUF
if(xQueueReceive(xQueue, &Buf, 10) == pdTRUE)
{
USART_SendNByte(&Buf);
}
}
}
以上两种方法比较常用,也比较简单,希望对大家有帮助。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
串口
+关注
关注
14文章
1483浏览量
74511 -
uart
+关注
关注
22文章
1159浏览量
99959 -
RTOS
+关注
关注
20文章
776浏览量
118795
原文标题:RTOS共享串口常见处理方法
文章出处:【微信号:玩点嵌入式,微信公众号:玩点嵌入式】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
典型的支持多核处理器的RTOS功能解析
对多核处理器的支持,是一种常见的对RTOS的扩展,不需要对现行的RTOS做太大修改,只需要增加一个相对独立的扩展库,就可以实现对于多核处理器
发表于 06-29 08:30
将RTX迁移到CMSIS-RTOS
CMSIS-RTOS API是基于Cortex-M处理器的设备的通用RTOS接口。
CMSIS-RTOS为需要RTOS功能的软件组件提供了标
发表于 09-04 06:37
CC2640R2F开发之:UART串口收发&TI-RTOS任务创建(二)
对于蓝牙的数据传输来说UART串口起到至关重要的作用,本篇将介绍CC2640R2F的UART串口使用方法,结合TI-RTOS操作系统与RingBuf机制完成
发表于 11-30 10:21
•10次下载
评论