本人刚入门,勿喷。。。我的想法是这样的,把扩展例程UCOSII移植直接拿来用,在任务led0_task中替换音乐播放器实验代码,在任务led1_task中替换图片显示实验代码,结果实验现象是刚开始启动开发板音乐播放器实验运行,歌曲正常播放,2~3秒以后转到显示图片,然后就不放音乐了,就一直在图片那禁止了。我把任务led1_task中的代码换成轮回清屏代码就可以实现双进程,请请问这是怎么回事?我试过将任务led1_task中的轮回清屏代码里的延时部分延时换成很短,也会造成不放音乐,在之前led1_task中用图片显示实验代码里的延时也不低啊,求指教。
[mw_shl_code=c,true]#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "usmart.h"
#include "malloc.h"
#include "w25qxx.h"
#include "sdio_sdcard.h"
#include "ff.h"
#include "exfuns.h"
#include "fontupd.h"
#include "text.h"
#include "wm8978.h"
#include "audioplay.h"
#include "includes.h"
#include "piclib.h"
#include "string.h"
#include "math.h"
//ALIENTEK ì½Ë÷ÕßSTM32F407¿a·¢°å êμÑé43
//òôàÖ2¥·ÅÆ÷ êμÑé -¿aoˉêy°æ±¾
//¼¼êõÖ§3Ö£o
www.openedv.com
//ìÔ±|μêÆì£o
http://eboard.taobao.com
//1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾
//×÷ÕߣoÕyμãÔ-×ó
@alientek
#define START_TASK_PRIO 10 ///¿aê¼èÎÎñμÄóÅÏ輶Îa×îμí
//éèÖÃèÎÎñ¶ÑÕ»′óD¡
#define START_STK_SIZE 128
//èÎÎñèÎÎñ¶ÑÕ»
OS_STK START_TASK_STK[START_STK_SIZE];
//èÎÎñoˉêy
void start_task(void *pdata);
//LED0èÎÎñ
//éèÖÃèÎÎñóÅÏ輶
#define LED0_TASK_PRIO 7
//éèÖÃèÎÎñ¶ÑÕ»′óD¡
#define LED0_STK_SIZE 128
//èÎÎñ¶ÑÕ»
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//èÎÎñoˉêy
void led0_task(void *pdata);
//LED1èÎÎñ
//éèÖÃèÎÎñóÅÏ輶
#define LED1_TASK_PRIO 6
//éèÖÃèÎÎñ¶ÑÕ»′óD¡
#define LED1_STK_SIZE 128
//èÎÎñ¶ÑÕ»
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
//èÎÎñoˉêy
void led1_task(void *pdata);
//¸¡μã2aêÔèÎÎñ
#define FLOAT_TASK_PRIO 5
//éèÖÃèÎÎñ¶ÑÕ»′óD¡
#define FLOAT_STK_SIZE 128
//èÎÎñ¶ÑÕ»
//èç1ûèÎÎñÖDê1óÃprintfà′′ò󡸡μãêy¾YμÄ»°ò»μãòa8×Ö½ú¶ÔÆë
__align(8) OS_STK FLOAT_TASK_STK[FLOAT_STK_SIZE];
//èÎÎñoˉêy
void float_task(void *pdata);
u16 pic_get_tnum(u8 *path)
{
u8 res;
u16 rval=0;
DIR tdir; //áùê±Ä¿Â¼
FILINFO tfileinfo; //áùê±ÎļtDÅÏ¢
u8 *fn;
res=f_opendir(&tdir,(const TCHAR*)path); //′ò¿aĿ¼
tfileinfo.lfsize=_MAX_LFN*2+1; //3¤ÎļtÃû×î′ó3¤¶è
tfileinfo.lfname=mymalloc(SRAMIN,tfileinfo.lfsize);//Îa3¤Îļt»o′æÇø·ÖÅäÄú′æ
if(res==FR_OK&&tfileinfo.lfname!=NULL)
{
while(1)//2éÑˉ×üμÄóDD§Îļtêy
{
res=f_readdir(&tdir,&tfileinfo); //¶áè¡Ä¿Â¼ÏÂμÄò»¸öÎļt
if(res!=FR_OK||tfileinfo.fname[0]==0)break; //′íÎóáË/μ½Ä©Î2áË,íË3ö
fn=(u8*)(*tfileinfo.lfname?tfileinfo.lfname:tfileinfo.fname);
res=f_typetell(fn);
if((res&0XF0)==0X50)//衸ßËÄλ,¿′¿′êÇ2»êÇí¼Æ¬Îļt
{
rval++;//óDD§ÎļtêyÔö¼ó1
}
}
}
return rval;
}
int main(void)
{
delay_init(168); //Ñóê±3õê¼»ˉ
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÖD¶Ï·Ö×éÅäÖÃ
uart_init(115200); //′®¿ú2¨ìØÂêéèÖÃ
LED_Init(); //LED3õê¼»ˉ
LCD_Init(); //LCD3õê¼»ˉ
KEY_Init(); //°′¼ü3õê¼»ˉ
W25QXX_Init(); //3õê¼»ˉW25Q128
WM8978_Init(); //3õê¼»ˉWM8978
WM8978_HPvol_Set(40,40); //¶ú»úòôá¿éèÖÃ
WM8978_SPKvol_Set(50); //à®°èòôá¿éèÖÃ
my_mem_init(SRAMIN); //3õê¼»ˉÄú2¿Äú′æ3Ø
my_mem_init(SRAMCCM); //3õê¼»ˉCCMÄú′æ3Ø
exfuns_init(); //ÎafatfsÏà1رäá¿éêÇëÄú′æ
f_mount(fs[0],"0:",1); //1òÔØSD¿¨
OSInit(); //UCOS3õê¼»ˉ
OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO); //′′½¨¿aê¼èÎÎñ
OSStart(); //¿aê¼èÎÎñ
}
//¿aê¼èÎÎñ
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata=pdata;
OSStatInit(); //¿aÆôí3¼ÆèÎÎñ
OS_ENTER_CRITICAL(); //½øèëáù½çÇø(1رÕÖD¶Ï)
OSTaskCreate(led0_task,(void*)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);//′′½¨LED0èÎÎñ
OSTaskCreate(led1_task,(void*)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);//′′½¨LED1èÎÎñ
OSTaskSuspend(START_TASK_PRIO);//1òÆe¿aê¼èÎÎñ
OS_EXIT_CRITICAL(); //íË3öáù½çÇø(¿aÖD¶Ï)
}
//LED0èÎÎñ
void led0_task(void *pdata)
{
while(1)
{
POINT_COLOR=RED;
while(font_init()) //¼ì2é×Ö¿a
{
LCD_ShowString(30,50,200,16,16,"Font Error!");
delay_ms(200);
LCD_Fill(30,50,240,66,WHITE);//Çå3yÏÔê¾
delay_ms(200);
}
while(1)
{
audio_play();
}
}
}
//LED1èÎÎñ
void led1_task(void *pdata)
{
u8 x;
while(1)
{
switch(x)
{
case 0
CD_Clear(WHITE);break;
case 1
CD_Clear(BLACK);break;
case 2
CD_Clear(BLUE);break;
case 3
CD_Clear(RED);break;
case 4
CD_Clear(MAGENTA);break;
case 5
CD_Clear(GREEN);break;
case 6
CD_Clear(CYAN);break;
case 7
CD_Clear(YELLOW);break;
case 8
CD_Clear(BRRED);break;
case 9
CD_Clear(GRAY);break;
case 10:LCD_Clear(LGRAY);break;
case 11:LCD_Clear(BROWN);break;
}
POINT_COLOR=RED;
LCD_ShowString(30,40,210,24,24,"Explorer STM32F4");
LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,130,200,12,12,"2014/5/4");
x++;
if(x==12)x=0;
LED0=!LED0;
delay_ms(5000);
}
// u8 res;
// DIR picdir; //í¼Æ¬Ä¿Â¼
// FILINFO picfileinfo;//ÎļtDÅÏ¢
// u8 *fn; //3¤ÎļtÃû
// u8 *pname; //′ø·¾¶μÄÎļtÃû
// u16 totpicnum; //í¼Æ¬Îļt×üêy
// u16 curindex; //í¼Æ¬μ±Ç°Ë÷òy
// u8 key; //¼üÖμ
// u8 pause=0; //ÔYí£±ê¼Ç
// u8 t;
// u16 temp;
// u16 *picindextbl; //í¼Æ¬Ë÷òy±í
// while(1)
// {
//
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏ輶·Ö×é2
// delay_init(168); //3õê¼»ˉÑóê±oˉêy
// uart_init(115200); //3õê¼»ˉ′®¿ú2¨ìØÂêÎa115200
// LED_Init(); //3õê¼»ˉLED
// usmart_dev.init(84); //3õê¼»ˉUSMART
// LCD_Init(); //LCD3õê¼»ˉ
// KEY_Init(); //°′¼ü3õê¼»ˉ
// W25QXX_Init(); //3õê¼»ˉW25Q128
// my_mem_init(SRAMIN); //3õê¼»ˉÄú2¿Äú′æ3Ø
// my_mem_init(SRAMCCM); //3õê¼»ˉCCMÄú′æ3Ø
// exfuns_init(); //ÎafatfsÏà1رäá¿éêÇëÄú′æ
// f_mount(fs[0],"0:",1); //1òÔØSD¿¨
// f_mount(fs[1],"1:",1); //1òÔØFLASH.
// POINT_COLOR=RED;
// while(font_init()) //¼ì2é×Ö¿a
// {
// LCD_ShowString(30,50,200,16,16,"Font Error!");
// delay_ms(200);
// LCD_Fill(30,50,240,66,WHITE);//Çå3yÏÔê¾
// delay_ms(200);
// }
// Show_Str(30,50,200,16,"Explorer STM32F4¿a·¢°å",16,0);
// Show_Str(30,70,200,16,"í¼Æ¬ÏÔê¾3ìDò",16,0);
// Show_Str(30,90,200,16,"KEY0:NEXT KEY1
REV",16,0);
// Show_Str(30,110,200,16,"WK_UP
AUSE",16,0);
// Show_Str(30,130,200,16,"ÕyμãÔ-×ó@ALIENTEK",16,0);
// Show_Str(30,150,200,16,"2014Äê5ÔÂ15èÕ",16,0);
// while(f_opendir(&picdir,"0:/PICTURE"))//′ò¿aí¼Æ¬Îļt¼D
// {
// Show_Str(30,170,240,16,"
ICTUREÎļt¼D′íÎó!",16,0);
// delay_ms(200);
// LCD_Fill(30,170,240,186,WHITE);//Çå3yÏÔê¾
// delay_ms(200);
// }
// totpicnum=pic_get_tnum("0:/PICTURE"); //μÃμ½×üóDD§Îļtêy
// while(totpicnum==NULL)//í¼Æ¬ÎļtÎa0
// {
// Show_Str(30,170,240,16,"ûóDí¼Æ¬Îļt!",16,0);
// delay_ms(200);
// LCD_Fill(30,170,240,186,WHITE);//Çå3yÏÔê¾
// delay_ms(200);
// }
// picfileinfo.lfsize=_MAX_LFN*2+1; //3¤ÎļtÃû×î′ó3¤¶è
// picfileinfo.lfname=mymalloc(SRAMIN,picfileinfo.lfsize); //Îa3¤Îļt»o′æÇø·ÖÅäÄú′æ
// pname=mymalloc(SRAMIN,picfileinfo.lfsize); //Îa′ø·¾¶μÄÎļtÃû·ÖÅäÄú′æ
// picindextbl=mymalloc(SRAMIN,2*totpicnum); //éêÇë2*totpicnum¸ö×Ö½úμÄÄú′æ,óÃóú′æ·Åí¼Æ¬Ë÷òy
// while(picfileinfo.lfname==NULL||pname==NULL||picindextbl==NULL)//Äú′æ·ÖÅä3ö′í
// {
// Show_Str(30,170,240,16,"Äú′æ·ÖÅä꧰ü!",16,0);
// delay_ms(200);
// LCD_Fill(30,170,240,186,WHITE);//Çå3yÏÔê¾
// delay_ms(200);
// }
// //¼Ç¼Ë÷òy
// res=f_opendir(&picdir,"0:/PICTURE"); //′ò¿aĿ¼
// if(res==FR_OK)
// {
// curindex=0;//μ±Ç°Ë÷òyÎa0
// while(1)//è«2¿2éÑˉò»±é
// {
// temp=picdir.index; //¼Ç¼μ±Ç°index
// res=f_readdir(&picdir,&picfileinfo); //¶áè¡Ä¿Â¼ÏÂμÄò»¸öÎļt
// if(res!=FR_OK||picfileinfo.fname[0]==0)break; //′íÎóáË/μ½Ä©Î2áË,íË3ö
// fn=(u8*)(*picfileinfo.lfname?picfileinfo.lfname:picfileinfo.fname);
// res=f_typetell(fn);
// if((res&0XF0)==0X50)//衸ßËÄλ,¿′¿′êÇ2»êÇí¼Æ¬Îļt
// {
// picindextbl[curindex]=temp;//¼Ç¼Ë÷òy
// curindex++;
// }
// }
// }
// Show_Str(30,170,240,16,"¿aê¼ÏÔê¾...",16,0);
// delay_ms(1500);
// piclib_init(); //3õê¼»ˉ»-í¼
// curindex=0; //′ó0¿aê¼ÏÔê¾
// res=f_opendir(&picdir,(const TCHAR*)"0:/PICTURE"); //′ò¿aĿ¼
// while(res==FR_OK)//′ò¿a3é1|
// {
// dir_sdi(&picdir,picindextbl[curindex]); //¸Ä±äμ±Ç°Ä¿Â¼Ë÷òy
// res=f_readdir(&picdir,&picfileinfo); //¶áè¡Ä¿Â¼ÏÂμÄò»¸öÎļt
// if(res!=FR_OK||picfileinfo.fname[0]==0)break; //′íÎóáË/μ½Ä©Î2áË,íË3ö
// fn=(u8*)(*picfileinfo.lfname?picfileinfo.lfname:picfileinfo.fname);
// strcpy((char*)pname,"0:/PICTURE/"); //¸′ÖÆ·¾¶(Ŀ¼)
// strcat((char*)pname,(const char*)fn); //½«ÎļtÃû½óÔúoóÃæ
// LCD_Clear(BLACK);
// ai_load_picfile(pname,0,0,lcddev.width,lcddev.height,1);//ÏÔê¾í¼Æ¬
// Show_Str(2,2,240,16,pname,16,1); //ÏÔê¾í¼Æ¬Ãû×Ö
// t=0;
// while(1)
// {
// ai_load_picfile(pname,0,0,lcddev.width,lcddev.height,1);
// key=KEY_Scan(0); //é¨Ãè°′¼ü
// if(t>250)key=1; //Ä£Äaò»′ΰ′ÏÂKEY0
// if((t%20)==0)LED0=!LED0;//LED0éá˸,ìáê¾3ìDòÕyÔúÔËDD.
// if(key==KEY1_PRES) //éÏò»ÕÅ
// {
// if(curindex)curindex--;
// else curindex=totpicnum-1;
// break;
// }else if(key==KEY0_PRES)//ÏÂò»ÕÅ
// {
// curindex++;
// if(curindex>=totpicnum)curindex=0;//μ½Ä©Î2μÄê±oò,×Ô¶ˉ′óí·¿aê¼
// break;
// }else if(key==WKUP_PRES)
// {
// pause=!pause;
// LED1=!pause; //ÔYí£μÄê±oòLED1áá.
// }
// if(pause==0)t++;
// delay_ms(10);
// }
// res=0;
// }
// myfree(SRAMIN,picfileinfo.lfname); //êí·ÅÄú′æ
// myfree(SRAMIN,pname); //êí·ÅÄú′æ
// myfree(SRAMIN,picindextbl); //êí·ÅÄú′æ
// }
}
[/mw_shl_code]
不会啊,我把任务led0_task音乐播放器实验代码替换成LED1闪烁都不行,程序一开始正常闪烁,但图片一刷新出来就不闪了
。。还真是堆栈不够,多谢原子哥
一周热门 更多>