1.为什么学习RTOS?

作为基于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就变得不可缺少了。

书到用时方恨少,我希望自己永远不会有这种感觉。所以从现在起,我要开始深入一个RTOS,探索它背后的原理,掌握其编程方法,避免其缺陷和陷阱,并将它安全的用在将来的项目中。

2.为什么选用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的官方网站(www.freertos.org)和源代码。FreeRTOS的创始人RichardBarry编写了大量的移植代码和配套文档,我只不过是沿着Richard Barry铺好的路前进,所以,这没什么困难的。

最后,感谢RichardBarry的付出,感谢Richard Barry的无私开源精神!

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

2010和2011年RTOS使用榜

2012和2013年RTOS使用榜

2013年和2014年RTOS使用榜

2014年和2015年RTOS使用榜

FreeRTOS介绍相关推荐

  1. freeRTOS自学入门教程速成版

    FreeRTOS介绍 什么是FreeRTOS? FreeRTOS是一款开源的实时操作系统(RTOS),它提供了一组API和软件库,帮助嵌入式设备的开发者实现任务管理.内存管理.中断处理.时间管理等功能 ...

  2. FreeRTOS系列|FreeRTOS简介

    FreeRTOS简介 1. RTOS简介 RTOS全称为 Real Time Operation System,即实时操作系统.RTOS强调的是实时性,又分为硬实时和软实时.硬实时要求在规定的时间内必 ...

  3. 【ESP32+freeRTOS学习笔记-开篇前言】

    目录 前言的前言 RTOS的选择 开发与实践环境 参考资料 笔记的形式 专题文章的链接(持续更新中......) 前言的前言 单片机的开发,也有两年多了,之前一直是做一些简单应用,因此以裸机开发的方式 ...

  4. ESP32 UART串口通信

    零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...

  5. ESP32 Wi-Fi讲解,station连接热点案例

    零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...

  6. 全面剖析ESP32创建Wi-Fi热点的过程

    零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...

  7. ESP32 VHCI架构实现BLE扫描设备

    零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...

  8. 基于LPC2364的串口转网口专用协议卡的研制

    摘要:给出了采用LPC2364芯片为处理器,并利用以太网中TCP协议来设计串口转网口模块,从而实现数据传输方式转换的一种设计方法.该方法中的软件采用FreerRtos实时多任务嵌入式系统和uIP协议栈 ...

  9. AIR32F103(五) FreeRTOSv202112核心库的集成和示例代码

    目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...

最新文章

  1. 工业4.0进行时:增强现实技术如何变革制造业
  2. 光伏电站或成辅助服务市场“输家”
  3. 区别 和esc 打印指令tsc_Linux 下的这些高效指令,是你快速入门运维的神器
  4. redis如何解决秒杀超卖java_Spring Boot + redis解决商品秒杀库存超卖,看这篇文章就够了...
  5. Windows Server 2008 安装
  6. 《挖掘管理价值:企业软件项目管理实战》一2.4 软件设计过程
  7. java引用传递_理解Java中的引用传递和值传递
  8. 【AI视野·今日NLP 自然语言处理论文速览 第二十二期】Mon, 27 Sep 2021
  9. [TWAIN] 3句话总结TWAIN在Windows Server 2008 R2 SP1的使用
  10. RAC3——RAC原理开始
  11. 组策略 之 注册表
  12. 三菱plc控制电动推杆
  13. stm32通过 一线串口通信控制JQ8900-16P语音模块
  14. 透视HTTP协议-进阶篇-极客时间-学习笔记
  15. eNSP基础实验交换机连接路由器(二层交换机和三层交换机)
  16. c#阿里CSB接口对接--
  17. linux下rpm包安装MySQL
  18. layui-table表格根据条件更换表格背景颜色,高亮显示
  19. jsp页面如何调用本机的应用程序?例如c:/netterm.exe?
  20. Task 05:样式色彩秀芳华

热门文章

  1. Arduino门禁人机接口调试 Version 1.0
  2. 工具类:BeanUtils和PropertyUtils的区别
  3. python3.6for循环_使用parser_args值输入for循环(python3.6)
  4. java big o_java – 计算Big-O复杂性
  5. java中return提醒不兼容的,奇怪的錯誤。不兼容類型錯誤行「return mFragmentList.get(position);」...
  6. Linux内核系统时钟管理 感想总结 (未完待续)
  7. tcpdump 抓取icmp数据包
  8. 数据集按类划分_用特别设计的损失处理非均衡数据
  9. mysql中数据表如何关联_mysql 如何导入/导出2个关联表中的数据
  10. hive分区用2个字段有何限制_[Hive]新增字段(column)后,旧分区无法更新数据问题...