新手上路 
 
	- 积分
 - 20
 
        - 金钱
 - 20 
 
       - 注册时间
 - 2017-7-18
 
      - 在线时间
 - 2 小时
 
 
 
 | 
 
1金钱 
各位好,最近在学习 uC/OS 2.91 的移植,尝试做一个简单的功能,利用按键产生中断,然后再中断里面用 uC/OS 的邮箱传变量到任务去,改变 LED 灯的状态,现在的问题是,邮箱通信不成功,不知道是中断的时候没发送,还是接收不成功。 
这个是任务代码,还有邮箱的接收。 
 
 
[mw_shl_code=c,true]static void App_TaskCreate(void *p_arg) 
{ 
        (void)p_arg; 
        EXT9_5_LED_MBOX = OSMboxCreate((void *)0); 
        OSTaskCreate(Task_KEY_LED,(void *)0, 
           &task_key_led_stk[TASK_KEY_LED_STK_SIZE-1], TASK_KEY_LED_PRIO); 
} 
 
static void Task_KEY_LED(void *p_arg) 
{ 
        INT8U err; 
        unsigned char LED_SW; 
        (void)p_arg; 
        while(1) 
        { 
                LED_SW = *((unsigned char *)OSMboxPend(EXT9_5_LED_MBOX,0,&err)); 
                if(LED_SW == 1) 
                { 
                        LED1( ON ); 
                        LED2( OFF); 
                        LED3( OFF); 
                } 
                if(LED_SW == 2) 
                { 
                        LED1( OFF); 
                        LED2( ON); 
                        LED3( OFF); 
                } 
                if(LED_SW == 3) 
                { 
                        LED1( OFF); 
                        LED2( OFF); 
                        LED3( ON ); 
                } 
        } 
} 
[/mw_shl_code] 
 
这个是中断子程序邮箱的发送代码 
 
 
[mw_shl_code=c,true]void EXTI9_5_IRQHandler(void) 
{         
        OS_CPU_SR cpu_sr; 
        OS_ENTER_CRITICAL(); 
        OSIntNesting++; 
        OS_EXIT_CRITICAL(); 
        if(EXTI_GetITStatus(EXTI_Line5) != RESET) //确保是否产生了EXTI Line中断 
        { 
                KEY_Count++; 
                if(KEY_Count > 3) 
                { 
                        KEY_Count = 1; 
                } 
                OSMboxPost(EXT9_5_LED_MBOX,(void *)&KEY_Count); 
                EXTI_ClearITPendingBit(EXTI_Line5);     //清除中断标志位 
        }   
}[/mw_shl_code] 
 |   
 
 
最佳答案
查看完整内容[请看2#楼] 
UCOSII发送消息的时候发送的是消息的引用!也就是消息的地址指针,所以消息要用全局变量,或者静态变量,反正就是不能让这个变量消失了。比如函数里面的变量就会在函数执行完以后被释放掉。调用UCOSII里面的消息邮箱有关的函数的时候记得判断其返回值!!!!!!根据返回值确定是什么问题 
 
 
 
 
 
 
 |