[mw_shl_code=c,true]uCOS执行中断函数
play1();完成后 跳不出switch函数 屏蔽 play1();以后就正常了 把play1();单独放在 一个任务函数里面的话开始任务就卡死 下面是主任务、play();和中断服务函数代码 纠结了老半天了
求大神们帮忙看看[/mw_shl_code]
[mw_shl_code=c,true][/mw_shl_code]
[mw_shl_code=c,true]void main_task(void *pdata)
{
// u16 key=0;
// u8 err;
// u8 res[5];
OSTaskSuspend(LED1_TASK_PRIO);
OSTaskSuspend(LED2_TASK_PRIO);
OSTaskSuspend(LED4_TASK_PRIO);
OSTaskSuspend(LED5_TASK_PRIO);
OSTaskSuspend(LED6_TASK_PRIO);
OSTaskSuspend(LED7_TASK_PRIO);
k=0; y1=150;y2=150;
// u8 sem_led;
//LCD_ShowNum1(40,70,Choose,4,Red,White);
while(1)
{
LCD_ShowxNum(0,0,Res,2,16,16);
LCD_ShowxNum(0,20,Main_Control,2,16,16);
LCD_ShowxNum(0,40,First_One_Control,2,16,16);
LCD_ShowxNum(0,60,First_Two_Control,2,16,16);
LCD_ShowxNum(0,80,Second_One_Control,2,16,16);
LCD_ShowxNum(0,100,Second_Two_Control,2,16,16);
LCD_ShowxNum(0,120,Second_Three_Control,2,16,16);
LCD_ShowxNum(0,140,Second_Four_Control,2,16,16);
LCD_ShowxNum(0,180,Choose1,2,16,16);
LCD_ShowxNum(0,200,Choose2,2,16,16);
// key=(u32)OSMboxPend(msg_key,10,&err);
switch(Res) //~~~~~~~~~~~~~~~~
{
case 1: //×ó
if(Main_Control==1)
{
if(Choose==0)
{
Right();
Choose++;
}
else
{
Left();
Choose--;
}
LCD_ShowxNum(10,20,Choose,2,16,16);
}
else if(First_One_Control==1)
{
if(Choose1==0)
{
Right();
Choose1++;
}
else
{
Left();
Choose1--;
}
}
else if(First_Two_Control==1)
{
if(Choose2==0)
{
Right();
Choose2++;
}
else
{
Left();
Choose2--;
}
}
Res=0;
// OSTaskSuspend(LCD_TASK_PRIO);
break;
case 2: //??
if(Main_Control==1)
{
if(Choose==0)
{
Right();
Choose++;
}
else
{
Left();
Choose--;
}
LCD_ShowxNum(10,20,Choose,2,16,16);
}
else if(First_One_Control==1)
{
if(Choose1==0)
{
Right();
Choose1++;
}
else
{
Left();
Choose1--;
}
}
else if(First_Two_Control==1)
{
if(Choose2==0)
{
Right();
Choose2++;
}
else
{
Left();
Choose2--;
}
}
Res=0;
break;
case 3 : //?·?¨
// OSTaskResume(LCD_TASK_PRIO);
// Show_String(40,70,"LCD_TASK Resumed!",Red,White);
// OSTaskResume(LCD_TASK_PRIO);
// OSTaskResume(LED2_TASK_PRIO);
// delay_ms(180);
// OSTaskSuspend(LED2_TASK_PRIO);
if(Main_Control==1)
{
if(Choose==0)
{
First_One_Menu();
putxGB3232(102,134,"D",1,Red,Green);
Main_Control=0;
First_One_Control=1;
}
else if(Choose==1)
{
First_Two_Menu();
putxGB3232(102,134,"D",1,Red,Green);
Main_Control=0;
First_Two_Control=1;
}
Res=0;
break;
}
else if(First_One_Control==1)
{
if(Choose1==0)
{
stroge1_control=1;
OSTaskResume(LED1_TASK_PRIO);
LCD_Clear(White);
putxGB3232(136,104,"????????",4,Red,White);
First_One_Control=0;
Second_One_Control=1;
// LCD_Clear(Yellow);
}
else if(Choose1==1)
{
stroge_control=1;
OSTaskResume(LED4_TASK_PRIO);
LCD_Clear(White);
putxGB3232(136,104,"????????",4,Red,White);
First_Two_Control=0;
Second_Two_Control=1;
}
Res=0;
break;
}
else if(First_Two_Control==1)
{
if(Choose2==0)
{
play1_control=1;
OSTaskResume(MAIN_TASK_PRIO);
LCD_Clear(Red);
putxGB3232(136,104,"??????·?",4,Red,White);
// OSTaskResume(LED2_TASK_PRIO);
// OSTaskSuspend(LED1_TASK_PRIO);
// OSTaskSuspend(LED2_TASK_PRIO);
// OSTaskSuspend(LED3_TASK_PRIO);
// OSTaskSuspend(LED4_TASK_PRIO);
// OSTaskSuspend(LED5_TASK_PRIO);
// OSTaskSuspend(LED7_TASK_PRIO);
// OSTaskSuspend(MAIN_TASK_PRIO);
play1();
OSTaskResume(LED3_TASK_PRIO);
putxGB3232(136,104,"??·??ê??",4,Red,White);
First_One_Control=0;
Second_Three_Control=1;
LCD_ShowxNum(0,180,Choose1,2,16,16);
LCD_ShowxNum(0,200,Choose2,2,16,16);
}
else if(Choose2==1)
{
play_control=1;
OSTaskResume(LED7_TASK_PRIO);
LCD_Clear(White);
putxGB3232(136,104,"??????·?",4,Red,White);
First_One_Control=0;
Second_Two_Control=1;
}
Res=0;
putxGB3232(0,0,"??·??ê??",4,Red,White);
break;
}
// else if(Second_One_Control==1)
// {
// LCD_Clear(Yellow);
// stroge1();
// Res=0;
// break;
// }
Res=0;
break;
case 4:
// OSTaskDelReq(LCD_TASK_PRIO); //·???????LCD???????ó??????????????·¨????
// Show_String(40,70,"LCD_TASK Deleted!",Red,White);
// OSTaskResume(LCD_TASK_PRIO);
OSTaskResume(LED1_TASK_PRIO);
delay_ms(180);
OSTaskSuspend(LED1_TASK_PRIO);
// Choose=Choose+1;
// LCD_ShowNum1(40,70,Choose,4,Red,White);
// delay_ms(1500);
break;
case 5:
// OSTaskCreate(lcd_task,(void *)0,(OS_STK*)&LCD_TASK_STK[LCD_STK_SIZE-1],LCD_TASK_PRIO);//???¨LCD????
// Show_String(40,70,"LCD_TASK Created!",Red,White);
// OSTaskSuspend(LCD_TASK_PRIO);
// LCD_Clear(Lightblue);
switch(Choose)
{
case 0:
// Lcd_Write_Hz24(72,10,"????????",White,Lightblue);
pattern_point();
//delay_ms(1500);
break;
case 1:
// Lcd_Write_Hz24(72,10,"????????",White,Lightblue);
pattern_point();
// delay_ms(800);
break;
case 2:
// Lcd_Write_Hz24(94,10,"??×?",White,Lightblue);
delay_ms(1500);
break;
}
break;
case 6: //·???
// sem_led=10;
// OSSemPost(sem_led);
if(First_One_Control==1||First_Two_Control==1)
{
MainMenu();
Main_Control=1;
First_One_Control=0;
First_Two_Control=0;
Second_One_Control=0;
Second_Two_Control=0;
Second_Three_Control=0;
Second_Four_Control=0;
Choose=0;
Choose1=0;
Choose2=0;
}
else if(Second_One_Control==1||Second_Two_Control==1)
{
First_One_Menu();
Main_Control=0;
First_One_Control=1;
First_Two_Control=0;
Second_One_Control=0;
Second_Two_Control=0;
Second_Three_Control=0;
Second_Four_Control=0;
Choose=0;
Choose1=0;
Choose2=0;
OSTaskSuspend(LED1_TASK_PRIO);
OSTaskSuspend(LED4_TASK_PRIO);
OSTaskSuspend(LED5_TASK_PRIO);
}
else if(Second_Three_Control==1||Second_Four_Control==1)
{
First_Two_Menu();
Main_Control=0;
First_One_Control=1;
First_Two_Control=0;
Second_One_Control=0;
Second_Two_Control=0;
Second_Three_Control=0;
Second_Four_Control=0;
Choose=0;
Choose1=0;
Choose2=0;
}
Res=0;
break;
}
delay_ms(100);
}
}[/mw_shl_code]
[mw_shl_code=c,true][/mw_shl_code]
[mw_shl_code=c,true]
[mw_shl_code=c,true]void play1(void)
{
u16 i,j;
//extern u8 Buff[1024];
extern u8 SD_symble,Buff_symble;
extern u16 SD_ADDR,ADDRESS;
Buff_symble=0;
SD_ADDR=0;
ADDRESS=0;
USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //???????¨??TIM3????,???í?ü?????? extern u16 SD_ADDR;
for(i=0;i<1000;i++)
{
SD_ReadDisk(Buff+SD_ADDR,i,8);
while(ADDRESS)
{
if(ADDRESS==503)
ADDRESS=0;
}
ADDRESS=0;
if(SD_ADDR==0)
SD_ADDR=512;
else
SD_ADDR=0;
// i=i+7;
// LCD_ShowxNum(100,240,i,9,16,0);
}
TIM_ITConfig(TIM3, TIM_IT_Update, DISABLE); //?§??TIM3?ü??
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
}[/mw_shl_code]
[mw_shl_code=c,true]void TIM3_IRQHandler(void) //TIM3????
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //?ì?éTIM3?ü??????·??ú??·?
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //????TIMx?ü??????±ê??
DAC902(Buff[ADDRESS+SD_ADDR]<<4);
ADDRESS++;
}
}[/mw_shl_code]
[/mw_shl_code]