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

[复制链接]
2101|2
 楼主| ticomi 发表于 2013-10-26 11:19 | 显示全部楼层 |阅读模式
我使用的是ucosII系统,处理器为STM32F4,我想在USB中断里发送一个信号量给USB的任务,但是发现一旦在USB的中断里发送信号量,系统立刻死机。

我把这个信号量放大别的中断里是可以正常发送和使用的。USB中断的代码如下:
  1. void OTG_FS_IRQHandler(void)
  2. {       
  3.         OSIntEnter();                       
  4.         OSSemPost(Sem_USB);       
  5.         OSIntExit();       
  6. }
测试任务为:
  1. void        USB_Task(void *p_arg)
  2. {
  3.         (void)p_arg;
  4.         Sem_USB        =        OSSemCreate(0);                                                                                                        //Create a sem for USB task
  5.        
  6.        
  7.         while(1)
  8.         {
  9.                 OSSemPend(Sem_USB, 0, &Err);
  10.                 LED_RED_FLASH;
  11.         }
  12. }
是不是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

粉丝
快速回复 在线客服 返回列表 返回顶部