RL-RTX中的Event、mailbox、mutex和semaphore

Event flags(事件)

事件是实现任务-任务、任务-中断(isr)之间同步的一种机制。一个任务或isr通过设置事件告诉另一任务某一(些)事情发生了;一个任务可以等待某一(些)事件发生后再继续执行。

每一任务有16个事件标志可用。

情景:

        甲:我告诉你,某事发生。(set

        乙:我等到,直到你告诉我某事发生。(wait

 

函数原型

说明

原型

在其他任务中清除指定任务的事件标记。

void os_evt_clr ( U16 clear_flags,   OS_TID task ); 

在本任务中,引起os_evt_wait_or的事件发生后,识别是那些事件发生了。

U16 os_evt_get (void);

在其他任务中,告诉指定的任务某一(些)发生。

void os_evt_set ( U16 event_flags,   OS_TID task );  

在本任务中,等待所有指定的事件发生,直到超时。

OS_RESULT os_evt_wait_and (U16 wait_flags,   U16 timeout );  

在本任务中,等待指定的事件有一个发生,直到超时。

OS_RESULT os_evt_wait_or (U16 wait_flags,  U16 timeout );    

IRQ的中断服务程序中,告诉指定的任务某一(些)发生。

void isr_evt_set (U16 event_flags,  OS_TID task );     

Mutexes(互斥对象)

互斥对象是一种访问临界(Critical)资源的机制。一个任务要使用(请求)(os_mut_wait)某一临界资源,必须要等到另一任务使用完后(os_mut_release)才可以。

情景:

        甲:我要做某事,你不要做,我做完了告诉你。(waitrelease

        乙:我等到,你做完了告诉我,我再做。(wait

 

函数原型

说明

原型

初始化一个互斥对象

void os_mut_init (OS_ID mutex ); 

在使用完临界资源后,释放(解锁)一个互斥对象。

OS_RESULT os_mut_release (OS_ID mutex );  

尝试获得一个互斥对象。如果此互斥对象未被释放(locked),则等待直到释放或超时;如果此互斥对象已被释放(unlock),则将此互斥对象锁定(lock),任务继续执行。

OS_RESULT os_mut_wait(OS_ID mutex,   U16   timeout );   

 

Semaphore(信号量)

信号量与mutex类似,但带有Token的计数。

说明

原型

初始化

void os_sem_init (OS_ID semaphore, U16   token_count );

Tokens计数器加1

OS_RESULT os_sem_send (OS_ID semaphore );

Tokens计数器加1

void isr_sem_send (OS_ID semaphore );

请求一个Token,如果Tokens的数量大于0,则将一个token给任务,并将Tokens的计数值减1,任务继续执行;如果Tokens的数量等于0,则任务等待直到有一个token可用或超时。

OS_RESULT os_sem_wait (OS_ID semaphore, U16 timeout ); 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值