关于Freertos
FreeRTOS非常适合使用微控制器或小型微处理器的深度嵌入式实时应用程序。这种类型的应用程序通常包含硬实时需求和软实时需求。
软实时需求是那些规定了一个时间截止日期的需求——但是违反这个截止日期并不会使系统崩溃。例如,按键响应太慢可能会使系统看起来没有响应,但实际上并没有使其不可用。硬实时需求是那些声明了一个时间截止日期的需求——而违反这个截止日期将导致系统的绝对故障。例如,如果驾驶员的安全气囊对碰撞传感器输入的反应太慢,那么人可能就over了。
FreeRTOS是一个实时内核(或实时调度器),在它的基础上可以构建嵌入式应用程序来满足它们的硬实时需求。它允许将应用程序组织为独立执行线程的集合。在只有一个核心的处理器上,任何时候只有一个线程可以执行。内核通过检查应用程序设计器分配给每个线程的优先级来决定应该执行哪个线程。在最简单的情况下,应用程序设计人员可以为实现硬实时需求的线程分配较高的优先级,为实现软实时需求的线程分配较低的优先级。这将确保硬实时线程总是在软实时线程之前执行,但是实际情况中优先级分配的决定并不总是那么简单。
为什么选择Freertos
RTOS类系统非常多,但是为什么选择FreeRTOS呢?并且FreeRTOS的资料少,而且大多数是英文的。具体原因如下:
-
FreeRTOS免费,这个是非常重要的,UCOS是要收费的,学习RTOS系统的话UCOS是首选,但是做产品的话就要考虑一下成本了。显而易见,FreeRTOS就是一个很好的选择,当然也可以选择其它的免费的RTOS系统。
-
许多半导体厂家产品的SDK包就是用FreeRTOS作为其操作系统,尤其是WIFI、蓝牙这些带协议栈的芯片或者模块。
-
许多软件厂商是用FreeRTOS做本公司软件的操作系统,不如著名的TouchGFX,其所有的例程都是基于FreeRTOS操作系统的。ST公司的所有要使用RTOS系统的例程也均采用了FreeRTOS。
-
简单,FreeRTOS的文件数量很少,和UCOS系统相比少很多。
-
文档相对比较齐全,在FreeRTOS的官网上可以找到所需的文档和源码,但是所有的文档都是英语版本的。
-
FreeRTOS被移植到了很多不同的微处理器上,这个极大方便了我们的学习和使用。
-
社会占用量高,EEtimes统计的近几年的RTOS系统占有量中FreeRTOS已经跃升到第一位了。
2010和2011年RTOS使用榜
2012和2013年RTOS使用榜
2013年和2014年RTOS使用榜
2014年和2015年RTOS使用榜
2017年RTOS使用榜
2019年RTOS使用榜
关于术语的说明
在FreeRTOS中,每个执行的线程都被称为“任务”。嵌入式社区中对术语没有共识,但我更喜欢“任务”而不是“线程”,因为线程在某些应用领域中有更具体的含义。
为什么要使用实时内核?
有许多成熟的技术可以在不使用内核的情况下编写良好的嵌入式软件,而且,如果正在开发的系统很简单,那么这些技术可能提供最合适的解决方案。在更复杂的情况下,使用内核可能会更好,但在什么情况下使用又是各有见地。
如前所述,任务优先级可以帮助确保应用程序满足其处理期限,但是内核也可以带来其他不太明显的好处。比如:
内核负责执行定时,并为应用程序提供与时间相关的API。使应用程序代码的结构更简单,整体代码大小更小。
抽象出时间可以减少模块之间的相互依赖,并允许软件以可控和可预测的方式发展。此外,内核负责计时,因此应用程序性能不太容易受到底层硬件变化的影响。
任务是独立的模块,每个模块都应该有明确定义的目的。
任务应该有定义良好的接口,更便于团队开发。
如果任务是定义良好、接口清晰的独立模块,则可以对它们进行隔离测试。
模块化更强和相互依赖比较少导致代码可以更容易重用。
使用内核允许软件完全由事件驱动,因此轮询尚未发生的事件不会浪费处理时间。代码只在必须执行某些操作时才会执行。与节省效率相反的是需要处理RTOS滴答中断,并将执行从一个任务切换到另一个任务。然而,应用程序不使用RTOS通常包括某种形式的滴答中断。
当调度程序启动时,会自动创建空闲任务。只要没有应用程序任务要执行,它就会执行。空闲任务可用于测量空闲处理能力,执行后台检查,或简单地将处理器置于低功耗模式。
通过使用RTOS获得的效率增益允许处理器长时间处于低功耗模式。每次空闲任务运行时,将处理器置于低功耗状态,可以显著降低功耗。FreeRTOS也有一个特殊的无tick模式。使用无tick模式允许处理器进入比其他方式更低的功耗模式,并在低功耗模式中保持更久。
中断处理程序可以通过延迟处理由应用程序编写器创建的任务或FreeRTOS守护进程任务来保持非常短的时间。
简单的设计模式可以在应用程序中实现周期性、连续和事件驱动的处理的混合操作。此外,通过选择适当的任务和中断优先级,可以满足硬实时性和软实时性需求。
FreeRTOS特性
FreeRTOS有以下特性:
- 抢占式或者非抢占式
- 非常灵活的任务优先级分配
- 灵活、快速、轻量级的任务通知机制
- 队列
- 二进制信号量
- 计数信号量
- 互斥量
- 递归互斥量
- 软件定时器
- 事件组
- 时间片钩子
- 空闲钩子
- 栈溢出检查
- 跟踪记录
- 任务运行时统计信息收集
- 可选的商业许可和支持
- 全中断嵌套模型(适用于某些架构)
- 极低功耗应用的无滴答性能
- 软件管理的中断堆栈在适当的时候(这可以帮助节省RAM)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)