中级会员
- 积分
- 218
- 金钱
- 218
- 注册时间
- 2016-11-20
- 在线时间
- 29 小时
|
1金钱
本帖最后由 gxf26 于 2018-7-10 17:45 编辑
/* 1. staic semaphore demo */
/* 获得当前的OS Tick */
tick = rt_tick_get();
/* 试图持有信号量,最大等待10个OS Tick后返回 */
result = rt_sem_take(&static_sem, 10);
if (result == -RT_ETIMEOUT)
{
/* 超时后判断是否刚好是10个OS Tick */
if (rt_tick_get() - tick != 10)
{
rt_sem_detach(&static_sem);
return;
}
rt_kprintf("take semaphore timeout\n");
}
else
{
/* 因为没有其他地方释放信号量,所以不应该成功持有信号量,否则测试失败 */
rt_kprintf("take a static semaphore, failed.\n");
rt_sem_detach(&static_sem);
return;
}
/* 释放一次信号量 */
rt_sem_release(&static_sem);
/* 永久等待方式持有信号量 */
result = rt_sem_take(&static_sem, RT_WAITING_FOREVER);
if (result != RT_EOK)
{
/* 不成功则测试失败 */
rt_kprintf("take a static semaphore, failed.\n");
rt_sem_detach(&static_sem);
return;
}
rt_kprintf("take a staic semaphore, done.\n");
信号量初始化是0,根本就获取不到,既然没有take到,那有怎么能释放一次信号量( rt_sem_release(&static_sem);)? 居然还 rt_kprintf("take a staic semaphore, done.\n");是不是不管获取到没有,都可以释放?
|
|