xcodes 发表于 2009-9-9 13:45:19

关于AvrXdelay的问题

我的工程里面一用AvrXdelay就死翘翘了
哪位有相关的例子么


下面是我的代码
所用的avrx系统为 http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3208344&bbs_id=3004&bbs_page_no=1
里面下载的


AVRX_GCC_TASK(task1, 10, 3);
AVRX_GCC_TASK(task2, 20, 1);
AVRX_GCC_TASK(task3, 30, 1);
AVRX_MUTEX(TimerSemaphore);        //声明一个信号量

TimerControlBlock timer1, timer2, timer3, timer4;
int main(void)
{
    AvrXSetKernelStack(0);
        DS1302_Init();
        GUI_Init();       
        GUI_VarInit();
        Key_Init();
       
        MCUCR = _BV(SE);      // Initialize Timer Hardware
        TCNT0 = TCNT0_INIT;
        TCCR0 = TMC8_CK256;
        TIMSK = _BV(TOIE0);

    AvrXRunTask(&task1Tcb);
    AvrXRunTask(&task2Tcb);
    AvrXRunTask(&task3Tcb);
    Epilog();                   // Switch from AvrX Stack to first task
    while (1);
}


AVRX_SIGINT(SIG_OVERFLOW0)
{
    IntProlog();
    TCNT0 = TCNT0_INIT;
    AvrXIntSetSemaphore(&TimerSemaphore);
        AvrXTimerHandler();
    Epilog();
}

NAKEDFUNC(task1)
{       
        uint myKey;
        uchar Key;                //按键
        while (1)
    {

                if(GUI_Flash)
                {
            cli();
            GUI_Clear();        //清空                       
                        str1=*(pMenu.Text+Item);
                        str2=*(pMenu.Text+Item+1);
                       
            GUI_PutStrAt(str1,0,0);
                        AvrXDelay(&timer1,2);//<-----------------程序运行到这里卡死了,为什么?
            GUI_PutStrAt(str2,0,1);
                        if(Where<MaxDispY)
            {
                GUI_SetPos(15,Where);
                GUI_PutStr("<");
            }
                        GUI_Flash=0;
            sei();
      }
                myKey=PINA;               
                AvrXDelay(&timer1,20);
                Key=PINA;
                if(Key!=myKey)continue;
                while(myKey!=0xf0)
                {
                        myKey=PINA;               
                        myKey&=0xf0;
                        AvrXDelay(&timer1,1);
                }

                AvrXWaitSemaphore(&TimerSemaphore);
                if(myKey!=0xf0)continue;
                Key&=0xf0;               

      switch (Key)
      {
      case UP:                                        //向上键
                        KeyFuncIndex=KeyTab.KeyUpState;       
                        KeyFuncPtr=KeyTab.CurrentOperate;
                        (*KeyFuncPtr)();//执行当前按键的操作
                        break;
      case DN:                                        //向下键
                        KeyFuncIndex=KeyTab.KeyDnState;
                        KeyFuncPtr=KeyTab.CurrentOperate;
                        (*KeyFuncPtr)();//执行当前按键的操作               
                        break;
                case ESC:                                        //返回键
                        KeyFuncIndex=KeyTab.KeyEscState;
                        KeyFuncPtr=KeyTab.CurrentOperate;
                        (*KeyFuncPtr)();//执行当前按键的操作       
                        break;
                case ETR:                                        //进入键
                        KeyFuncIndex=KeyTab.KeyEtrState;
                        KeyFuncPtr=KeyTab.CurrentOperate;
                        (*KeyFuncPtr)();//执行当前按键的操作       
                        break;
                default:
            break;
                }
        }
}


NAKEDFUNC(task2)
{
    while (1)
    {
                AvrXWaitSemaphore(&TimerSemaphore);
       
    }
}

NAKEDFUNC(task3)
{
    while(1)
    {
                AvrXWaitSemaphore(&TimerSemaphore);
    }
}

xcodes 发表于 2009-9-10 08:38:04

没人回答么?
页: [1]
查看完整版本: 关于AvrXdelay的问题