OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2056|回复: 1

ucosII执行卡死情况

[复制链接]

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2015-2-9
在线时间
17 小时
发表于 2015-5-5 17:22:08 | 显示全部楼层 |阅读模式
5金钱
[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]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-5-5 21:00:53 | 显示全部楼层
任务堆栈开大一点试试
开往春天的手扶拖拉机
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 20:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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