硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5587|回复: 0
收起左侧

[QQ群问题解答] 求助 高手解决Uc/OS2 中断问题

[复制链接]

92

主题

76

回帖

92

积分

初级会员

积分
92
发表于 2014-4-9 13:46:31 | 显示全部楼层 |阅读模式
我刚学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[STACKSIZE-1],0);   //创建起始任务
        OSStart();                                                      //运行任务
        return 0;
}


void        StartTask(void *pdata)
{
        pdata=pdata;
        ARMTargetStart();                                               //配置和打开中断,系统时钟开始运行
          OSTaskCreate(Led1Task,(void *)s1,&Led1TaskStk[STACKSIZE-1],3);                //创建起任务
          OSTaskCreate(Led2Task,(void *)s2,&Led2TaskStk[STACKSIZE-1],4);                //创建起任务
          OSTaskCreate(Led3Task,(void *)s3,&Led3TaskStk[STACKSIZE-1],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 ;
        

}*/

void  Exint4567_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...   

。。。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 02:20 , Processed in 0.147386 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表