关于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);
}
} 没人回答么?
页:
[1]