FreeRTOS系列第1篇---为什么选择FreeRTOS?

71539人阅读 评论(29) 收藏 举报
分类:

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、2017年(暂时没有2016年的数据)的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~2017年EEtimes杂志嵌入式市场调查报告有关RTOS使用榜截图


2010和2011年RTOS使用榜


2012和2013年RTOS使用榜


2013年和2014年RTOS使用榜



2014年和2015年RTOS使用榜


2017年RTOS使用榜

查看评论

FreeRTOS系列第14篇---FreeRTOS任务通知

每个RTOS任务都有一个32位的通知值,任务创建时,这个值被初始化为0。RTOS任务通知相当于直接向任务发送一个事件,接收到通知的任务可以解除阻塞状态,前提是这个阻塞事件是因等待通知而引起的。发送通知...
  • zhzht19861011
  • zhzht19861011
  • 2016-01-25 11:08:54
  • 16434

FreeRTOS系列第6篇---FreeRTOS内核配置说明

FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制。每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪定制FreeRTOS内核。这个配置文件是针...
  • zhzht19861011
  • zhzht19861011
  • 2015-12-01 21:14:21
  • 27477

FreeRTOS STM32移植笔记

第一:其实说不上移植笔记,FreeRTOS已经移植至众多平台(MCU),包括MSP430,STM32等,这份笔记完全建立在官方代码的基础之上,简单的说就是修改一些设置从而完成一个呼吸灯实验。 第二:虽...
  • xukai871105
  • xukai871105
  • 2013-10-26 22:11:08
  • 62012

FreeRTOS高级篇5---FreeRTOS队列分析

FreeRTOS提供了多种任务间通讯方式,包括:任务通知(版本V8.2以及以上版本)队列二进制信号量计数信号量互斥量递归互斥量      其中,二进制信号量、计数信号量、互斥量和递归互斥量都是使用队列...
  • zhzht19861011
  • zhzht19861011
  • 2016-05-26 20:58:19
  • 14828

FreeRTOS系列第11篇---FreeRTOS任务控制

FreeRTOS任务控制API函数主要实现任务延时、任务挂起、解除任务挂起、任务优先级获取和设置等功能。1.相对延时1.1函数描述      void vTaskDelay( portTickType...
  • zhzht19861011
  • zhzht19861011
  • 2016-01-04 10:53:42
  • 20381

FreeRTOS使用总结

序言       在实际开发中,如果程序等待一个事件发生,传统的无RTOS情况下,要么在原地一直等待而不能执行其它任务,要么使用状态机机制处理。而RTOS提供事件驱动型设计方式,只是在处理实际任务时才...
  • yk150915
  • yk150915
  • 2016-12-28 14:48:04
  • 2661

FreeRTOS系列第2篇---FreeRTOS入门指南

FreeRTOS可以被移植到很多不同架构的处理器和编译器。每一个RTOS移植都附带一个已经配置好的演示例程,可以方便快速启动开发。更好的是,每个演示例程都附带一个说明网页,提供如何定位RTOS演示工程...
  • zhzht19861011
  • zhzht19861011
  • 2015-11-13 16:06:02
  • 34426

FreeRTOS高级篇7---FreeRTOS内存管理分析

内存管理对应用程序和操作系统来说都非常重要。现在很多的程序漏洞和运行崩溃都和内存分配使用错误有关。        FreeRTOS操作系统将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函...
  • zhzht19861011
  • zhzht19861011
  • 2016-06-07 19:38:57
  • 15373

《FreeRTOS源码详解与应用开发》书籍例程(基于STM32F429)

  • 2017年07月14日 12:01
  • 39.66MB
  • 下载

FreeRTOS简介与源码下载

FreeRTOS ,
  • Zach_z
  • Zach_z
  • 2017-08-19 16:53:08
  • 950
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 169万+
    积分: 1万+
    排名: 1162
    博客专栏
    最新评论
    友情链接