RT-thread内核对象--事件集

it2022-05-05  147

   rt-thread 线程的同步:线程同步是指多个线程通过特定的机制(如互斥量,事件对象,临界区)来控制线程之间的执行顺序

   1.事件集:(可以实现一对多,多对多的同步)   RT-Thread 定义的事件集有以下特点:   1)事件只与线程相关,事件间相互独立:每个线程可拥有 32 个事件标志,采用一个 32 bit 无符号整型数进行记录,每一个 bit 代表一个事件;   2)事件仅用于同步,不提供数据传输功能;   3)事件无排队性,即多次向线程发送同一事件 (如果线程还未来得及读走),其效果等同于只发送一次。

 

 

    一、事件控制块:在rtdef.h

 #ifdef RT_USING_EVENT/*事件的选项:逻辑或,逻辑与,清楚标志*/

 #define RT_EVENT_FLAG_AND 0x01 /**< logic and *#define RT_EVENT_FLAG_OR 0x02 /**< logic or */

#define RT_EVENT_FLAG_CLEAR 0x04 /**< clear flag */ /*事件结构体*/struct rt_event { struct rt_ipc_object parent; /**< inherit from ipc_object */ //从IPC对象派生 rt_uint32_t set; /**< event set */ //保存接收到的事件集 }; typedef struct rt_event *rt_event_t; #endif二、事件相关接口:在ipc.c中1.创建事件:rt_sem_create(const char *name, rt_uint8_t flag); 2.删除事件:rt_sem_delete(rt_sem_t sem);3.初始化事件:rt_sem_init(rt_event_t event, const char *name, rt_uint8_t flag);4.脱离事件:rt_sem_detach(rt_sem_t sem);5.发送事件:rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set);6.接收事件:rt_err_t rt_event_recv(rt_event_t event,rt_uint32_t set,rt_uint8_t option,rt_int32_t timeout,rt_uint32_t *recved); 7.控制事件:rt_err_t rt_event_control(rt_event_t event, rt_uint8_t cmd, void *arg);  

转载于:https://www.cnblogs.com/cqcw/p/10478571.html


最新回复(0)