59、FreeRTOS/任务之间的通信20240406

一、总结二进制信号量和计数型信号量的区别,以及他们的使用场景。

二进制信号量和计数型信号量都是用于任务同步和资源管理的机制。

区别:

1.二进制信号量的值只有0和1;计数型信号量的值可以是任意非负整数(一般大于等于2)。

2.二进制信号量主要用于实现互斥,确保任何时候只有一个任务能够访问特定的临界区或资源;计数型信号量则可以管理有限数量的同类资源,允许多个任务同时访问,但受限于信号量的初始计数值。

3.二进制信号量一般用于保护共享资源;计数型信号量一般用于解决生产者和消费者模型。

应用场景:

二进制信号量:1.用于互斥访问,保护单一资源,防止多任务同时访问;2.任务间的简单同步,当一个任务需要等待另一个任务完成特定操作后才能继续执行时,可以使用二进制信号量。

计数型信号量:1.资源池管理,控制对 一组可复用资源(如内存块)的访问,允许多个任务同时使用但不超过最大限制;2.多任务间的批量同步,当需要协调多任务同时进入或离开某一状态时,计数型信号量可以跟踪 等待的或已经完成任务的数量。

二、使用计数型信号量完成生产者和消费者模型实验。

代码:

 

三、总结FreeRTOS中同步和互斥的五种方法的使用方法。

1.队列:FreeRTOS中的队列是用于任务之间的通信,遵循先进先出的规则。

第一步:创建队列,分为动态创建和静态创建,动态创建使用xQueueCreate函数进行创建,静态创建使用xQueueCreateStatic函数进行创建。

第二步:写操作,队列写操作也分为两种:一种是在中断中使用的一个函数:xQueueSendToBackFromISR,另一种是在任务中使用的:xQueueSendToBack。

第三步:读操作,读函数也分为两种:一种是在中断中进行队列的读取(xQueueReceiveFromISR),另一种是在任务中进行队列的读取。(xQueueReceive)

2.信号量:FreeRTOS中信号量主要被用于实现任务之间同步和互斥,也可以用于访问共享资源的时候使用。分为两种,分别为二进制信号量和计数型信号量。

第一步:创建信号量,分为创建二进制信号量xSemaphoreCreateBinary,创建计数型信号量xSemaphoreCreateCounting。

第二步:获取信号量(信号量值大于零才能被获取),根据创建时返回的id 获取二进制/计数型信号量信号量xSemaphoreTake。

第三步:释放信号量,根据创建时返回的id 释放二进制/计数型信号量信号量xSemaphoreGive。

第四步:销毁信号量vSemaphoreDelete。

3.互斥量:FreeRTOS中互斥量主要就是用于保护共享资源,保证数据访问的一致性和正确性。

第一步:创建互斥量 xSemaphoreCreateMutex

第二步:获取/锁定互斥量 (同获取信号量)xSemaphoreTake。

第三步:释放/解锁互斥量 (同释放信号量)xSemaphoreGive。

第四步:销毁互斥量 (同销毁信号量)xSemaphoreDelete。

4.事件组:在FreeRTOS中,事件组是一种同步机制,用于任务之间的通信和同步。它允许任务等待多个事件的状态,并且可以在任何事件被设置时唤醒等待的任务。

第一步:创建事件组 xEventGroupCreate。

第二步:设置事件 xEventGroupSetBits 设置完成对应的等待程序将被唤醒。

第三步:清除事件 xEventGroupClearBits  清除事件组中的一个或者多个事件标志。

第四步:等待事件xEventGroupWaitBits  让任务等待一个或者多个事件的发生。

第五步:销毁事件组 xEventGroupDelete

5.任务通知:在FreeRTOS中,任务通知是一种直接的任务间通信能力 在创建任务时即存在。

第一步:发送通知 xTaskNotifyGive。

第二步:接收通知xTaskNotifyWait。

四、总结任务通知和其他任务通信机制的区别。

1.直接通信和间接通信:任务通知提供了直接任务间通信的能力,无需通过中间通信对象,不需要再去创建可以直接使用。 相反的信号量、互斥量、事件组、队列则是间接通信,需要创建一个独立的通信对象。

2.目标任务的唯一性:任务通知通常直接发送给特定的任务,这意味着机制通常只允许一个任务作为接受者,发送者明确知道通知将被哪个任务接收和处理。 而信号量、互斥量、事件组、队列则是可以被多个任务同时访问,允许多对多的通信关系。

3.通信内容:任务通知通常不携带复杂数据,主要用于触发事件或者状态变化的通知。而信号量、互斥量、事件组、队列则可以承载更丰富和复杂的数据。

4.资源占用和效率:任务通知基于直接通信,设计简洁,通常具有较低的内存占用和较高的执行效率。信号量、互斥量、事件组、队列则需要消耗较多的资源,相应的他们也提供了更丰富的同步互斥和通信选项。

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值