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

📄 test.c

📁 实现Fujitsu-FFMC-16-V120 ucos系统移植
💻 C
字号:
/*
*********************************************************************************************************
*                                               uC/OS-II
*                                         The Real-Time Kernel
*
*                         (c) Copyright 1992-1999, Jean J. Labrosse, Weston, FL
*                                          All Rights Reserved
*
*
*                                       Fujitsu MB90F543 Example
*
* File         : TEST.C
* By           : Andrey Mozzhevilov
*
*********************************************************************************************************
*/

#include "includes.h"

/*
*********************************************************************************************************
*                                              CONSTANTS
*********************************************************************************************************
*/

#define          TASK_STK_SIZE     128                /* Size of each task's stacks (# of WORDs)       */

#define          TASK_START_PRIO    11                /* Application tasks priorities                  */
#define          TASK_1_PRIO        12
#define          TASK_2_PRIO        1
#define          TASK_3_PRIO        5

/*
*********************************************************************************************************
*                                              VARIABLES
*********************************************************************************************************
*/
OS_STK           TaskStartStk[TASK_STK_SIZE];         /* Startup    task stack                         */
OS_STK           Task1Stk[TASK_STK_SIZE];             /* Task #1    task stack                         */
OS_STK           Task2Stk[TASK_STK_SIZE];             /* Task #2    task stack                         */
OS_STK           Task3Stk[TASK_STK_SIZE];             /* Task #3    task stack                         */

OS_EVENT        *TxSem;
OS_EVENT        *RxSem;

/*
*********************************************************************************************************
*                                         FUNCTION PROTOTYPES
*********************************************************************************************************
*/

        void     TaskStart(void *data);               /* Function prototypes of tasks                  */
static  void     TaskStartCreateTasks(void);
        void     Task1(void *data);
        void     Task2(void *data);
        void     Task3(void *data);

extern void InitIrqLevels(void);


/*
*********************************************************************************************************
*                                            hardware_init
*********************************************************************************************************
*/

void hardware_init (void)
{

    off(RED_LED);
    off(YELLOW_LED);
    off(GREEN_LED);

    direct(RED_LED,O);
    direct(YELLOW_LED,O);
    direct(GREEN_LED,O);

}

/*
*********************************************************************************************************
*                                                  MAIN
*********************************************************************************************************
*/
void main (void)
{

    hardware_init();

    InitIrqLevels();

    OSInit();                                              /* Initialize uC/OS-II                      */

    OSTaskCreate   (TaskStart,
                   0,
                   &TaskStartStk[TASK_STK_SIZE - 1],
                   TASK_START_PRIO);

    OSStart();                                             /* Start multitasking                       */
}

/*
*********************************************************************************************************
*                                               STARTUP TASK
*********************************************************************************************************
*/

void  TaskStart (void *data)
{
    data = data;                                           /* Prevent compiler warning                 */

    OS_ENTER_CRITICAL();                                   /* Install uC/OS-II's clock tick ISR        */
    SETUP_SYSTEM_TICK();
    OS_EXIT_CRITICAL();

/*    OSStatInit();                                        /* Initialize uC/OS-II's statistics         */

    TxSem = OSSemCreate(0);
    RxSem = OSSemCreate(0);

    TaskStartCreateTasks();                                /* Create all other tasks                   */

    for (;;) {
      OSTimeDly(5);                                        /* Wait 5 ticks                             */
      cpl(GREEN_LED);
    }
}

/*
*********************************************************************************************************
*                                             CREATE TASKS
*********************************************************************************************************
*/

static  void  TaskStartCreateTasks (void)
{
    OSTaskCreate   (Task1,
                   0,
                   &Task1Stk[TASK_STK_SIZE - 1],
                   TASK_1_PRIO);

    OSTaskCreate   (Task2,
                   0,
                   &Task2Stk[TASK_STK_SIZE - 1],
                   TASK_2_PRIO);

    OSTaskCreate   (Task3,
                   0,
                   &Task3Stk[TASK_STK_SIZE - 1],
                   TASK_3_PRIO);
}


void  Task1 (void *data)
{
    data = data;
    for (;;) {
        on(YELLOW_LED);
        OSSemPost(TxSem);            /* Send message to Task #2 */
        OSTimeDly(1);
    }
}

void  Task2 (void *data)
{
    INT8U  err;

    data = data;
    for (;;) {
        OSSemPend(TxSem, 0, &err);   /* Wait for message from Task #1 */
        off(YELLOW_LED);
    }
}


/*
*********************************************************************************************************
              Task 3. Wait sem from isr
*********************************************************************************************************
*/

void  Task3 (void *data)
{
    INT8U  err;

    data = data;

    TMCSR1_CSL0 = 0;
    TMCSR1_CSL1 = 1;                 /* 2 us clock source                                */

    TMCSR1_MOD0 = 0;
    TMCSR1_MOD1 = 0;
    TMCSR1_MOD2 = 0;

    TMCSR1_OUTE = 0;                 /* TOUT is a general-purpose port                   */
    TMCSR1_RELD = 1;                 /* Reload mode                                      */

    TMRLR1 = 250;                    /* 500 mks                                          */

    TMCSR1_INTE = 1;                 /* Interrupt enable                                 */
    TMCSR1_UF = 0;                   /*                                                  */
    TMCSR1_CNTE = 1;                 /* Cnt enable                                       */
    TMCSR1_TRG = 1;                  /* Start count                                      */

    ICR12 = 5;

    for (;;) {
        OSSemPend(RxSem, 0, &err);   /* Wait for sem from ISR                            */
        off(RED_LED);
    }
}

__interrupt void RELOAD_TIMER1_ISR(void)
{
    cpl(RED_LED);
    C_ISR_ENTER();

    TMCSR1_UF = 0;
    OSSemPost(RxSem);
}


⌨️ 快捷键说明

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