uCOS-IIwilliam hill官网
直播中

337881256

10年用户 9经验值
擅长:嵌入式技术 接口/总线/驱动 控制/MCU
私信 关注
[问答]

uC/OS-II,可以运行单任务,但不能运行多任务

本帖最后由 337881256 于 2014-9-21 21:11 编辑

uC/OS-II,我的多任务是让两个LED灯闪烁,有两个任务。但是程序只运行那个优先级高的任务。
请问这是为什么?


附:main函数

int  main (void)
{
/*#if (OS_TASK_NAME_SIZE > 7) && (OS_TASK_STAT_EN > 0)
    CPU_INT08U  err;
#endif*/
/*-----------------------------------------------------------------------------------*/
        DisableInterrupts();

        
        BSP_Init();
        
        OSInit();
               

        EnableInterrupts();
        
        OSTaskCreate(Task_LED2,(void *)0,                          //创建任务2
           &task_led2_stk[TASK_LED2_STK_SIZE-1], TASK_LED2_PRIO);
        
        OSTaskCreate(Task_LED1,(void *)0,                          //创建任务1
           &task_led1_stk[TASK_LED1_STK_SIZE-1], TASK_LED1_PRIO);
           
        

        OSStart();
        
        return 0;
        

/*-----------------------------------------------------------------------------------*/
/*#if (OS_TASK_NAME_SIZE > 7) && (OS_TASK_STAT_EN > 0)
    OSTaskNameSet(APP_TASK_START_PRIO, (CPU_CHAR *)"Startup", &err);
#endif*/
                            /* Start multitasking (i.e. give control to uC/OS-II)       */
}


回帖(8)

life_风雨中

2014-9-24 22:33:40
高优先级任务一直占着CPU,低优先级任务得不到执行。
举报

life_风雨中

2014-9-24 22:35:13
每个任务都要释放一下CPU,在任务中加入一个系统延时函数就好了。(不要太短,自己把握时间)
1 举报

668301

2016-7-17 15:27:11
osdelay(), 把它加入到task1的下边
举报

706758

2016-7-24 21:55:35
           首先检查你的最大任务数是多少 不能设太少 如果你有两个任务 则要设置最大任务数为4个 两个留给系统。
然后检查你的两个任务的延时是用普通的延时还是,OS自带OSTimeDly的延时。如果你用普通的延时 那么只能运行 第一个任务!你这个最大的可能性是 任务延时不是系统的OSTimeDly来延时 而是用自己写普通延时来延时,那样子任务无法调度!
举报

叶波

2016-8-25 10:49:02
为什么我看不到你完整的程序啊
举报

w23pp32

2016-8-31 15:48:53
把完整的代码贴出来,这写太简单了,
估计可能是:你的延时函数是自己写的,不是调用的OSTimeDlyHMSM这个函数,在ucos系统中,任务要通过这个函数释放对CPU的占有权,不能是自己定义的一个delay函数
举报

fengyu02412

2016-9-9 12:56:55
估计是优先级的问题
举报

刘超

2017-3-7 16:28:47
7#说的很准确,用一种格式的任务去调用就行
举报

更多回帖

发帖
×
20
完善资料,
赚取积分