搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2010-3-18 11:15:40 | 显示全部楼层 |阅读模式
我刚学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...   

。。。。。。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-7-8 09:40:49 | 显示全部楼层
Int Mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 13:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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