serial.c

来自「一个简单的Rots源码」· C语言 代码 · 共 130 行

C
130
字号
/*********************************************************************************************************
**                                        Small RTOS
**                                   The Real-Time Kernel
**                           (c) Copyright 2002-2003, chenmingji
**                                     All Rights Reserved
**                                      V1.50.0 内部测试版
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: serial.c
**创   建   人: 陈明计
**最后修改日期: 2004年8月8日
**描        述: serial源代码。
**
********************************************************************************************************/
#include "config.h"

void TaskA(void *Pdata);
void TaskB(void *Pdata);
void TaskC(void *Pdata);
void TaskD(void *Pdata);

OS_STK        TaskStk[4][512];

                            int main(void)
{
    OSInit();
    OSTaskCreate(TaskA, NULL, &(TaskStk[0][512 - 1]), 3, 0, 512, USR32Mode, 0);

    while(1)
    {
        PCON = PCON | 0x01;                     /* CPU进入休眠状态 */
    }
}

                            void putch(uint8 Data)
{
    uint16 i;

    U0THR = Data;
    i = 2048;
    do
    {
    } while (--i != 0);
    
}

OS_EVENT *SerialSem;

                            void TaskA(void *Pdata)
{
    Pdata = Pdata;
    
    TargetInit();

    OSTaskCreate(TaskB, NULL, &(TaskStk[1][512 -1]), 4, 1, 512, USR32Mode, 0);
    OSTaskCreate(TaskC, NULL, &(TaskStk[2][512 -1]), 5, 2, 512, USR32Mode, 0);
    OSTaskCreate(TaskD, NULL, &(TaskStk[3][512 -1]), 6, 3, 512, USR32Mode, 0);
    
	SerialSem = OSSemCreate(1);
    while (1)
    {
        OSSemPend(SerialSem, 0);
        putch('A');
        putch('0');
        putch('1');
        putch('2');
        putch('3');
        putch('\n');
        OSSemPost(SerialSem);
        OSTimeDly(T0TC % 10 + 1);
    } 
}

                            void TaskB(void *Pdata)
{
    Pdata = Pdata;

    while (1)
    {
        OSSemPend(SerialSem, 0);
        putch('B');
        putch('0');
        putch('1');
        putch('2');
        putch('3');
        putch('\n');
        OSSemPost(SerialSem);
        OSTimeDly(T0TC % 10 + 1);
    } 
}

                            void TaskC(void *Pdata)
{
    Pdata = Pdata;

    while (1)
    {
        OSSemPend(SerialSem, 0);
        putch('C');
        putch('0');
        putch('1');
        putch('2');
        putch('3');
        putch('\n');
        OSSemPost(SerialSem);
        OSTimeDly(T0TC % 10 + 1);
    } 
}

                            void TaskD(void *Pdata)
{
    uint8 i;

    Pdata = Pdata;
    
    while (1)
    {
        OSSemPend(SerialSem, 0);
        for (i = 0; i < 100; i++)
        {
            putch('D');
            putch('E');
            putch('F');
            putch('G');
            putch(' ');
        }
        OSSemPost(SerialSem);
    } 
}

⌨️ 快捷键说明

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