嵌入式操作系统_一个C++版的嵌入式操作系统
![](/assets/blank.gif)
现世面上流传着很多嵌入式操作系统,都已经非常优秀,但本人(Sam的博客-博客园)还是自己编写了一个RTOS,不敢说优秀,但绝对是使用起来最简单的.先看一个工程截图与一段main.cpp代码
![](/assets/blank.gif)
#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; // 获取任务IDFun1();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系列如图:
![](/assets/blank.gif)
可见,这个OS使用起来非常简单,是其它OS不能比的.比如C++特性,细心的您可能已经发现了,任务的定义,互斥量的定义和其他OS明显不同,另外还有osEvnet类,osSemaphore类,osMailBox类,全都在os.h文件中定义,但凡了解C++与OS概念的人都能轻易使用.如互斥量的定义
class osMutex{private:U32 mut[4]; // 隐藏细节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一个字符串,欢迎下载评估交流
嵌入式物联网资料分享交流群:332650978 入群有全套学习视频资料电子书免费赠送!
参考资料:
物联网开发入门直播课 - 嵌入式/物联网-C语言编程基础www.makeru.com.cnC语言_嵌入式www.makeru.com.cn
![](/assets/blank.gif)
嵌入式开发直播课 - 带你提升C编程能力www.makeru.com.cn
![](/assets/blank.gif)
嵌入式底层开发 - 夯实C语言,从小白到大牛的进阶之路!www.makeru.com.cn
![](/assets/blank.gif)
嵌入式开发直播课 - 嵌入式-指针www.makeru.com.cn嵌入式底层开发 - 指针"换装",你还认识吗?www.makeru.com.cn
![](/assets/blank.gif)
嵌入式操作系统_一个C++版的嵌入式操作系统相关推荐
- 一个完整的嵌入式程序_放下偏见,原来嵌入式程序员如此“妖娆”!
感兴趣的小伙伴可以来我的Java交流群,可以获取免费的学习资料 828 697 593 对Java技术,架构技术感兴趣的同学,欢迎加群,一起学习,相互讨论. 竟然都看到最后了,给小编点个关注吧,小编还 ...
- 傻瓜式动画制作软件_一个傻瓜版的动画制作软件——万彩动画大师
之前介绍了文字视频的制作软件,但后来发现太单一了,后面又找到了这款动画视频制作软件--万彩动画大师 首先来看看软件的首页 有很多的模板,还有企业版.教育版.个人版,有很多的选择,有横版的.有竖版的,来 ...
- 麒麟 嵌入式linux操作系统_体验了一下北韩操作系统RedStar红星OS;国产linux优麒麟...
看到一个有意思的系统,红星OS3.0,也没敢在自己电脑上安装,就在virtualbox上安装体验了一下. 系统镜像2.4g,虚拟机设置2g内存,20g存储空间. https://bbs.zsxwz.c ...
- mysql管理器源码_一个HelloWorld版的MySQL数据库管理器的设计与实现(源码)
2011年,实习期间写了一个简单的数据库管理器. 今天,特意整理了下,分享给大家. 有兴趣的同学,可以下载源码,瞧瞧. 源码只有4个类:LoginGUI,DatabaseGUI,Record,MySQ ...
- java 一个线程占多少内存_一个jvm线程占用多少操作系统内存
找到关键点 在看到12452个等待在CachedBnsClient.run的业务的一瞬间笔者就意识到,肯定是这边的线程导致对外内存泄露了.下面就是根据线程大小计算其泄露内存量是不是确实能够引起OOM了 ...
- chrome操作系统_如何在Chrome和Chrome操作系统上使用Google Play电影
chrome操作系统 () Google Play Movies & TV is a streaming service that lets you watch videos via a we ...
- 一个完整的嵌入式程序_嵌入式入门-从STM32CudeMX、FreeRtos、Proteu仿真开始
系统 嵌入式是什么呢? 嵌入式开发就是指在嵌入式操作系统下进行开发,常用的嵌入式操作系统有FreeRtos,ucos,linux,android等.与单片机开发最大的不同就是裸跑与跑系统的区别.嵌入式 ...
- 《嵌入式》复习资料公共版
嵌入式 期末复习资料,把word文件摘录到博客中.许多内容很有用. 第一章 根据IEEE(国际电气和电子工程师协会)的定义: v 嵌入式系统是"用于控制.监视或者辅助某个设备.机器或工厂运 ...
- Linux发行版在嵌入式设备上的未来
我们正在进入一个世界,在这个世界中,不同类型的开发者,包括云开发者和嵌入式开发者,在各自的领域中工作,最终将朝着一个目标合并.因此,公司不再将开发人员及其生产的技术视为辅助性外部服务,而是其DNA的组 ...
最新文章
- 编程珠玑第八章——分治算法求解数组中的最大的连续和
- 添加vlan后无法上网_KTV多SSID绑定VLAN实用案例,值得一看的干货
- 图卷积神经网络(part6)--GAT
- Vmware上安装RedHat Linux 7.3操作系统手册
- LeetCode 第 21 场双周赛(779/1913,前40.7%)
- Nginx应用场景之静态服务器
- tomcat集群的failover机制
- Soar:一款 Web 可视化的 SQL 优化工具
- Bat+PowerShell实现windows网络一键共享
- Java链表-合并两个有序链表
- ASA Failover
- EMAC和PHY层之间的关系以及在通信架构划分情况
- supermap mysql_超图supermap sdx数据库用sql实现空间查询
- GPS 点可视化(英文地图打点,热力图,测距)
- 关于项目管理那档子事儿
- Bin Packing Problem
- 在D-H参数法里为什么只用四个参数就能完全定义一个具有6自由度的坐标系
- AS3:fla swf 坐标 导出类
- 指标实现层级_有了指标怎么用层次分析法建立模型?
- 发那科机器人GI分配_发那科机器人调试离线编程与应用 “I/O的分配”