luoo 发表于 2010-3-18 11:15:40

求助 高手解决Uc/OS2 中断问题

我刚学uc/os 系统,遇到问题,请各位大侠帮忙

我在44b0 上运行中断程序,发现进中断返回后,其他任务就不再运行了,只能等待中断
源程序如下:

int Main(int argc, char **argv)
{
       
        ARMTargetInit();                                                //初始化运行环境
        OSInit();                                                       //初始化OS
        MBox=OSMboxCreate((void*)0);
        //Sem_F=OSFlagCreate(0,&err);                                     //创建信号量集
        OSTaskCreate(StartTask,(void *)0,&StartTaskStk,0);   //创建起始任务
        OSStart();                                                      //运行任务
        return 0;
}


void        StartTask(void *pdata)
{
        pdata=pdata;
        ARMTargetStart();                                             //配置和打开中断,系统时钟开始运行
        OSTaskCreate(Led1Task,(void *)s1,&Led1TaskStk,3);                //创建起任务
        OSTaskCreate(Led2Task,(void *)s2,&Led2TaskStk,4);                //创建起任务
        OSTaskCreate(Led3Task,(void *)s3,&Led3TaskStk,5);                //创建任务
        do{
        OSTaskDel(0);                                                                                                   //删除此任务                                             
        }while(1);
}

void        Led1Task(void *pdata)
{ char temp;
for(;;)
{
   temp =(unsigned int)OSMboxPend(MBox,0,&err);
   //OSFlagPend(Sem_F,(OS_FLAGS)3,OS_FLAG_WAIT_SET_ALL,0,&err);       //请求信号量集的第0和第1位且都置1。
   rPDATC=0x02;
   Uart_Printf(pdata);
   OSMboxAccept(MBox);
   //init_eint4567();
   OSTimeDlyHMSM(0,0,1,0);                                          //延时2秒
}
}

void        Led2Task(void *pdata)
{ char you='h';
for(;;)
{
Uart_Printf(pdata);
rPDATC=0x04;
// OSTimeDlyHMSM(0,0,2,0);                                          //延时8秒

OSMboxPost(MBox,&you);
// OSFlagPost(Sem_F,(OS_FLAGS)2,OS_FLAG_SET,&err);                                   //发送信号量集。使信号量集的第1位置1
OSTimeDlyHMSM(0,0,4,0);                                          //延时2秒
}
}

void        Led3Task(void *pdata)       
{
        for(;;)
        {
       Uart_Printf(pdata);
       rPDATC=0x08;
       OSFlagPost(Sem_F,(OS_FLAGS)1,OS_FLAG_SET,&err);            //发送信号量集。使信号量集的第0位置1
       OSTimeDlyHMSM(0,0,5,0);                                    //延时1秒
        }
}       
volatile char KeyMsg = 0 ;
/*void init_eint4567()
{

        rPCONG = rPCONG | ( 0x3f << 10 );                //EINT7~5
        rPUPG = rPUPG & (~(7 << 5)) ;                //pull up resister is enable
        rEXTINT = 0x22222222;//rEXTINT & (~(0x0fff << 20)) ;                //EINT567低电平触发中断0fff

        pISR_EINT4567 = (unsigned)Exint4567_Exception ;
       

}*/

voidExint4567_Exception(void)
{
        OS_ENTER_CRITICAL();
       
        KeyMsg = rEXTINPND ;
        rEXTINPND = 0xf ;                //clear EXTINTPND reg.
        rI_ISPC = BIT_EINT4567 ;                //clear pending_bit
        rPCONG = rPCONG & (~(0x3f << 10));                //GPC567 is input
        OSMboxPost(MBox,(void *)&KeyMsg);
        switch (KeyMsg)
        {
        case 1:
                Uart_Printf("\nEINT4 had been occured...\n");
                KeyMsg = 0;
          break;
        case 2:
                Uart_Printf("\nEINT5 had been occured...\n");
                KeyMsg = 0;
                break;
        case 4:
                Uart_Printf("\nEINT6 had been occured...\n");
                KeyMsg = 0;
                break;
        case 8:
                Uart_Printf("\nEINT7 had been occured...\n");
                KeyMsg = 0;
                break;
        default :
                break;
        }

        while ( (rPDATG&0x00e0) != 0x00e0 ) ;
        Delay( 100 ) ;
        rPCONG = rPCONG | ( 0x3f << 10 );                //EINT7~5
       
        OS_EXIT_CRITICAL();
       
}


运行结果为:

Hello!uCOS-II Systerm !                     

led2 on !         
led1 on !         
led3 on !         
led2 on !         
led1 on !         
led3 on !         
EINT5 had been occured...                        

EINT5 had been occured...                        

EINT6 had been occured...                        

EINT6 had been occured...   

。。。。。。。

mcu520 发表于 2010-7-8 09:40:49

Int Mark
页: [1]
查看完整版本: 求助 高手解决Uc/OS2 中断问题