OpenEdv-开源电子网

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

新手开始看UCOSiii,有几个不明白的地方,求教

[复制链接]

18

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2015-7-11
在线时间
0 小时
发表于 2015-10-7 16:34:14 | 显示全部楼层 |阅读模式
5金钱
刚开始看UCOS
我根据给的UCOSiii创建任务例程来改的程序,原来只有两个任务,两个任务同时开始计数,LCD显示(每次计数改变颜色)第一个任务记到5次就停掉任务2。
我把他改成3个任务同时计数,想让第三个任务记到10把任务1停掉,现在代码不报错,但是任务3并没有执行。
仿真时task3进不去。
 OSTaskCreate ((OS_TCB *)&Task3_TaskTCB,中Task3_TaskTCB的值全是0

查到的说高优先级没有延时那么低优先级不能运行。
其他的就不清楚了,ucos几乎是小白

以下是粘过来的代码,请大家帮我看看,告诉我问题出在哪

//任务3
#define TASK3_TASK_PRIO 6
#define TASK3_STK_SIZE 128
OS_TCB Task3_TaskTCB;
CPU_STK TASK3_TASK_STK[TASK3_STK_SIZE];
void task3_task(void *p_arg);

 OSTaskCreate ((OS_TCB *)&Task3_TaskTCB,
       (CPU_CHAR  *) "task3 task",
                (OS_TASK_PTR) task3_task,
                (void      *)0,
(OS_PRIO    )TASK3_TASK_PRIO,
(CPU_STK   *)&TASK3_TASK_STK[0],
(CPU_STK_SIZE)TASK3_STK_SIZE/10,
(CPU_STK_SIZE)TASK3_STK_SIZE,
(OS_MSG_QTY  )0,
(OS_TICK     )0,
(void    *)0,
(OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR  *)&err);
  OS_CRITICAL_EXIT(); 
OSTaskDel((OS_TCB*)0,&err); 

void task3_task(void *p_arg)
{
u8 task3_num=0;
OS_ERR err;
CPU_SR_ALLOC();
p_arg = p_arg;

POINT_COLOR = BLACK;
OS_CRITICAL_ENTER();
LCD_DrawRectangle(5,220,234,314); 
LCD_DrawLine(5,240,234,240); //????
POINT_COLOR = BLUE;
LCD_ShowString(6,221,234,16,16,"Task3 Run:000");
OS_CRITICAL_EXIT();
while(1)
{
task3_num++;
//LED0= ~LED0;
printf("????3??????????%d??\r\n",task3_num);
if(task3_num==10) 
{
OSTaskDel((OS_TCB*)&Task1_TaskTCB,&err);
printf("????3??????????1!\r\n");
}
LCD_Fill(6,241,233,313,lcd_discolor[task3_num%14]); 
LCD_ShowxNum(86,221,task3_num,3,16,0x80); 
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); 

}
}

最佳答案

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

啊,我知道了, 再原例程里task2在创建时已经写了:         OS_CRITICAL_EXIT(); OSTaskDel((OS_TCB*)0,&err; 大意就是任务创建完毕,在此之前用户根据需求来定义每个任务的基地址栈区之类的定义。这两句之后就是具体的每个任务的功能定义。 把task2的这两句屏蔽,只在所任务创建好之后再加上就行。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2015-7-11
在线时间
0 小时
 楼主| 发表于 2015-10-7 16:34:15 | 显示全部楼层
啊,我知道了,
再原例程里task2在创建时已经写了:
        OS_CRITICAL_EXIT();
OSTaskDel((OS_TCB*)0,&err;
大意就是任务创建完毕,在此之前用户根据需求来定义每个任务的基地址栈区之类的定义。这两句之后就是具体的每个任务的功能定义。
把task2的这两句屏蔽,只在所任务创建好之后再加上就行。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-8 23:42:23 | 显示全部楼层
帮顶....
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 05:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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