首页 > 代码库 > rtx任务间的通信--event flags
rtx任务间的通信--event flags
每个任务最多有16个事件标示,任务可以同时等待几个事件,或选择等待其中的某个或某些事件.事件可由其他任务或中断处理函数触发.
void os_evt_set (
U16 event_flags, /* Bit pattern of event flags to set */
OS_TID task ); /* The task that the events apply to */
触发事件函数,
event_flags表示事件标示,一个事件占用一bit,event_flags为1的位对应的事件才被触发.
task表示等待事件的任务ID.
OS_RESULT os_evt_wait_or (
U16 wait_flags, /* Bit pattern of events to wait for */
U16 timeout ); /* Length of time to wait for event */
返回值:
OS_R_EVT--At least one of the flags specified by wait_flags has been set.
OS_R_TMO--The timeout has expired.
该函数等待wait_flags指定的某个事件发生或超时后才返回,如果是因事件返回,返回时该函数会将导致该函数返回的事件标示清除.
,要想知道是哪个事件导致函数返回,可以通过os_get_evt函数获取。
返回OS_R_EVT表示等待的事件中至少有一个事件发生了。如果同时等待多个事件,如wait_flags=0x03,返回OS_R_EVT时可能是:
<1> 事件0发生了(0x01)
<2> 事件1发生了(0x02)
<3> 事件0,1同时发生了(0x03)
返回OS_R_TMO说明等待事件超时了, 0xffff表示无限等待。
U16 os_evt_get (void);
该函数返回导致os_evt_wait_or函数返回的事件,如果os_evt_wait_or因超时返回,该函数返回0.
OS_RESULT os_evt_wait_and (
U16 wait_flags, /* Bit pattern of events to wait for */
U16 timeout ); /* Length of time to wait for event */
返回值:
OS_R_EVT--All the flags specified by wait_flags have been set.
OS_R_TMO--The timeout has expired.
该函数等待wait_flags指定的所有事件发生或超时后才返回,如果是因事件返回,返回时该函数会将wait_flags等待的事件标示清除.
参数timeout表示超时返回时间,单位为系统tick.
void os_evt_clr (
U16 clear_flags, /* Bit pattern of event flags to clear */
OS_TID task ); /* The task that the events apply to */
清除事件函数,参数clear_flags表示要清除的事件(对应位为1),task为等待事件的任务ID.
void isr_evt_set (
U16 event_flags, /* Bit pattern of event flags to set */
OS_TID task ); /* The task that the events apply to */
该函数只能在IRQ中调用,FIQ中不能调用(对arm7,arm9的MCU来说了),cortex-m3所有的中断处理函数都可以调用.
所以如果在中断很频繁的地方调用该函数,有可能导致其他的任务不能运行的情况,如果某个事件在中断处理函数触
发了两次,等待该事件的任务有可能只捕获到一次事件。
rtx任务间的通信--event flags