128 板子上ucos iii不能进行任务调度

2019-07-15 13:32发布

大家好,我在atmega128上使用ucosii,有下面的程序,但是运行过程中不能进行任务调度,总是停留在任务1 什么原因呀,求助大家
//***********************************************************************
//                        包含文件
//***********************************************************************

#include <includes.h>



/* 在AVR Studio上仿真时值要设置的小些,如20 */
#define        LED_DELAY_MS        1000                                                                        /* LED 延时, 用于任务 */
#define        LED_ON()        { DDRB = 0xff; PORTB = 0xF0; }
#define        LED_OFF()        { DDRB = 0xff;PORTB = 0xff ;}

#define        LED_ON2()        { DDRB = 0xff; PORTB = 0x0F; }
#define        LED_OFF2()        { DDRB = 0xff;PORTB = 0xff ;}


// Variablen
OS_STK        Task1Stack[OS_TASK_1_STK_SIZE];                                   // startup task stack
OS_STK        Task2Stack[OS_TASK_2_STK_SIZE];
OS_STK        Task3Stack[OS_TASK_3_STK_SIZE];
OS_STK        Task4Stack[OS_TASK_4_STK_SIZE];

OS_EVENT * sem;

//***********************************************************************
//                        定义4个任务列表,主程序调用任务
//***********************************************************************

void task0( void * pdata )
{
        INT8U error;
       
        timerInit();       
        while(1)
        {
                OSSemPend( sem, 0, &error );
                LED_ON();                                                                                                //点亮LED的D1~D4
                OSTimeDlyHMSM(0,0,0,2*LED_DELAY_MS );
                OSSemPost( sem );
        }
       
}

void task1(void * pdata )
{
        INT8U error;
       
        while(1)
        {
                OSSemPend(sem, 0, &error);
                LED_OFF();                                                                                                //熄灭LED的D1~D4
                OSTimeDlyHMSM(0,0,0,LED_DELAY_MS );
                OSSemPost(sem);
        }
       
}

void task2(void * pdata)                                                                            //点亮LED的D5~D8
{  
   while(1)
        {
                LED_ON2();
                OSTimeDlyHMSM(0,0,0,2*LED_DELAY_MS );
        }       
}

void task3(void * pdata )
{
        INT8U error;
       
        while(1)
        {
                OSSemPend(sem, 0, &error);
                LED_OFF2();                                                                                                 //熄灭LED的D5~D8
                OSTimeDlyHMSM(0,0,0,LED_DELAY_MS );
                OSSemPost(sem);
        }
       
}


//***********************************************************************
//                        启动4个任务,切换执行
//***********************************************************************

int        main()
{
        OSInit();                             //初始化
    sem = OSSemCreate( 1 );                                  //建立信号量
        OSTaskCreate( task0, (void *)OS_TASK_1_STK_SIZE, &Task1Stack[OS_TASK_1_STK_SIZE-1], OS_TASK_1_PRIO );//创建任务
        OSTaskCreate( task1, (void *)OS_TASK_2_STK_SIZE, &Task2Stack[OS_TASK_2_STK_SIZE-1], OS_TASK_2_PRIO );
        OSTaskCreate( task2, (void *)OS_TASK_3_STK_SIZE, &Task3Stack[OS_TASK_3_STK_SIZE-1], OS_TASK_3_PRIO );
        OSTaskCreate( task3, (void *)OS_TASK_4_STK_SIZE, &Task4Stack[OS_TASK_4_STK_SIZE-1], OS_TASK_4_PRIO );
        OSStart();                           //启动任务
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。