微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 128 板子上ucos iii不能进行任务调度

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

时间:10-02 整理:3721RD 点击:
大家好,我在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();                           //启动任务
}

用的是ucosii不是ucosiii

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top