OpenEdv-开源电子网

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

ucosII 任务调度实验

[复制链接]

18

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
435
金钱
435
注册时间
2014-8-16
在线时间
56 小时
发表于 2015-4-28 20:39:22 | 显示全部楼层 |阅读模式
5金钱
在原子任务调度源码的基础上加入LCD刷屏幕,但是总是在初始化LCD,屏幕变亮就没反应了,是哪里有问题了?
[mw_shl_code=c,true]/////////////////////////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); //任务函数 //LED0任务 #define LED0_TASK_PRIO 7 //设置任务优先级 #define LED0_STK_SIZE 64//设置任务堆栈大小 OS_STK LED0_TASK_STK[LED0_STK_SIZE]; //任务堆栈 void led0_task(void *pdata); //任务函数 //LED1任务 #define LED1_TASK_PRIO 6 //设置任务优先级 #define LED1_STK_SIZE 64//设置任务堆栈大小 OS_STK LED1_TASK_STK[LED1_STK_SIZE]; //任务堆栈 void led1_task(void *pdata); //任务函数 //LCD任务 #define LCD_TASK_PRIO 5//设置任务优先级 #define LCD_STK_SIZE 64//设置任务堆栈 OS_STK LCD_TASK_STK[LCD_STK_SIZE]; //任务堆栈 void lcd_task(void *pdata); //LCD任务 void lcd_task(void *pdata) { while(1) { LCD_Clear(BLACK); delay_ms(10); LCD_Clear(WHITE); delay_ms(10); LCD_Clear(BLUE); delay_ms(10); }; }[/mw_shl_code]

最佳答案

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

回复【10楼】holy404290384: --------------------------------- 死在这里了 int fputc(int ch, FILE *f) {       while((USART1->SR&0X40)==0);//循环发送,直到发送完毕        USART1->DR = (u8) ch;       return ch; } 然后搜了论坛说是少了初始化uart_i ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
435
金钱
435
注册时间
2014-8-16
在线时间
56 小时
 楼主| 发表于 2015-4-28 20:39:23 | 显示全部楼层
回复【10楼】holy404290384:
---------------------------------
死在这里了
int fputc(int ch, FILE *f)
{      
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
return ch;
}

然后搜了论坛说是少了初始化uart_init(9600);  加了之后就可以了,
但是我觉得奇怪,为什么要初始化串口?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165225
金钱
165225
注册时间
2010-12-1
在线时间
2107 小时
发表于 2015-4-28 20:39:23 | 显示全部楼层
回复【11楼】fanleung:
---------------------------------
你用串口,不初始化串口,死机很正常。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

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

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-4-28 22:03:42 | 显示全部楼层
#define LCD_STK_SIZE                    64//设置任务堆栈

上面这个开大点,改成下面的试下

#define LCD_STK_SIZE                    512//设置任务堆栈
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

18

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
435
金钱
435
注册时间
2014-8-16
在线时间
56 小时
 楼主| 发表于 2015-4-28 22:15:19 | 显示全部楼层
回复【3楼】八度空间:
---------------------------------
改了,不行喔....
回复

使用道具 举报

18

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
435
金钱
435
注册时间
2014-8-16
在线时间
56 小时
 楼主| 发表于 2015-4-28 22:16:18 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
改了,不行喔...
回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5687
金钱
5687
注册时间
2013-11-22
在线时间
1195 小时
发表于 2015-4-28 22:27:10 | 显示全部楼层
回复【5楼】fanleung:
---------------------------------
检测下是不是创建任务出问题了
回复

使用道具 举报

18

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
435
金钱
435
注册时间
2014-8-16
在线时间
56 小时
 楼主| 发表于 2015-4-28 22:39:21 | 显示全部楼层
回复【6楼】lycreturn:
---------------------------------
int main(void)
 {
delay_init();       //延时函数初始化
NVIC_Configuration();  
LED_Init();    //初始化与LED连接的硬件接口
LCD_Init(); //LCD初始化
OSInit();    //初始化ucosII
OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建用户任务start_task
//指向任务的指针,传递给任务的参数*,任务堆栈的栈顶指针(增长向下),优先级
OSStart(); //启动ucosII
 }

  
//开始任务
void start_task(void *pdata)
{
    OS_CPU_SR cpu_sr=0;
pdata = pdata; 
   OSStatInit();
OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断)    
  OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);    
  OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_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(); //退出临界区(可以被中断打断)
}


我就只是看了任务调度这方面的内容,了解了ucosII各个文件的作用,这个实验的代码能看懂,就想试试加入lcd刷屏,类似三个跑马灯。
源码里ucosII的文件都没修改,不知道是不是延时或者是优先级导致程序跑飞?
回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5687
金钱
5687
注册时间
2013-11-22
在线时间
1195 小时
发表于 2015-4-28 22:48:16 | 显示全部楼层
回复【7楼】fanleung:
---------------------------------
sys.h 下的SYSTEM_SUPPORT_UCOS置 1 了没
回复

使用道具 举报

18

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
435
金钱
435
注册时间
2014-8-16
在线时间
56 小时
 楼主| 发表于 2015-4-28 22:52:06 | 显示全部楼层
回复【8楼】lycreturn:
---------------------------------
有的,其实就是在原子实验ucosII任务调度1的源码上添加的...
回复

使用道具 举报

3

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
434
金钱
434
注册时间
2013-3-18
在线时间
82 小时
发表于 2015-4-30 11:42:19 | 显示全部楼层
仿真一下,看看死在哪里了啊
回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2015-5-10 17:19:18 | 显示全部楼层
查查任务里是否有printf。有就要开串口。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 14:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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