OpenEdv-开源电子网

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

ucos的任务调度

[复制链接]

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
发表于 2015-1-17 19:51:17 | 显示全部楼层 |阅读模式
5金钱
小白求教?
按照原子哥的方法把LCD的函数也添加到了任务中,可是为什么没有反应?请高手回答?还有请问有qq群吗?我想加入以下。谢谢。。
[mw_shl_code=c,true] #define LCD_TASK_PRIO 9 #define LCD_STK_SIZE 64 OS_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); } } [/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

问题的原因找到了,在LCD_Init();函数中有一句是printf(" LCD ID:%x\r\n",lcddev.id); 把这段代码屏蔽掉,LCD就有现象了。虽然问题解决了,但是想问一下老师,为什么这段代码会让程序卡在这里?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-1-17 19:51:18 | 显示全部楼层
问题的原因找到了,在LCD_Init();函数中有一句是printf(" LCD ID:%x\r\n",lcddev.id); 把这段代码屏蔽掉,LCD就有现象了。虽然问题解决了,但是想问一下老师,为什么这段代码会让程序卡在这里?
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2015-1-17 19:51:18 | 显示全部楼层
回复【8楼】水滴滴水:
---------------------------------
你前面应该是没有串口初始化,所以串口发送这一句是过不去的。因为串口一次次发送时,会等待发送完成
博观而约取,厚积而薄发。
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

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

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2015-1-17 20:32:30 | 显示全部楼层
液晶一直是白屏没错吧,你仔细看你的程序逻辑
博观而约取,厚积而薄发。
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-1-17 20:51:57 | 显示全部楼层
回复【3楼】745021926:
---------------------------------
液晶是一直没有反应的,而且只要把LCD_Init();在main函数中打开,所有的外设都不工作了。请老师明示...
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2015-1-17 21:00:54 | 显示全部楼层
回复【4楼】水滴滴水:
---------------------------------
lcd_task中switch (i)处的i一直是1,因为i的初始在while(1)里面
博观而约取,厚积而薄发。
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-1-17 23:59:30 | 显示全部楼层
[mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true]#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 64 OS_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 200 OS_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); }; } [/mw_shl_code]
老师您好,我的问题还是没有解决,这是我的源代码,为什么在我把LCD_Init();屏蔽掉之后,所有的外设都可以按照任务执行,但是一旦加上LCD_Init();之后,就不可以了。整个的硬件都是没有反应的。我一开始考虑的是延时时间过短,然后延时3000,但是还是不行。在调试的时候,程序不会卡在LCD_Init();中。请老师赐教。
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-1-18 00:00:12 | 显示全部楼层
回复【5楼】745021926:
---------------------------------
我已经改正这个错误了,但是还不行。
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-1-18 00:20:34 | 显示全部楼层
谢谢老师的指点。
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-1-20 17:16:29 | 显示全部楼层
回复【10楼】745021926:
---------------------------------
是这个问题。。。谢谢老师的指点
回复

使用道具 举报

5

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2014-3-24
在线时间
19 小时
发表于 2017-9-22 17:27:56 | 显示全部楼层
我觉得吧,估计是串口打印函数重定向这里有问题,因为这里会一直等待数据发送完成,而你没有连串口,数据一直发不出去。后续代码都无法运行。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-2 04:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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