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

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

    关注

    90

    文章

    3724

    浏览量

    97466
  • RTOS
    +关注

    关注

    25

    文章

    871

    浏览量

    123244

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    尾纤和尾缆是同一个产品吗

    尾纤和尾缆不是同一个产品,二者在结构、功能、应用场景及连接方式上存在显著差异。以下从四维度展开详细对比分析: 1. 结构组成:单芯 vs. 多芯+护套 尾纤(Pigtail): 定义:端带有光纤
    的头像 发表于 04-14 10:10 157次阅读
    尾纤和尾缆是<b class='flag-5'>同一个</b>产品吗

    文说透了如何实现单片机的多任务并发!

    多任务并发。 任务调度 任务调度是多任务并发中
    发表于 01-06 06:46

    RTOS在嵌入式开发中的作用

    中,不依赖其它任务或调度器。 高峰负载管理 RTOS提供了为管理系统高峰活动提供了有效的方法。更高的优先级分配给执行峰值负载活动的任务
    发表于 12-26 07:53

    什么是嵌入式操作系统?

    、嵌入式 OS 的核心作用(嵌入式开发中最实用的 3 功能) 1. 多任务管理: 裸机开发的痛点:所有功能写在main函数的循环里,代码臃肿、逻辑混乱,
    发表于 12-09 10:33

    RTOS Crash 问题全维度分析与解决指南

    RTOS Crash往往伴随硬件级异常、任务调度紊乱、资源耗尽等核心问题,需结合RTOS内核特性、硬件架构、应用逻辑分层定位。 RTOS
    发表于 12-08 03:56

    多任务系统中,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?

    多任务系统中,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?
    发表于 12-04 06:37

    请问TCP 和 UDP 可以使用同一个端口吗?

    TCP 和 UDP 可以使用同一个端口吗?
    发表于 12-03 08:01

    学习RTOS的意义?

    RTOS实现多任务管理。 嵌入式操作系统有众多的软件组件,可以极大的加速项目进度,避免重复造车轮。 2.技能需要 掌握操作系统,和基于RTOS的编程,实现更好的职业规划,对个人发展是必不可少的。 在招聘网
    发表于 11-27 08:16

    RTOS 必学概念:任务、信号量、队列次搞懂

    如果你刚接触RTOS(实时操作系统),很可能会有这样的困惑:“RTOS和裸机程序到底有什么区别?”“任务是线程吗?为什么要分任务?”“信号量和互斥锁有什么区别,不都是同步手段吗?”“队
    的头像 发表于 11-17 10:53 715次阅读
    <b class='flag-5'>RTOS</b> 必学概念:<b class='flag-5'>任务</b>、信号量、队列<b class='flag-5'>一</b>次搞懂

    句话,多个命令同时执行,AI语音模组也能多任务处理?

    、 Ai-WV02-32S   将语音识别、唤醒、语义理解等核心功能, 浓缩在颗小小的模组中。 安信可AI语音模组支持 MCP 协议(Multi Command Processing,多命令并行处理) ,语音交互从“单线程”进化为真正的“
    的头像 发表于 10-31 14:45 705次阅读
    <b class='flag-5'>一</b>句话,多个命令同时执行,AI语音模组也能<b class='flag-5'>多任务</b>处理?

    爱普科技PSRAM加速wisun无线模块多任务处理

    爱普科技256Mb PSRAM(如APS256XXN-OBR-BG)为WiSUN无线模块提供高速数据缓存与临时存储解决方案,其166MHz速率、1.8V低功耗及小尺寸封装显著提升模块在智能电网、工业自动化中的多任务处理能力和稳定性。
    的头像 发表于 10-14 09:25 561次阅读
    爱普科技PSRAM加速wisun无线模块<b class='flag-5'>多任务</b>处理

    当不同的数据放在同一个Flash页面上时,请问如何在不影响其他数据的情况下更改些单独的数据?

    当不同的数据放在同一个Flash页面上时,如何在不影响其他数据的情况下更改些单独的数据?
    发表于 08-22 06:25

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

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

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

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

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

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