DIY的RTOS

该RTOS基于 Cortex-M3 (实际运行环境 STM32F103ZE)

 

基于时间片轮询;

非抢占式;

32bit优先级;

 线程间通信;

 

样例程序:

 

#include "STM32F10X.H"
#include "STM32F10X_EX.H"
#include "System.h"
#include "Main.h"

void OnlyOnce(void* Arg);
void GiveUpSomeTime(void* Arg);
void NeverGiveUp(void* Arg);
void Adder(void* Arg);
void Minuser(void* Arg);

int gTemp=0;

//TASK(TASK_NAME,TASK_CODE,TASK_PRIORITY,STACK_SIZE)
SYS_TASK(Task_OnlyOnce,OnlyOnce,1,0);
SYS_TASK(Task_GiveUpSomeTime,GiveUpSomeTime,1,0);
SYS_TASK(Task_NeverGiveUp,NeverGiveUp,1,0);

SYS_TASK(Task_Minuser,Minuser,1,0);
SYS_TASK(Task_Adder,Adder,1,0);




int main()
{
    STM32_HSE_CLK_INIT();
    //TASK_CREATE(TaskHandle,Arg)
    SYS_TASK_CREATE(Task_OnlyOnce,0);
    SYS_TASK_CREATE(Task_GiveUpSomeTime,33);
    SYS_TASK_CREATE(Task_NeverGiveUp,0);
    SYS_TASK_CREATE(Task_Minuser,0);
    SYS_TASK_CREATE(Task_Adder,0);
    SystemTaskSchedule();
}

void OnlyOnce(void* Arg)
{
    unsigned int Temp=0X0FFF;
    while(Temp--);
}

void GiveUpSomeTime(void* Arg)
{
    unsigned int Temp;
    unsigned int Temp2=(unsigned int)Arg;
    while(1)
    {
        Temp++;
        if(Temp%Temp2==0)
        {
            SystemTaskWait();
        }
    }
}
void NeverGiveUp(void* Arg)
{
    unsigned int Temp;
    while(1)
    {
        Temp+=3;
        if(Temp%333==0)Temp++;
    }
}

void Adder(void* Arg)
{
    while(1)
    {
        gTemp++;
        SystemTaskSendSingal((SystemTaskType*)&Task_Minuser,(void*)1);
        SystemTaskWait();
    }
    
}
void Minuser(void* Arg)
{
    unsigned int T;
    while(1)
    {
        T=(unsigned int)SystemTaskGetSingal();
        if(T)
        {
            gTemp--;
        }
        SystemTaskWait();
    }
}

 (哪里有啥好的网盘放文件呢??)

http://115.com/file/e74pf3ai#RTOS.rar

posted on 2012-04-25 21:03  苍涛暮雪  阅读(408)  评论(0)    收藏  举报

导航