发 帖  
原厂入驻New
把LCD的函数添加到了任务中,可是为什么没有反应怎么办
23 LCD 函数
分享
小白求教?
按照原子哥的方法把LCD的函数也添加到了任务中,可是为什么没有反应?请高手回答?还有请问有qq群吗?我想加入以下。谢谢。。[C] 纯文本查看 复制代码
#define LCD_TASK_PRIO 9#define LCD_STK_SIZE  64OS_STK LCD_TASK_STK[LCD_STK_SIZE];void lcd_task(void *pdata);OSTaskCreate(lcd_task,(void *)0, (OS_STK*)&LCD_TASK_STK[LCD_STK_SIZE-1],LCD_TASK_PRIO);void lcd_task(void *pdata){ u8 i ;while (1){i = 0 ;i++;IF (i > 9 )i = 0 ;switch (i){case 0 : LCD_Clear(RED);break;case 1 : LCD_Clear(WHITE);break ;case 2 : LCD_Clear(YELLOW);break ;case 3 : LCD_Clear(BLACK);break ;case 4 : LCD_Clear(GREEN);break ;case 5 : LCD_Clear(BROWN);break ;case 6 : LCD_Clear(BLUE);break ;case 7 : LCD_Clear(LGRAY);break ;case 8 : LCD_Clear(LBBLUE);break ;}delay_ms(300);}}
0
5 天前   评论 分享淘帖 邀请回答

相关问题

11个回答
问题的原因找到了,在LCD_Init();函数中有一句是printf(" LCD ID:%x\r\n",lcddev.id); 把这段代码屏蔽掉,LCD就有现象了。虽然问题解决了,但是想问一下老师,为什么这段代码会让程序卡在这里?
你前面应该是没有串口初始化,所以串口发送这一句是过不去的。因为串口一次次发送时,会等待发送完成
任务堆栈在开大一点试试
液晶一直是白屏没错吧,你仔细看你的程序逻辑
液晶是一直没有反应的,而且只要把LCD_Init();在main函数中打开,所有的外设都不工作了。请老师明示...
lcd_task中switch (i)处的i一直是1,因为i的初始在while(1)里面
[C] 纯文本查看 复制代码
[C] 纯文本查看 复制代码
[C] 纯文本查看 复制代码
#include \"led.h\"#include \"delay.h\"#include \"sys.h\"#include \"usart.h\"#include \"includes.h\"#include \"beep.h\"#include \"lcd.h\"/////////////////////////UCOSII?/////////////////////////////////////START ????#define START_TASK_PRIO      10 #define START_STK_SIZE  64OS_STK START_TASK_STK[START_STK_SIZE];void start_task(void *pdata);    //#define LED1_TASK_PRIO       7 //#define LED1_STK_SIZE      64//OS_STK LED1_TASK_STK[LED1_STK_SIZE];//void led1_task(void *pdata);//#define LED2_TASK_PRIO       6 //#define LED2_STK_SIZE  64//OS_STK LED2_TASK_STK[LED2_STK_SIZE];//void led2_task(void *pdata);////BEEP ????//#define BEEP_TASK_PRIO 8//#define BEEP_STK_SIZE  64//OS_STK BEEP_TASK_STK[BEEP_STK_SIZE];//void beep_task(void *pdata);#define LCD_TASK_PRIO 4#define LCD_STK_SIZE  200OS_STK LCD_TASK_STK[LCD_STK_SIZE];void lcd_task(void *pdata); int main(void) {delay_init();       NVIC_Configuration(); LCD_Init(); //LED_Init();   //BEEP_Init(); POINT_COLOR=RED; while (1) {OSInit();    OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//???¨????????//(OS_STK *)&START_TASK_STK[START_STK_SIZE-1]??????????????????  OSStart(); } }   //????????void start_task(void *pdata){  OS_CPU_SR cpu_sr=0;pdata = pdata; OSStatInit(); OS_ENTER_CRITICAL();    //OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);    //OSTaskCreate(led2_task,(void *)0,(OS_STK*)&LED2_TASK_STK[LED2_STK_SIZE-1],LED2_TASK_PRIO);//OSTaskCreate(beep_task,(void *)0, (OS_STK*)&BEEP_TASK_STK[BEEP_STK_SIZE-1],BEEP_TASK_PRIO);OSTaskCreate(lcd_task,(void *)0, (OS_STK*)&LCD_TASK_STK[LCD_STK_SIZE-1],LCD_TASK_PRIO);OSTaskSuspend(START_TASK_PRIO);OS_EXIT_CRITICAL();}//void led1_task(void *pdata)//{ //while(1)//{//LED0=0;//delay_ms(80);//LED0=1;//delay_ms(80);//};//}////LED2????//void led2_task(void *pdata)//{  //while(1)//{//LED1=0;//delay_ms(300);//LED1=1;//delay_ms(300);//};//}//void beep_task(void *pdata)//{//u8 i ;//while(1)//{//for( i = 0 ; i <500 ; i++ )//{//delay_ms(1000);//BEEP =!BEEP ;//}//};//}void lcd_task(void *pdata){ u8 i ;i = 0 ;while (1){i++;if (i > 9 )i = 0 ;switch (i){case 0 : LCD_Clear(RED);break;case 1 : LCD_Clear(WHITE);break ;case 2 : LCD_Clear(YELLOW);break ;case 3 : LCD_Clear(BLACK);break ;case 4 : LCD_Clear(GREEN);break ;case 5 : LCD_Clear(BROWN);break ;case 6 : LCD_Clear(BLUE);break ;case 7 : LCD_Clear(LGRAY);break ;case 8 : LCD_Clear(LBBLUE);break ;}delay_ms(3000);};}老师您好,我的问题还是没有解决,这是我的源代码,为什么在我把LCD_Init();屏蔽掉之后,所有的外设都可以按照任务执行,但是一旦加上LCD_Init();之后,就不可以了。整个的硬件都是没有反应的。我一开始考虑的是延时时间过短,然后延时3000,但是还是不行。在调试的时候,程序不会卡在LCD_Init();中。请老师赐教。
我已经改正这个错误了,但是还不行。
5 天前 评论

举报

是这个问题。。。谢谢老师的指点
我觉得吧,估计是串口打印函数重定向这里有问题,因为这里会一直等待数据发送完成,而你没有连串口,数据一直发不出去。后续代码都无法运行。

只有小组成员才能发言,加入小组>>

239个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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