OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3472|回复: 2

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

[复制链接]

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2016-11-20
在线时间
29 小时
发表于 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");是不是不管获取到没有,都可以释放?


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

1034

帖子

0

精华

论坛元老

Rank: 8Rank: 8

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

超时了也会返回。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

超时了也会返回。

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

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 04:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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