0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何让RTOS多任务访问同一个UART?

strongerHuang ? 来源:strongerHuang ? 作者:strongerHuang ? 2021-03-12 17:18 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

RTOS多任务编程的时候,同一个硬件(比如UARTI2C等)被多个任务访问的情况比较多,如果不合理处理,就会导致“混乱”的局面。 处理“混乱”局面的方法比较多,下面基于FreeRTOS,以UART为例讲讲常见的互斥、队列这两种方法。

1

互斥访问方法互斥量:是一个可以处于两态之一的变量:解锁和加锁。 原理:创建一个互斥量,任务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); } }} 信号量与互斥量区别:信号量:多个任务同步使用某个资源; 一个任务完成某个动作后通过信号告诉别的任务,别的任务才可以执行某些动作; 互斥量:多任务互斥使用某个资源; 一个任务占用某个资源,那么别的任务就无法访问,直到该任务离开,其他任务才可以访问该资源;

2

队列操作方法队列操作方法就是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); } }}

以上两种方法比较常用,也比较简单,希望对大家有帮助。

提示:代码仅供学习理解原理,在项目中需要结合实际情况增、删、修改代码。

原文标题:RTOS多任务访问同一个UART的方法

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3690

    浏览量

    95414
  • RTOS
    +关注

    关注

    24

    文章

    851

    浏览量

    121357

原文标题:RTOS多任务访问同一个UART的方法

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式和单片机,是同一个东西吗?

    的程序控制各种外部设备,完成特定的操作。 总结来说,单片机是嵌入式系统中的种重要硬件组件,而嵌入式系统则是更为广泛的概念,它包含了单片机在内的所有软硬件组件,旨在实现特定任务的控
    发表于 07-09 10:20

    快速入门——LuatOS:sys库多任务管理实战攻略!

    的开发者,这里将用最简明的步骤,助你轻松实现多任务应用开发! sys库是LuatOS的核心系统调度库,它基于Lua协程机制实现了实时多任务调度、定时器管理以及消息通信等功能。 在详细介绍sys库之前,我们先来补充些关于实时操作
    的头像 发表于 05-29 14:36 ?287次阅读
    快速入门——LuatOS:sys库<b class='flag-5'>多任务</b>管理实战攻略!

    请问如何在同一个FX3上实现两GPIF接口?

    我们按照 AN75779 应用说明在 FX3 上成功实现了自定义图像传感器接口。 现在我们想添加另一个 GPIF 接口,这将允许同一个 FX3 设备从 FPGA 接收数据并发送到 USB 主机,但不
    发表于 05-13 06:35

    启用了同一个摄像头的3vicap通道和3venc通道遇到的疑问求解

    我启用了同一个摄像头的3vicap通道和3venc通道 他们一一进行了系统绑定 CSI2 -- vicap0 -- venc0 h264编码 网络推流使用 CSI2 -- vicap1
    发表于 04-28 06:16

    stm32同一个定时器不同的通道,可以不同时的输出pwm波形吗?

    请问,stm32的同一个定时器,不同的通道,可以不同时的输出pwm波形吗?比如tim1的ch1输出,延时几毫秒后tim1的ch2输出。 现在是要输出两相位不同的pwm波形,延时时间、频率、占空比
    发表于 03-07 08:20

    RTOS中的本地存储指针使用

    本地存储指针是RTOS中的重要特性,增强了任务管理和数据处理能力。在RTOS上下文中,本地存储是指存储在本地的特定
    的头像 发表于 02-28 16:33 ?952次阅读
    <b class='flag-5'>RTOS</b>中的本地存储指针使用

    使用任务通知提高RTOS应用的效率

    在实时嵌入式系统中,性能和资源效率是决定设计成败的关键因素。传统的实时操作系统(RTOS)提供了如队列、信号量和事件组机制,实现任务之间的同步和通信。FreeRTOS/SAFERTOS还提供种方法可以使这些过程更快、更轻量化,
    的头像 发表于 12-27 14:54 ?746次阅读

    同一个I2C总线,能带多少片相同的ADS1115芯片?

    请问:同一个I2C总线,能带多少片相同的ADS1115芯片,谢谢了!!!那个地址没看明白!!怎么操作??
    发表于 12-27 06:45

    请问ULN2003同一个芯片不同输出端能接不同的上拉电平吗?

    ULN2003同一个芯片不同输出端能接不同的上拉电平吗?
    发表于 12-16 06:29

    AFE4420的tx通道和pd通道是必须使用同一个芯片上的吗?

    你好,想请问下4420的tx通道和pd通道是必须使用同一个芯片上的吗?可不可以使用片子的tx通道控制led,另一个片子的pd通道进行
    发表于 11-28 07:30

    LV和组态王上位机软件在同一电脑通过网线读写同一个PLC失败

    问题:LV和组态王上位机软件在同一电脑通过同一个网卡、同一根网线和IP读写同一个PLC失败 PLC型号:西门子S7-200 smart 现状:非标设备自带组态王上位机软件,因整条产线有
    发表于 10-18 08:26

    大家好,请教恒流源芯片并联使用接同一个LED的问题

    大家好,请教个问题,如果三路同款恒流源芯片都设定为1A的输出电流,三路并联,然后接同一个LED,那流过LED的实际电流是多少呢每路恒流源芯片的实际输出电流是多少呢假设是理想情况下。 如果两路同款
    发表于 10-12 09:39

    运放的带宽与运放的单位增益带宽是同一个概念吗?

    运放的带宽与运放的单位增益带宽是同一个概念吗?
    发表于 09-04 06:18

    freertos和rtos区别是什么

    RTOS 的主要特点是实时性、多任务处理、资源管理、中断处理等。 FreeRTOS 是开源的实时操作系统,由英
    的头像 发表于 09-02 14:18 ?3188次阅读

    简单认识RTOS实时操作系统

    RTOS(Real Time Operating System,实时操作系统)是种专门设计用于在严格时间限制内处理任务的操作系统。它以其高实时性、多任务处理能力和资源管理能力在工业自
    的头像 发表于 08-20 11:20 ?5450次阅读