基于RT_Thread 事件集实现线程同步

RT_Thread是什么?

        RT_Thread是一款由国产自主研发的实时操作系统,对比于FreeRtos来说,RT_Thread更加的注重实时性,且更适合一些复杂的嵌入式功能需求以及功能场景,进行多线程调度以及通信等功能比较强大,包括他的生态都是做的比较好的,所以在学习嵌入式的时候,RT-Thread学者必不可少的,很多的企业都会需要你会这样一款实时操作系统。

什么是事件集?

        事件集顾名思义就是事件的集合,每一个事件相互独立,假设用32bit的无符号整型变量来表示一个事件集的话,那么就可以用变量的每一位来表示一个事件,线程可以通过事件逻辑与、逻辑或来将一个事件或多个事件关联起来。例:

可以选择事件1或事件32来开启线程,也可以选择事件1与事件32来开启线程

事件集的特点:

1.只进行线程间的同步,而不进行数据传输。

2.事件集无排队性,即多次向线程发送同一事件,视为发送一次

3.每个事件相互独立,只和线程相关。

如何使用事件集来完成线程间同步及相关函数

一、创建事件集

首先第一个参数是一个char*型,就是你要创建的事件名的名称,第二个参数就是一个获取方式,可选的参数有RT_IPC_FLAG_FIFO,选择一个先进先出的方式;一个是RT_IPC_FLAG_RPIO,选择一个优先级的方式。

二、发送事件函数

这个函数是选择要发送的事件,第一个参数就是要发送到的事件集,第二个参数就是事件。如果有线程挂在事件集上挂起了休眠了,我们给这个事件集发送事件就会把他给唤醒。

三、接收事件函数

接收函数的参数比较多:第一个还是我们的事件集的名字;第二个是要接收到的事件,第三个是option的操作,这个操作有

可以选择事件与来唤醒线程还是事件或来唤醒线程,RT_EVENNT_FLAG_CLEAR是在你接收到这个事件后要不要清除这个位;第四个参数就是一个超时时间,如果过了时间没有接收到,就会挂起这个线程,第五个参数就是接收到的一个值是多少,如果不关心接收到的值是多少而单纯只唤醒线程的话,可以设置为NULL。

四、删除事件集

这个函数也就比较简单,就是选择你要删除的事件集。

本文到这里就结束了,希望大家共同进步,有些的不对的地方欢迎大家指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值