打印

ucOS中的USB中断发送信号量失败

[复制链接]
1912|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ticomi|  楼主 | 2013-10-26 11:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用的是ucosII系统,处理器为STM32F4,我想在USB中断里发送一个信号量给USB的任务,但是发现一旦在USB的中断里发送信号量,系统立刻死机。

我把这个信号量放大别的中断里是可以正常发送和使用的。USB中断的代码如下:
void OTG_FS_IRQHandler(void)
{       
        OSIntEnter();                       
        OSSemPost(Sem_USB);       
        OSIntExit();       
}
测试任务为:
void        USB_Task(void *p_arg)
{
        (void)p_arg;
        Sem_USB        =        OSSemCreate(0);                                                                                                        //Create a sem for USB task
       
       
        while(1)
        {
                OSSemPend(Sem_USB, 0, &Err);
                LED_RED_FLASH;
        }
}
是不是USB的代码必须在中断中运行呢?非常疑惑,一直没有找到原因所在。
沙发
airwill| | 2013-10-28 11:15 | 只看该作者
作为一般性, 中断里发送一个信号量给任务是没有问题的. 把这个信号量放大别的中断里是可以正常发送和使用也说明了这一点.
楼主的问题, 可能是USB中断和USB的任务之间已经存在耦合连接关系, 再增加一个信号量, 就导致锁死了.

使用特权

评论回复
板凳
杨爱林林| | 2013-10-28 13:48 | 只看该作者
会不会是这么一种情况  
你的usb_task 里面没调度  
当你建立一个sem,usb_task在pend
而此过程中一直没有中断事件 进入 OTG_FS_IRQHandler

这是我的猜想

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

852

帖子

4

粉丝