一个C++版的嵌入式操作系统
原创文章,转载请注明出处!
现世面上流传着很多嵌入式操作系统,都已经非常优秀,但本人(Sam的博客-博客园)还是自己编写了一个RTOS,不敢说优秀,但绝对是使用起来最简单的.先看一个工程截图与一段main.cpp代码

#include "os.h" // 包含OS
osThread Task1; // 定义一个任务
TACK_DEF(Task1Stk,); // 为任务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系列,AVR系列等配置模板,全图形化操作,CM系列如图:

可见,这个OS使用起来非常简单,是其它OS不能比的.比如C++特性,细心的您可能已经发现了,任务的定义,互斥量的定义和其他OS明显不同,另外还有osEvnet类,osSemaphore类,osMailBox类,全都在os.h文件中定义,但凡了解C++与OS概念的人都能轻易使用.如互斥量的定义
class osMutex{
private:
U32 mut[]; // 隐藏细节
public:
osMutex(); // 构造函数,自动调用的互斥量初始化
void Wait(void); // 等待
void Release(void); // 释放
};
再说说这个OS的一些其它主要特性,
- Cortex-M系列内核不会关中断
- 基于优先级的时间片轮转调度算法,共7个优先级(实时, 高, 高于正常, 正常, 低于正常, 低, 空闲)
- 互斥量与信号量支持优先级抢占与优先级变更
- 互斥量支持嵌套与递归
- 支持任务在删除时同时清除正在处理的互斥量与信号量状态,不会影响其它任务
- 每个任务共16个事件,可以等待多个事件都发生或任意一个发生
- 源代码仅一个C文件与一个汇编文件,共不足1500行代码(不算其它体系结构的汇编文件)
- 性能: (在 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
该demo创建了3个任务,分别控制3个LED以不同的频率翻转并print一个字符串,欢迎下载评估交流
原创文章,转载请注明出处!
一个C++版的嵌入式操作系统的更多相关文章
- 【uTenux】学习一个嵌入式操作系统-uTenux
[这个是汇总] 最近有点时间,参加了EEPW论坛和悠龙咨询组织的一个嵌入式操作系统uTenux试用活动.本来想借助这个活动提供的开发板做一个小项目,奈何OS使用功底太次.于是,这个活动被我降低到了学习 ...
- 学习STM32,你不得不了解的五大嵌入式操作系统
学习STM32,你不得不了解的五大嵌入式操作系统 原标题:学习STM32,你不得不了解的五大嵌入式操作 ...
- 嵌入式操作系统VxWorks中网络协议存储池原理及实现
嵌入式操作系统VxWorks中网络协议存储池原理及实现 周卫东 蔺妍 刘利强 (哈尔滨工程大学自动化学院,黑龙江 哈尔滨,150001) 摘 要 本文讨论了网络协议存储池的基本原理和在嵌入式操作系 ...
- PC端操作系统、移动端操作系统、嵌入式操作系统
左侧部分已是历史的操作系统,右侧的还是活跃的操作系统.安卓系统Android 是Google开发的基于Linux平台的开源手机操作系统.它包括操作系统.用户界面和应用程序-- 移动电话工作所需的全部软 ...
- 招聘:有兴趣做一个与Android对等的操作系统么?
招聘:有兴趣做一个与Android对等的操作系统么? 前不久我发了一篇<八一八招聘的那些事儿>讲了我自己作为求职者对招聘的一些看法.那个时候我还在求职,对求职的结果还是挺满意的,五家公司面 ...
- 《一步一步写嵌入式操作系统》读书笔记1—Skyeye介绍、安装和HelloWorld
2013-11-14 最近在看<一步一步写嵌入式操作系统>,感觉此书甚好,许多地方讲得很清楚.可操作性强,计划边读边实践边写笔记,希望能够逐步熟悉嵌入式操作系统底层的东西,最终剪裁出一套实 ...
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(1)――基本概念
1引言 嵌入式系统定义义为:嵌入到对象体系中的专用计算机系统."嵌入性"."专用性"与"计算机系统"是嵌入式统的三个基本要素,对象系统则是指 ...
- RT-thread嵌入式操作系统相关的问题
面试中问到 RT-thread嵌入式操作系统相关的问题 RT-thread操作系统调度器的实现细节 RT-Thread中提供的线程调度器是基于优先级的全抢占式调度: 在系统中除了中断处理函数.调度器上 ...
- 【转】嵌入式操作系统VxWorks中TFFS文件系统的构建
时间:2005-02-20 来源:21IC中国电子网 作者:771所加固机工程部 蔡本华 高文炜 关键字:VxWorks TFFS 嵌入式操作系统 文件系统 摘要:目前的嵌入式 ...
随机推荐
- vue vue-cli安装
npm 更新 cnpm install -g npm Vue 的基本用法 Vue 相比于 React 和 Angular 容易上手多了,因此我对 Vue 的学习主要以文档为主,视频为辅(只有像我这种菜 ...
- WCF学习之旅—请求与答复模式和单向模式(十九)
一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答 ...
- .NET Core下的日志(1):记录日志信息
记录各种级别的日志是所有应用不可或缺的功能.关于日志记录的实现,我们有太多第三方框架可供选择,比如Log4Net.NLog.Loggr和Serilog 等,当然我们还可以选择微软原生的诊断机制(相关A ...
- SQL Server-分页方式、ISNULL与COALESCE性能分析(八)
前言 上一节我们讲解了数据类型以及字符串中几个需要注意的地方,这节我们继续讲讲字符串行数同时也讲其他内容和穿插的内容,简短的内容,深入的讲解,Always to review the basics. ...
- SQL语句优化
(1) 选择最有效率的表名顺序 ( 只在基于规则的优化器中有效 ) : ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名, FROM 子句中写在最后的表 ( 基础表dri ...
- Windows环境下vscode-go安装笔记
一.介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github.com/microsoft/vscode-go 这款插件的特性包括: ...
- 让BASH,VIM美美的Powerline
前言 鉴于BASH及其周边强大的工具以及VIM高效快捷,加上现在我工作重心转移到前端开发上,因此我华丽地转向Linux阵营(当然从最傻瓜式的Ubuntu开始啦!).但BASH和VIM默认样式确实颜值 ...
- javascript编程杂记
1.数组深复制 var obj =[1,2,4]: var obj2 = obj.slice(0);
- Vmware虚拟机安装Ubuntu并设置root登陆
主机操作系统是win7.在Ubuntu官网下好系统镜像.iso文件,安装好Vmware workstation软件 1 安装Ubuntu系统到Vmware虚拟机: 注意下面这步是无法直接设置账号为ro ...
- 使用STM32F4的CCM内存
使用STM32F4的CCM内存http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=604814&fromuid ...