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

📄 serial.c

📁 一个小型的实时操作系统 对理解操作系统有很好的帮助
💻 C
字号:
/*********************************************************************************************************
**                                        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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -