⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 PowerPC 8240 的ucosII 移植代码 开发平台为 DiabData
💻 C
字号:
/*
 * file: main.c
 *
 * PowerPC Main application source file
 * for UCOS-II
 *
 * Author: Ernie Price
 * eprice@bitwise.net
 *
 */
#include "includes.h"

// function prototypes
       void   main      (void);
static void   Task_Four (void *data);
static void   Task_Two  (void *data);
static void   Task_Three(void *data);
static void   Task_One  (void *data);


// defines
#define TASK_STK_SIZE     1024u

#define TASK_ONE_DLY    30u              // in ticks
#define TASK_TWO_DLY    40u 
#define TASK_THREE_DLY  50u 
#define TASK_FOUR_DLY   60u 

#define TASK_ONE_LED    1u              // bit mask
#define TASK_TWO_LED    2u 
#define TASK_THREE_LED  4u 
#define TASK_FOUR_LED   8u 

// priorities
enum t_prio { TASK_ONE_PRIO = 2, TASK_TWO_PRIO, TASK_THREE_PRIO, TASK_FOUR_PRIO };

// module scope variables
static INT32S  ctrTask_One;
static INT32S  ctrTask_Two;
static INT32S  ctrTask_Three;
static INT32S  ctrTask_Four;

static OS_STK  Task_FourStk  [TASK_STK_SIZE];
static OS_STK  Task_ThreeStk [TASK_STK_SIZE];
static OS_STK  Task_TwoStk   [TASK_STK_SIZE];
static OS_STK  Task_OneStk   [TASK_STK_SIZE];

static INT8U   Task_FourData;
static INT8U   Task_ThreeData;
static INT8U   Task_TwoData;
static INT8U   Task_OneData;

/*
    \breif main () 
*/ 
void main (void)
{
    INT32U  idx;
    
    for (idx = 0u; idx < TASK_STK_SIZE; idx++)   // fill stacks with known pattern
    {
        Task_ThreeStk[idx] = 0xE0E1E2E3;
        Task_TwoStk  [idx] = 0xE0E1E2E3;
        Task_OneStk  [idx] = 0xE0E1E2E3;
        Task_FourStk [idx] = 0xE0E1E2E3;
    }

    epic_InitEPIC();                        // intialize the interrupt controller
    i2c_Init();                             // intialize the I2C unit

    OSInit ();                              // intialize the OS

    OSTaskCreate (  Task_One,
                    (void *)&Task_OneData,
                    (void *)&Task_OneStk[TASK_STK_SIZE - 1],
                    TASK_ONE_PRIO);

    OSTaskCreate (  Task_Two,
                    (void *)&Task_TwoData,
                    (void *)&Task_TwoStk[TASK_STK_SIZE - 1],
                    TASK_TWO_PRIO);

    OSTaskCreate (  Task_Three,
                    (void *)&Task_ThreeData,
                    (void *)&Task_ThreeStk[TASK_STK_SIZE - 1],
                    TASK_THREE_PRIO);

    OSTaskCreate (  Task_Four,
                    (void *)&Task_FourData,
                    (void *)&Task_FourStk[TASK_STK_SIZE - 1],
                    TASK_FOUR_PRIO);

    OSStart();                              // never returns...
}

/*
    \breif demo task one
*/ 
static void Task_One (void * data)
{
    URP(data);

    decr_Start (OS_TICKS_PER_SEC);        // start the OS ticker

    OSStatInit ();

    for(;;)
    {
        OSTimeDly (TASK_ONE_DLY);
        LedManipulate(TASK_ONE_LED);
        ctrTask_One++;
    }
}

/*
    \breif demo task two
*/ 
static void Task_Two (void *data)
{
    URP(data);

    for(;;)
    {
        OSTimeDly (TASK_TWO_DLY);
        LedManipulate(TASK_TWO_LED);
        ctrTask_Two++;
    }
}

/*
    \breif demo task three
*/ 
static void Task_Three (void *data)
{
    URP(data);

    for(;;)
    {
        OSTimeDly (TASK_THREE_DLY);
        LedManipulate(TASK_THREE_LED);
        if (!ctrTask_Three++)
        {
            i2c_Enable();
        }
        i2c_SendChar(0xa8);
    }
}

/*
    \breif demo task four
*/ 
static void Task_Four (void *data)
{
    URP(data);

    ctrTask_Four = 0;

    for(;;)
    {
        ctrTask_Four++;
        OSTimeDly (TASK_FOUR_DLY);
        LedManipulate(TASK_FOUR_LED);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -