搜索
bottom↓
回复: 1

finsh命令中使用信号量的问题

[复制链接]

出0入0汤圆

发表于 2014-10-21 23:25:05 | 显示全部楼层 |阅读模式
本帖最后由 banjiaoshi 于 2014-10-21 23:28 编辑

问一下,我新建了一个finsh命令:
struct _gear
{
        struct rt_semaphore rx_sem;
        rt_device_t device;
};
struct _gear * gear;

void  init_steering_gear(void)
{
        memset(gear, 0, sizeof(struct _gear));//struct gear is derived form finsh_shell
        rt_sem_init(&(gear->rx_sem), "grrx", 0, RT_IPC_FLAG_FIFO);//init sem
}

rt_err_t gear_ctrl(void)
{
        init_steering_gear();
        while(1)
        {
                while(rt_sem_take(&(gear->rx_sem), RT_WAITING_FOREVER) == RT_EOK);
        }
}
FINSH_FUNCTION_EXPORT(gear_ctrl,control steering gear);
先初始化了一个初始值为0的信号量,然后我就while查询这个信号量,按理来说,查询这个信号量的时候,其他线程不释放这个信号量,低优先级的任务(LED跑马灯)还是可以运行的,可实际情况是,我从finsh进入gear_ctrl命令后,程序就跑飞了(跑马灯就停住不动了)。
于是我通过打印信息查询具体跑飞到哪里去了,我查询到的结果是,程序运行到rt_sem_take()函数的rt_hw_interrupt_enable(temp);这条语句之后就没有运行到下一条语句,从这里开始跑飞的。
能否帮忙看看是哪里出问题了,谢谢!

出0入0汤圆

 楼主| 发表于 2014-10-21 23:36:58 | 显示全部楼层
ok了,是结构体gear没给空间
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 22:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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