ucosii中中断中要等待信号量怎么办

very008   2008-6-11 17:03 楼主
                                  

回复评论 (8)

你这样用法是不正确的,中断中不能有信号等待

                                  
点赞  2008-6-11 17:45

你反过来应用

你可以在中断中发送一个信号,这样你就中断中就不用等待了
点赞  2008-6-11 17:48

我要收取信号 好进行操作

                                  
点赞  2008-6-11 18:14

我在中断里就收信号量

用这个函数
  msg = (CPU_INT08U *)OSMboxAccept(AppUserIFMbox);
为什么一直是零呢
点赞  2008-6-11 18:53

可否建立个优先级高的任务,在任务中收信号量

可否建立个优先级高的任务,在任务中收信号量,
接到sem后,剥夺现有任务开始你要求的操作.
点赞  2008-6-12 09:48

想这样做,你只有建立一个轮询任务了

直接查询信号。

我说的意识你是没有听明白。
比如捕捉一个信号,你可以开捕捉中断,然后在中断中用:OSSemPost。

你再定义一个任务是这样的格式:

task()
{
     for (;;) 
    {
         msg=OSSemPend
          }
}
点赞  2008-6-12 14:39

我是这样做的 请看我的程序:

中断函数:(可以正常进入)
 static void  App_Spurious_ISR1 (void) //@ "ICODE"
{   
   CPU_INT08U   key=2;
   OS_CPU_SR  cpu_sr;
   
   EXTI_ClearFlag(EXTI_Line0);
   
    OS_ENTER_CRITICAL();                                        /* Tell uC/OS-II that we are starting an ISR                */
    OSIntNesting++;
    OS_EXIT_CRITICAL();
    
   
     OSMboxPost(AppUserIFMbox, (void *)key);//发送信号量
      

      OSIntExit(); 
   
}
任务(不是最高级的)

static  void  AppTaskUserIF (void *p_arg)
{
    CPU_INT08U  *msg;
    CPU_INT08U   err;
    //CPU_INT32U   nstate;
    CPU_INT32U   pstate;


    (void)p_arg;


    AppDispScr_SignOn();
    OSTimeDlyHMSM(0, 0, 1, 0);
    nstate = 1;
    pstate = 1;


    while (DEF_TRUE) {
        msg = (CPU_INT08U *)(OSMboxPend(AppUserIFMbox, OS_TICKS_PER_SEC / 10, &err));
     if (err == OS_NO_ERR) {
            nstate = (CPU_INT32U)msg;
        }


        switch (nstate) {
            case 2:
              LED_On(0);
              OSTimeDlyHMSM(0, 0, 1, 50);
                break;  
        }
    }
    
}
为什么接受的信号量不对,应该说是0  而不是我中断里 发送的2
这个和AppUserIFMbox的定义有关系吗
  楼上能帮我看看什么原因吗
点赞  2008-6-12 15:26

感觉还是keil的rtx好用~~~

                                  
点赞  2008-6-12 22:47
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复