http://www.FreeRTOS.org
FreeRTOS
1
Designed For Microcontrollers;
© 2009 Richard Barry. Distribution or publication in any form is strictly prohibited.
USING THE F
REE
RTOS
REAL TIME KERNEL
A Practical Guide
Richard Barry
F
REE
RTOS 实时内核
实用指南
http://www.FreeRTOS.org
FreeRTOS
2
Designed For Microcontrollers;
© 2009 Richard Barry. Distribution or publication in any form is strictly prohibited.
这篇文章的英文原版我是在www.FreeRTOS.net上下载得到的。其实我并没有决定
是否要在系统中使用FreeRTOS,虽然我想要的也仅仅是一个实时内核,当然更重要的
是免费。之所以翻译这篇文章倒不是因为FreeRTOS有多么优秀,完全是因为这篇文章
还不算太长。而且FreeRTOS.net仿佛致力于这个内核在国内的推广,也做了不少中文
化的工作。所以我是打算利用工作之余,边看边译,到读完这篇文档,也就有个中文版
了。如果FreeRTOS.net不弃的话,我倒是情愿放到这个网站上与大家共享。
另外,我本人很懒,没有翻译附录,而且译完正文后也没有做过任何检查。所以如
果有任何问题,请不要骂我。
Zou Changjun
yisfx@126.com
http://www.FreeRTOS.org
FreeRTOS
3
Designed For Microcontrollers;
© 2009 Richard Barry. Distribution or publication in any form is strictly prohibited.
第一章
任务管理
http://www.FreeRTOS.org
FreeRTOS
4
Designed For Microcontrollers;
© 2009 Richard Barry. Distribution or publication in any form is strictly prohibited.
1.1 概览
[附录中提供了使用 FreeRTOS 源代码的实用信息]
小型多任务嵌入式系统简介
不同的多任务系统有不同的侧重点。以工作站和桌面电脑为例:
早期的处理器非常昂贵,所以那时的多任务用于实现在单处理器上支持多用户。这
类系统中的调度算法侧重于让每个用户”公平共享”处理器时间。
随着处理器功能越来越强大,价格却更偏宜,所以每个用户都可以独占一个或多个
处理器。这类系统的调度算法则设计为让用户可以同时运行多个应用程序,而计算
机也不会显得反应迟钝。例如某个用户可能同时运行了一个字处理程序,一个电子
表格,一个邮件客户端和一个 WEB 浏览器,并且期望每个应用程序任何时候都能
对输入有足够快的响应时间。
桌面电脑的输入处理可以归类为”软实时”。为了保证用户的最佳体验,计算机对每
个输入的响应应当限定在一个恰当的时间范围——但是如果响应时间超出了限定范围,
并不会让人觉得这台电脑无法使用。比如说,键盘操作必须在键按下后的某个时间内作
出明显的提示。但如果按键提示超出了这个时间,会使得这个系统看起来响应太慢,而
不致于说这台电脑不能使用。
仅仅从单处理器运行多线程这一点来说,实时嵌入式系统中的多任务与桌面电脑的
多任务从概念上来讲是相似的。但实时嵌入式系统的侧重点却不同于桌面电脑——特别
是当嵌入式系统期望提供”硬实时”行为的时候。
硬实时功能必须在给定的时间限制之内完成——如果无法做到即意味着整个系统
的绝对失败。汽车的安全气囊触发机制就是一个硬实时功能的例子。安全气囊在撞击发
生后给定时间限制内必须弹出。如果响应时间超出了这个时间限制,会使得驾驶员受到
伤害,而这原本是可以避免的。
大多数嵌入式系统不仅能满足硬实时要求,也能满足软实时要求。
http://www.FreeRTOS.org
FreeRTOS
5
Designed For Microcontrollers;
© 2009 Richard Barry. Distribution or publication in any form is strictly prohibited.
术语说明
在 FreeRTOS 中,每个执行线程都被称为”任务”。在嵌入式社区中,对此并没有一
个公允的术语,但我更喜欢用”任务”而不是”线程”,因为从以前的经验来看,线程具有
更多的特定含义。
本章的目的是让读者充分了解:
在应用程序中,FreeRTOS 如何为各任务分配处理时间。
在任意给定时刻,FreeRTOS 如何选择任务投入运行。
任务优先级如何影响系统行为。
任务存在哪些状态。
此外,还期望能够让读者解:
如何实现一个任务。
如何创建一个或多个任务的实例。
如何使用任务参数。
如何改变一个已创建任务的优先级。
如何删除任务。
如何实现周期性处理。
空闲任务何时运行,可以用来干什么。
本章所介绍的概念是理解如何使用 FreeRTOS 的基础,也是理解基于 FreeRTOS
的应用程序行为方式的基础——因此,本章也是这本书中最为详尽的一章。