初级会员

- 积分
- 123
- 金钱
- 123
- 注册时间
- 2015-7-11
- 在线时间
- 0 小时
|
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的这两句屏蔽,只在所任务创建好之后再加上就行。
|