现世面上流传着很多嵌入式操作系统,都已经非常优秀,但本人(Sam的博客-博客园)还是自己编写了一个RTOS,不敢说优秀,但绝对是使用起来最简单的.先看一个工程截图与一段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;         // 获取任务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系列如图:

可见,这个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的一些其它主要特性,

  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

该demo创建了3个任务,分别控制3个LED以不同的频率翻转并print一个字符串,欢迎下载评估交流

嵌入式物联网资料分享交流群:332650978 入群有全套学习视频资料电子书免费赠送!

参考资料:

物联网开发入门直播课 - 嵌入式/物联网-C语言编程基础​www.makeru.com.cnC语言_嵌入式​www.makeru.com.cn

嵌入式开发直播课 - 带你提升C编程能力​www.makeru.com.cn

嵌入式底层开发 - 夯实C语言,从小白到大牛的进阶之路!​www.makeru.com.cn

嵌入式开发直播课 - 嵌入式-指针​www.makeru.com.cn嵌入式底层开发 - 指针"换装",你还认识吗?​www.makeru.com.cn

嵌入式操作系统_一个C++版的嵌入式操作系统相关推荐

  1. 一个完整的嵌入式程序_放下偏见,原来嵌入式程序员如此“妖娆”!

    感兴趣的小伙伴可以来我的Java交流群,可以获取免费的学习资料 828 697 593 对Java技术,架构技术感兴趣的同学,欢迎加群,一起学习,相互讨论. 竟然都看到最后了,给小编点个关注吧,小编还 ...

  2. 傻瓜式动画制作软件_一个傻瓜版的动画制作软件——万彩动画大师

    之前介绍了文字视频的制作软件,但后来发现太单一了,后面又找到了这款动画视频制作软件--万彩动画大师 首先来看看软件的首页 有很多的模板,还有企业版.教育版.个人版,有很多的选择,有横版的.有竖版的,来 ...

  3. 麒麟 嵌入式linux操作系统_体验了一下北韩操作系统RedStar红星OS;国产linux优麒麟...

    看到一个有意思的系统,红星OS3.0,也没敢在自己电脑上安装,就在virtualbox上安装体验了一下. 系统镜像2.4g,虚拟机设置2g内存,20g存储空间. https://bbs.zsxwz.c ...

  4. mysql管理器源码_一个HelloWorld版的MySQL数据库管理器的设计与实现(源码)

    2011年,实习期间写了一个简单的数据库管理器. 今天,特意整理了下,分享给大家. 有兴趣的同学,可以下载源码,瞧瞧. 源码只有4个类:LoginGUI,DatabaseGUI,Record,MySQ ...

  5. java 一个线程占多少内存_一个jvm线程占用多少操作系统内存

    找到关键点 在看到12452个等待在CachedBnsClient.run的业务的一瞬间笔者就意识到,肯定是这边的线程导致对外内存泄露了.下面就是根据线程大小计算其泄露内存量是不是确实能够引起OOM了 ...

  6. chrome操作系统_如何在Chrome和Chrome操作系统上使用Google Play电影

    chrome操作系统 () Google Play Movies & TV is a streaming service that lets you watch videos via a we ...

  7. 一个完整的嵌入式程序_嵌入式入门-从STM32CudeMX、FreeRtos、Proteu仿真开始

    系统 嵌入式是什么呢? 嵌入式开发就是指在嵌入式操作系统下进行开发,常用的嵌入式操作系统有FreeRtos,ucos,linux,android等.与单片机开发最大的不同就是裸跑与跑系统的区别.嵌入式 ...

  8. 《嵌入式》复习资料公共版

    嵌入式 期末复习资料,把word文件摘录到博客中.许多内容很有用. 第一章 根据IEEE(国际电气和电子工程师协会)的定义: v  嵌入式系统是"用于控制.监视或者辅助某个设备.机器或工厂运 ...

  9. Linux发行版在嵌入式设备上的未来

    我们正在进入一个世界,在这个世界中,不同类型的开发者,包括云开发者和嵌入式开发者,在各自的领域中工作,最终将朝着一个目标合并.因此,公司不再将开发人员及其生产的技术视为辅助性外部服务,而是其DNA的组 ...

最新文章

  1. 编程珠玑第八章——分治算法求解数组中的最大的连续和
  2. 添加vlan后无法上网_KTV多SSID绑定VLAN实用案例,值得一看的干货
  3. 图卷积神经网络(part6)--GAT
  4. Vmware上安装RedHat Linux 7.3操作系统手册
  5. LeetCode 第 21 场双周赛(779/1913,前40.7%)
  6. Nginx应用场景之静态服务器
  7. tomcat集群的failover机制
  8. Soar:一款 Web 可视化的 SQL 优化工具
  9. Bat+PowerShell实现windows网络一键共享
  10. Java链表-合并两个有序链表
  11. ASA Failover
  12. EMAC和PHY层之间的关系以及在通信架构划分情况
  13. supermap mysql_超图supermap sdx数据库用sql实现空间查询
  14. GPS 点可视化(英文地图打点,热力图,测距)
  15. 关于项目管理那档子事儿
  16. Bin Packing Problem
  17. 在D-H参数法里为什么只用四个参数就能完全定义一个具有6自由度的坐标系
  18. AS3:fla swf 坐标 导出类
  19. 指标实现层级_有了指标怎么用层次分析法建立模型?
  20. 发那科机器人GI分配_发那科机器人调试离线编程与应用 “I/O的分配”

热门文章

  1. Python接口测试之moco
  2. Html5的vedio视频播放
  3. 《C++ Primer Plus》第15章 友元、异常和其他 学习笔记
  4. 第二次冲刺个人博客02
  5. Django的virtualenv环境搭建
  6. F2工作流引擎之 工作流运转模型(三)
  7. x86 服务器常见问题和故障诊断流程
  8. Cache 和 Buffer 有什么区别
  9. 大规模数据生成 (500万条数据)
  10. 查看局域网内所有ip 和 mac