操作系统雏形

时间片轮转法。

#include”reg52.h”

 
 

sbit Led1=P0^0;

sbit Led2=P0^1;

sbit Led3=P0^2;

 
 

void Led1_Display()

{

    Led1=~Led1;

}

 
 

void Led2_Display()

{

    Led2=~Led2;

}

 
 

void Led3_Display()

{

    Led3=~Led3;

}

 
 

struct TASK

{

    unsigned int Run; //运行标记 0-不运行 1-运行

    unsigned int Timer; //计时器

    unsigned int SetTime; //运行时间间隔

    void (*TaskHook)();    //要运行函数指针

};

static struct TASK Tasks[]=

{

    {0,1000,1000,Led1_Display},

    {0,2000,2000,Led2_Display},

    {0,3000,3000,Led3_Display}

};

 
 

void TasksCount()

{

    unsigned int i;

    for(i=0;i<3;i++)

    {

        if(Tasks[i].Timer)

        {

            Tasks[i].Timer–;

            if(Tasks[i].Timer==0)

            {

                Tasks[i].Timer=Tasks[i].SetTime;

                Tasks[i].Run=1;

            }

        }

    }

}

 
 

void TasksProcess()

{

    unsigned int i;

    for(i=0;i<3;i++)

    {

        if(Tasks[i].Run==1)

        {

            Tasks[i].TaskHook();

            Tasks[i].Run=0;

        }

    }

}

 
 

void main()

{

    TMOD=0x01; //定时器工作模式1

    TH0=(65536-1000)/256; //定时器初始值晶振12MHz

    TL0=(65536-1000)%256;    //定时1ms

    EA=1; //开总中断

    ET0=1; //定时中断开

    TR0=1; //定时器开

 
 

    while(1)

    {

        TasksProcess();

    }

    
 

}

 
 

void T0_time() interrupt 1

{

    TH0=(65536-1000)/256; //定时器初始值,决定波特率,晶振12MHz

    TL0=(65536-1000)%256;    //定时1ms

 
 

    TasksCount();

}

上面就是一个操作系统的雏形了,对我们理解操作系统有很大帮助。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注