标签:
现世面上流传着很多嵌入式操作系统,都已经非常优秀,但本人还是自己编写了一个RTOS,不敢说优秀,但绝对是使用起来最简单的.先看一个工程结构截图与一段main.cpp代码
1 #include "os.h" // 包含OS 2 osThread Task1; // 定义一个任务 3 TACK_DEF(Task1Stk,256); // 为任务1定义一个栈空间 4 osMutex m1; // 定义一个互斥量 5 6 void Fun1(void){ 7 m1.Wait(); 8 // 其它代码 9 m1.Release(); 10 } 11 void Task1Fun(void){ 12 int id = Task1.Id; // 获取任务ID 13 Fun1(); 14 os::Pass(); // 释放CPU,切换任务 15 os::Delete(); // 删除该任务,即使没有这句,也会自动删除 16 } 17 void TaskMain(void){ 18 // 创建任务1,正常优先级 19 Task1.Create(Task1Fun,osPriorityNormal, Task1Stk,sizeof(Task1Stk)); 20 } 21 int main(void){ 22 // 其它外设初始化 23 os::Start(TaskMain); // 启动OS 24 }
不错,这样就可以了,OS按CPU体系结构被编译成OS_XXX.lib,并提供与CPU无关的头文件(仅此一个)以及一个配置文件(OS_Conf_CM.c),该配置文件每个工程一个副本,配置文件中的CM对应系结构为cortex-M系列,另外还有ARM系列,AVR系列共三个配置文件模板,全图形化鼠标操作,CM系列如图:
可见,这个OS使用起来非常简单,是其它OS不能比的.比如C++特性,细心的您可能已经发现了,任务的定义,互斥量的定义和其他OS明显不同,另外还有osEvnet类,osSemaphore类,osMailBox类,全都在os.h文件中定义,但凡了解C++与OS概念的人都能轻易使用.
再说说这个OS的一些其它主要特性,
不仅如此,该OS还有非常好的C++支持,因为作者修改了编译器的默认启动顺序,在清零存储器,全局变量赋初值后,运行main之前插入了两件事,初始化OS与初始化C++,这样你可以任意使用c++的构造函数,虚函数.即使你使勾选了<use micro lib>.这些事情是在OS配置文件中完成的.,所以上面的main.cpp代码没有OS初始化部分,也没有互斥量初始化部分
这是本人第一篇文章,后续会将OS的整个设计都展示出来
标签:
原文地址:http://www.cnblogs.com/samos2011/p/4682107.html