作为基于ARM7、Cortex-M3硬件开发的嵌入式工程师,本人一直反对使用RTOS。不仅因为不恰当的使用RTOS会给项目带来额外的稳定性风险,更重要的是个人认为绝大多数基于ARM7、Cortex-M3硬件的项目,还没复杂到使用RTOS的地步,使用状态机就足够了。

对于现代的微处理器,特别是资源相对丰富ARM7、Cortex-M3硬件来说,RTOS占用的硬件资源已经越来越可以忽略。所以在当今环境下,我们无需担心RTOS会拖累性能。相反,RTOS提供的事件驱动型设计方式,使得RTOS只是在处理实际任务时才会运行,这能够更合理的利用CPU。

在实际项目中,如果程序等待一个超时事件,传统的无RTOS情况下,要么在原地一直等待而不能执行其它任务,要么使用复杂(相对RTOS提供的任务机制而言)的状态机机制。如果使用RTOS,则可以很方便的将当前任务阻塞在该事件下,然后自动去执行别的任务,这显然更方便,并且可以高效的利用CPU。处理这类事件,是使用RTOS的最大动力,但考虑到系统的稳定性,不得不再三权衡RTOS可能带来的一些弊端:

1、大多数RTOS代码都具有一定规模,任何代码都可能带来BUG,何况是代码具有一定规模的RTOS,因此引入RTOS的同时也可能会引入该RTOS的BUG,这些RTOS本身的BUG一旦被触发,影响可能是是灾难性的。

2、熟练的使用RTOS是一项技能,需要专业的知识储备和长期的经验积累。不将RTOS分析透彻,很容易为项目埋下错误。典型的,像中断优先级、任务堆栈分配、可重入等,都是更容易出错的地方。

3、RTOS的优先级嵌套使得任务执行顺序、执行时序更难分析,甚至变成不可能。任务嵌套对所需的最大堆栈RAM大小估计也变得困难。这对于很多对安全有严格要求的场合是不可想象的。

4、RTOS应该用于任务复杂的场合,以至于对任务调度的需求可以抵消RTOS所带来的稳定性影响,但大部分的应用并非复杂到需要RTOS。

以上原因是本人拒绝在实际项目中使用RTOS的理由,但是否使用RTOS跟是否学习RTOS完全是两码事。个人认为任何嵌入式软件设计人员都应该至少学习一种RTOS,不仅是需要掌握RTOS背后的操作系统原理、学习RTOS的编程方式,更是为将来做准备。

即便个人认为现在的物联网有点言过其实,但依然看好物联网的发展前景。随着物联网的发展,未来的嵌入式产品必然更为复杂、连接性更强以及需要更丰富的用户界面。当处理这些任务时,一个好的RTOS就变得不可缺少了。

书到用时方恨少,希望大家永远不会有这种感觉。

为什么选用FreeRTOS?

对比了许多RTOS,最后选择FreeRTOS,原因是多方面的:

1、SafeRTOS便是基于FreeRTOS而来,前者是经过安全认证的RTOS,因此对于FreeRTOS的安全性也有了信心。

2、大量开发者使用,并保持高速增长趋势。2011、2012、2013、2014、2015连续5年的EEtimes杂志嵌入式系统市场报告显示,FreeRTOS在RTOS内核使用榜和RTOS内核计划使用榜上都名列前茅。更多的人使用可以促进发现BUG,增强稳定性。

3、简单。内核只有3个.c文件,全部围绕着任务调度,没有任何其它干扰,便于理解学习。而且,根本不需要其它繁多的功能,只要任务调度就够了。

4、文档齐全。在FreeRTOS官方网站上,可以找到所有你需要的资料。

5、免费、开放源码。完全可以免费用于商业产品,开放源码更便于学习操作系统原理、从全局掌握FreeRTOS运行机理、以及对操作系统进行深度裁剪以适应自己的硬件。

学习的资料来源主要是FreeRTOS的官方网站()和源代码。FreeRTOS的创始人RichardBarry编写了大量的移植代码和配套文档,只不过是沿着Richard Barry铺好的路前进,所以,这没什么困难的。

附录1:2010~2014年嵌入式市场调查报告有关RTOS使用榜截图

↑↑2010和2011年RTOS使用榜

↑↑2012和2013年RTOS使用榜

↑↑2013年和2014年RTOS使用榜

↑↑2014年和2015年RTOS使用榜

freertos和嵌入式linux区别,嵌入式工程师,你知道为什么要学RTOS?为什么要选用FreeRTOS?...相关推荐

  1. mpu和嵌入式linux区别,嵌入式MCU与MPU的区分和MCU开发中的三个误区

    描述 目录 嵌入式MCU与MPU的区分 误区一:MCU的程序都是存储在片上Flash上,然后拷贝到RAM中执行的 误区二:工程编译生成的下载文件大小即为最终占用Flash的大小 误区三:用户应用工程的 ...

  2. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之设备树模型

    文章目录 前言 1.设备树的作用 2.设备树的语法 2.1.设备树的逻辑图和dts文件.dtb文件 2.1.1.1Devicetree格式 1DTS文件的格式 node的格式 properties的格 ...

  3. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之按键驱动框架

    文章目录 前言 1.APP怎么读取按键值 1.1.查询方式 1.2.休眠-唤醒方式 1.3.poll方式 1.3.异步通知方式 1.5. 驱动程序提供能力,不提供策略 2.按键驱动程序框架--查询方式 ...

  4. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之驱动设计的思想:面向对象/分层/分离

    文章目录 前言 1.分离设计 驱动程序分析---程序分层 通用驱动程序---面向对象 个性化驱动程序---分离 APP 程序分析 前言 韦东山嵌入式Linux驱动开发基础知识学习笔记 文章中大多内容来 ...

  5. 【嵌入式Linux】嵌入式项目实战之七步从零编写带GUI的应用之显示系统、输入系统、文字系统

    文章目录 前言 1.显示系统 1.1.程序分层 1.2.几个重要的数据结构 1.3.程序分析 2.输入系统 2.1.程序分层 2.2.触摸屏输入 2.2.1.几个重要的数据结构 2.2.1.程序分析 ...

  6. 嵌入式linux和嵌入式android系统有什么区别和联系?

    转自:http://bbs.eeworld.com.cn/thread-430437-1-1.html 这个问题很多人问,尤其是初入嵌入式的菜鸟.其实大家都认为android是java,已经不是lin ...

  7. 嵌入式Linux内核开发工程师必须掌握的三十道题

    如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师. 1. Linux中主要有哪几种内核锁?(进程同步与互斥) (1)自旋锁:非睡眠锁 (2)信号量: ...

  8. 嵌入式linux 升级,嵌入式Linux的OTA更新,基本原理和实现

    需要更新 一旦嵌入式Linux产品离开实验室并进入现实世界,如何更新设备的问题就变得至关重要. 更新并非总是必要的,但是很难想到没有某个漏洞的软件.即使您的软件是完美的,但是如果设备通过任何开放源代码 ...

  9. 嵌入式linux系统文件,嵌入式Linux文件系统知多少

    Nand/Nor Flash 在嵌入式Linux产品中,通常使用的存储介质为Nand Flash和Nor Flash,而手机.相机等产品通常使用eMMC.SD Card作为存储介质,导致这种差异的原因 ...

最新文章

  1. 一次性讲清 Spring 常用注解 @Bean 、 @Component 、@Autowire、@Resource 的区别, 你知道吗?
  2. 企业分布式微服务云SpringCloud SpringBoot mybatis (二)Spring Boot属性配置文件详解...
  3. idea目录后面有中括号
  4. 【计算摄影】图像美学专栏上线,先从学点摄影知识开始
  5. Linux服务器编程之:link()函数,ln命令,symlink,readlink,案例说明
  6. java动态内存分部,如何利用Java实现动态内存分配?
  7. RAC crs_stat unknown资源状态处理
  8. 学生如何提高专业英文阅读能力(施一公)
  9. java洗扑克牌算法分析_IT兄弟连 Java语法教程 综合案例
  10. 基于VUE的前端框架搭建
  11. linux临时网络配置
  12. 深信服技术认证之Openstack云平台使用入门
  13. Robocode 直线瞄准机器人
  14. EmmyLua 断点调试、xlua断点调试
  15. 从负指数分布/泊松分布到排队论(经理能扣篮,但不经常也不绝对)
  16. 刀具磨损类论文观后总结
  17. 以太网交换机的工作原理
  18. 使鼠标保持按住状态_程序猿、设计狮们的钟爱鼠标品牌,你知道是什么吗?
  19. 2022-2028全球环氧水泥地坪漆行业调研及趋势分析报告
  20. seo入门级教程!再看不懂就放弃做互联网吧!

热门文章

  1. 高通核心板,高通骁龙410系列 MSM8916
  2. 兔子繁殖问题python编程_C语言编程:兔子繁殖问题
  3. Guitar Pro8吉他打谱下载自学制作教程
  4. 为什么要背诵新概念英语?
  5. 360度全景标定方法_一种360度全视角鸟瞰全景行车辅助标定方法与流程
  6. 微信授权登录:移动端[unionid](一)
  7. java io 内存增长_Java IO 总结
  8. PyTorch非线性函数拟合
  9. 重要:QA和QC的区别
  10. java.lang maven_maven 项目出现 java.lang.ClassNotFoundException