一个C++版的嵌入式操作系统

    原创文章,转载请注明出处!

    现世面上流传着很多嵌入式操作系统,都已经非常优秀,但本人还是自己编写了一个RTOS,不敢说优秀,但绝对是使用起来最简单的.先看一个工程结构截图与一段main.cpp代码

main.cpp文件

#include "os.h"			// 包含OS
osThread Task1;			// 定义一个任务
TACK_DEF(Task1Stk,256);		// 为任务1定义一个栈空间
osMutex m1;			// 定义一个互斥量

void Fun1(void){
	m1.Wait();
	// 其它代码
	m1.Release();
}
void Task1Fun(void){ 
	int id = Task1.Id;	// 获取任务ID
	Fun1();
	os::Pass();		// 释放CPU,切换任务
	os::Delete();		// 删除该任务,即使没有这句,也会自动删除
}
void TaskMain(void){
	// 创建任务1,正常优先级
	Task1.Create(Task1Fun,osPriorityNormal, Task1Stk,sizeof(Task1Stk));
}
int main(void){			
	// 其它外设初始化	  
	os::Start(TaskMain);	// 启动OS
}

 

    不错,这样就可以了,OS按CPU体系结构被编译成OS_[CM0/CM3/ARM/AVR].lib,并提供与CPU无关的头文件(仅此一个)以及一个配置文件(OS_Conf_CM.c),该配置文件每个工程一个副本,配置文件中的CM对应系结构为cortex-M系列,另外还有ARM系列,全图形化鼠标操作,CM系列如图:

     可见,这个OS使用起来非常简单,因为您都不需要移植.是其它OS不能比的.比如C++特性,细心的您可能已经发现了,任务的定义,互斥量的定义和其他OS明显不同,另外还有osEvnet类,osSemaphore类,osMailBox类,全都在os.h文件中定义,但凡了解C++与OS概念的人都能轻易使用.

     再说说这个OS的一些其它主要特性,

  1. Cortex-M系列内核不会关中断
  2. 基于优先级的时间片轮转调度算法,共7个优先级(实时, 高, 高于正常, 正常, 低于正常, 低, 空闲)
  3. 互斥量与信号量支持优先级抢占与优先级变更
  4. 互斥量支持嵌套与递归
  5. 支持任务在删除时同时清除正在处理的互斥量与信号量状态,不会影响其它任务
  6. 每个任务共16个事件,可以等待多个事件都发生或任意一个发生
  7. 源代码仅一个C文件与一个汇编文件,共不足1500行代码(不算其它体系结构的汇编文件)
  8. 性能: (在STM32F103 24MHz 情况下测试得出, 单位us)
初始化系统,启动任务30.3
创建任务(无任务切换)15.7
创建任务(任务切换)16.3
删除任务(含切换)13.2
任务切换(正常7.9) (高于正常7.4) (高7.0) (实时6.5)
设置事件(含切换)8.3

    不仅如此,该OS还有非常好的C++支持,因为作者修改了编译器的默认启动顺序,在清零存储器,全局变量赋初值后,运行main之前插入了两件事,初始化OS与初始化C++,这样你可以任意使用c++的构造函数,虚函数.即使你使勾选了<use micro lib>.这些事情是在OS配置文件中完成的.,所以上面的main.cpp代码没有OS初始化部分,也没有互斥量初始化部分


 演示版下载地址:http://pan.baidu.com/s/1mgEdM20


原创文章,转载请注明出处!

 


 



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值