|
本帖最后由 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);这条语句之后就没有运行到下一条语句,从这里开始跑飞的。
能否帮忙看看是哪里出问题了,谢谢! |
|