该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(); } }
(哪里有啥好的网盘放文件呢??)