FreeRTOS操作系统学习——同步互斥与通信

同步(Synchronization)

同步是一种机制,用于确保多个任务能够按照特定的顺序协调执行或共享数据。当一个任务需要等待其他任务完成某个操作或满足某个条件时,同步机制可以帮助任务进行协调和等待。

在FreeRTOS中,常见的同步机制包括任务通知(Task Notification)、信号量(Semaphore)、事件标志组(Event Group)等。这些机制可以通过任务等待和任务唤醒来实现任务之间的协调和数据交换。

  • 任务通知:任务通知允许任务之间通信和同步状态。任务可以等待特定的通知事件,并在事件发生时被唤醒。任务之间可以通过任务通知来传递数据和信息。

  • 信号量:信号量是一种计数器,用于控制对资源的访问。当一个任务需要访问共享资源时,它可以尝试获取一个信号量。如果信号量计数器为正(表示有可用资源),则任务可以继续执行。如果计数器为零,则任务进入阻塞状态,等待信号量计数器变为正。

  • 事件标志组:事件标志组是一种用于任务通信和同步的机制,可以通过设置、清除和等待事件标志来实现任务间的同步和数据传递。任务可以等待多个特定的事件标志同时发生,以及循环等待、超时等。

互斥(Mutex)

互斥是一种机制,用于确保在任何给定时间只有一个任务能够访问共享资源。当一个任务获得了互斥锁时,在它释放互斥锁之前,其他任务将无法获得同一个互斥锁。这样可以有效地避免多个任务同时访问和修改共享资源导致的竞态条件或数据不一致问题。

  • 在FreeRTOS中,使用xSemaphoreCreateMutex()函数创建一个互斥锁(Mutex
    Semaphore)。通过调用xSemaphoreTake()获取互斥锁,调用xSemaphoreGive()释放互斥锁。

原文链接:https://blog.csdn.net/Goforyouqp/article/details/131811382

同步机制都可以使用相应的FreeRTOS API函数来创建、等待和释放。所以,互斥用于保护共享资源的独占访问,同步用于任务之间的协调和数据交换。通过适当的使用互斥和同步机制,可以确保任务之间的安全访问和正确的执行顺序。

传统同步与互斥的缺陷

在裸机程序里,可以使用一个全局变量或静态变量实现互斥操作,比如要互斥地使用LCD,可以使用如下代码:
在这里插入图片描述
假设如下场景: 有两个任务 A、 B 都想调用 LCD_PrintString, 任务 A 执行到第 4 行代码时发现 bCanUse 为 1,可以进入 if 语句块,它还没执行第 6 句指令就被切换出去了;然后任务 B 也调用 LCD_PrintString,任务 B 执行到第 4 行代码时也发现 bCanUse 为 1,也可以进入 if 语句块使用 LCD。 在这种情况下,使用静态变量并不能实现互斥操作!!!
上述方法不能保证万无一失的原因在于:在判断过程中,被打断了。如果能保证这个过程不被打断,就可以了:通过关闭中断来实现。
在这里插入图片描述

实现同步与互斥的方法

能实现同步、互斥的内核方法有:任务通知(task notification)、队列(queue)、事件组(event group)、信号量(semaphoe)、互斥量(mutex)。

在这里插入图片描述

  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS是一个开源的实时操作系统(RTOS),专注于嵌入式系统的开发。它提供了一套简单而强大的API,用于管理任务、调度、内存管理、通信和定时器等功能。如果你想学习FreeRTOS操作系统,下面是一些步骤和资源可以帮助你入门: 1. 了解嵌入式系统和实时操作系统的基本概念:在开始学习FreeRTOS之前,建议你对嵌入式系统和实时操作系统有一定的了解。掌握任务调度、并发性、内存管理和通信等基本概念对于学习FreeRTOS非常重要。 2. 下载和安装FreeRTOS:你可以从FreeRTOS官方网站(www.freertos.org)下载最新版本的FreeRTOS。根据你的目标平台选择合适的版本,并按照相关文档进行安装。 3. 学习FreeRTOS的API:阅读FreeRTOS的官方文档,学习其提供的API和功能。文档中包含了详细的说明、示例代码和应用案例,可以帮助你理解和使用FreeRTOS。 4. 实践编写示例应用:通过编写一些简单的示例应用程序来熟悉FreeRTOS的使用。从创建任务、任务调度、同步通信等方面开始,逐步扩展你的应用程序,深入理解FreeRTOS的特性和功能。 5. 参考示例代码和案例:FreeRTOS社区中有许多示例代码和案例可以参考,这些示例代码可以帮助你更好地理解FreeRTOS的应用场景和解决方案。 6. 加入社区和论坛:参与FreeRTOS的社区和论坛讨论,与其他开发者交流经验和问题。这样你可以获得更多的支持和指导,加速你的学习过程。 以上是学习FreeRTOS操作系统的一般步骤和建议。希望对你有所帮助!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值