返回该小组首页 回复主题
jackbao

jackbao

小组等级:     E币:180  (E币换礼)

#1楼主:中断 发送信号量 任务接受不到

文章发表于:2008-06-12 03:35

中断函数:(可以正常进入)
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的定义有关系吗
  大家能帮我看看什么原因吗

gaomidu

   小组等级:    E币:98  (E币换礼)

#2

文章发表于:2008-06-18 16:34

接收的应该是中断里发的 key=2 吧

lz能说说为什么是0吗

dileimao

   小组等级:    E币:87  (E币换礼)

#3

文章发表于:2008-07-11 09:22

我以前也遇到过类似问题,当时是事件控制块的最大数目设置得过小,

#define OS_MAX_EVENTS            50    /* Max. number of event control blocks in your application ...  */
   我这里设置的是50,一般系统够用了,你看看是不是这个原因?

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

设计资源与分销