OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 99|回复: 2

1052例程RT THREAD中这段为什么不能理解了

[复制链接]

  离线 

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2016-11-20
在线时间
26 小时
发表于 2018-7-10 17:43:02 | 显示全部楼层 |阅读模式
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");是不是不管获取到没有,都可以释放?


回复

使用道具 举报

  离线 

8

主题

770

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2053
金钱
2053
注册时间
2011-5-23
在线时间
916 小时
发表于 2018-7-10 19:59:55 | 显示全部楼层
不是有设置超时时间?  

超时了也会返回。
回复

使用道具 举报

  离线 

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2016-11-20
在线时间
26 小时
 楼主| 发表于 2018-7-10 20:33:09 | 显示全部楼层
aozima 发表于 2018-7-10 19:59
不是有设置超时时间?  

超时了也会返回。

超时依然未获得信号量返回-RT_ETIMEOUT
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

"原子哥”推荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-7-21 21:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */