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。
四、删除事件集
这个函数也就比较简单,就是选择你要删除的事件集。
本文到这里就结束了,希望大家共同进步,有些的不对的地方欢迎大家指正!