rt_event_send(&evt, EVT_2);while(RT_TRUE == state_run) { err = rt_event_recv(&evt,EVT...
/* 线程 1 入口函数 */ static void thread1_recv_event(void *param) { rt_uint32_t e; /* 第一次接收事件, 事件 3 或事件 5 任意一个可以触发线程 1, 接收完后清除事件标志 */ if (rt_event_recv(&event, (EVENT_FLAG3 | EVENT_FLAG5), RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_...
(rt_event_recv(&event, (EVENT_FLAG3 | EVENT_FLAG5), RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, &e) == RT_EOK) { rt_kprintf("thread1: AND recv event 0x%x\n", e); } rt_kprintf("thread1 leave.\n"); } static void rt_thread2_entry(void *parameter)...
/* 选择逻辑与或逻辑或的方式接收事件 */#define RT_EVENT_FLAG_AND 0x01 /* 逻辑与 */#define RT_EVENT_FLAG_OR 0x02 /* 逻辑或 *//* 选择清除重置事件标志位 */#define RT_EVENT_FLAG_CLEAR 0x04 /* 清除事件标志位 */ 当调用rt_event_recv()函数时,系统首先根据set参数和接收选项option来判断...
uart_getchar函数内部有一个while()循环,先调用rt_device_read去读取一字节数据,没有读到则调用rt_event_recv等待事件标志,挂起调用线程;串口接收到一字节数据后产生中断,调用回调函数uart_intput,回调函数里面调用了rt_event_send发送事件标志以唤醒等待该event事件的线程。
*/rt_err_trt_event_recv(rt_event_t event,rt_uint32_tset,rt_uint8_t option,rt_int32_t timeout,rt_uint32_t*recved) event 事件 set 需要侦听的事件集。 option 可以是以下一个或多个标志: RT_EVENT_FLAG_OR: 满足set中任意一个事件即可。
rt_event_recv rt_mb_send_wait rt_mb_recv rt_mq_send_wait rt_mq_recv 线程操作类 登录后复制rt_thread_detach rt_thread_delete rt_thread_yield rt_thread_delay rt_thread_delay_until rt_thread_mdelay rt_thread_suspend rt_thread_resume ...
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) 1. 2. 3. 4. 5. 调用这个函数时,系统首先根据set参数和接收选项option来判断它要接收的事件是否发生了。
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) 4.3 示例(逻辑与和逻辑或) 事件集通过示例可以很好的理解怎么使用,我们示例中,用按钮发送事件,其他线程接收事件,进行对应的处理。
EVENT_F2, RT_EVENT_FLAG_AND|RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, &e);rt_kprintf("th1\r\n");rt_event_send(even1, EVENT_F3);rt_thread_mdelay(1000); } }voidth0_entry(void* para){rt_uint32_te;staticu8 Flag=0;while(1){rt_event_recv(even1, ...