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

转载于:https://www.cnblogs.com/xivisi/archive/2012/04/25/2470443.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值