前言 欢迎中国读者 尊敬的读者,我感到非常高兴能够为中国读者提供我撰写的RealTime Operating Systems Book 2—The Practice中文版本,我希望你会同意它是易于阅读、内容翔实和非常有趣的!如果不是因为Allan He(何小庆)的努力,这绝不会发生。Allan负责启动这个项目,在过去的数月中,他和他的团队承担翻译工作,也为负责撰写、翻译和出版工作的许多人提供了坚定的支持。此外,他在寻找愿意出版这本书的中国出版公司一事上发挥了重要作用,Allan,谢谢你所做的一切。 我与中国的接触始于1980年,那时中国看到了快速发展的关键在于提高其技术水平和专业知识储备。通过派遣高素质的工程师,在西方学习长达两年的时间可以做到这一点。当时我是大学讲师,专门研究实时嵌入式系统。有一天我的部门主管要求让来访的一位中国学者加入我的研究小组,并由我监督他的工作一年。事实证明,这是一段非常有趣的经历,让我对中国及其人民有了了解。我的学生实际上是一位优秀的雷达工程师,后来成为中国电子科技大学学者和教授。在过去的40年中,我们一直保持着联系,因此,我看到了中国电子行业取得了长足的进步。中国现在在许多技术领域占主导地位,尤其是在通信领域。我非常希望我能以某种方式帮助促进中国软件的技术发展。 为什么要写这本书 当你想成为某个技术领域的专家时,你需要了解其理论知识(几乎没有什么可走的捷径,但确实如此),我称其为“头衔”的赞赏。但是,如果你想变得真正精通,那还远远不够——你还需要具有其“核心”的理解。我的意思是对这个领域有一种真实的感觉,我认为做到这一点的最佳方法是将理论付诸实践,边做边学。 环顾四周就会发现很多人属于这两种类别中的一种。基于“头衔”的专家是大学的计算机科学领域的理论家。与之形成鲜明对比的是,典型的“核心”专家是自学成才的程序员,他们对专业基础知识缺乏很深入的了解。本书试图缩小这种差距,本书的第一篇涉及“头衔”方面; 第二篇是通俗易懂实用的知识。使用本书作为资料,可以将理论变成实践,从而帮助你成为真正的专家。 这在理论上似乎是个好主意,但实践却更具挑战性。首先,你需要一个方便实用的工具来完成工作。其次,对于许多自学者来说,成本是一个问题,工具一定不能很贵。最后,它们一定不难获得,但使用和维护很方便。因此,这里我们为你提供用于RTOS实验的低成本工具、软件和开发板的方法。 实用工具 用于此工作的工具和软件包括: (1) 用于配置MCU(STM32F某个特定版本)的图形工具——STM32CubeMX软件应用程序。 (2) 用于生成机器代码的集成开发环境(译者注: 如 STM32CubeIDE、IAR 和 Keil)。 (3) 带有内置编程器和调试器的低成本MCU开发板。 所有软件都是免费的,或者提供可以免费使用的版本,可以在Windows、Mac OSX或Linux平台上运行,从许多电子供应商处都可以轻松获得STM32F4 Discovery套件,我们在这项工作中使用的RTOS是FreeRTOS,它与CubeMX工具集成在一起。此处给出的所有练习都是在STM32F4 Discovery套件上执行的,https://www.st.com/en/evaluationtools/32f411ediscovery.html(网站上也称为STM32F411EDISCO板)。个别的实例是在老版本的STM32F4 Discovery套件上测试的。https://www.st.com/content/st_com/en/products/evaluationtools/productevaluationtools/mcumpuevaltools/stm32mcumpuevaltools/stm32discoverykits/stm32f4discovery.html。 如果你愿意,可以使用更便宜的STM32L100C Discovery套件,网址为http://www.st.com/en/evaluationtools/32l100cdiscovery.html。 这本书的哲学 本书的基本哲学是“理解理论的最佳方法是将其付诸实践”。太好了!我认为我们都可以同意这一点了。但是有一个非常重要的问题出现了,我们到底该怎么做? 这是一个更基本的问题,我们到底想实现什么? 例如,假设你有强烈的愿望根据图0.1所示的椅子制作自己的木椅。 不幸的是,你没有任何木工知识和经验,所以你开始学习木工理论,并以此为基础启动你的项目。好吧,你可能不会成功结束这个项目,造成了灾难性的结果,如图0.2所示,最后做了一件不太专业的事情。 图0.1你希望制作的椅子 图0.2你实际完成的项目 在你投入项目之前,除了期望(或者说祈祷)一切顺利外,你还应该做些什么? 现在令人眼花缭乱的事情很多,在开始任何实际项目之前,首先需要学习市场上有什么工具以及如何使用它们。因此作为新手木匠,我们将从图0.3所示的传统的木工工具开始。 图0.3传统木工工具 在这个阶段,你实际上不需要了解工具的工作原理,重要的是了解它们的作用是什么,以及如何使用它们。掌握了这些工具之后,你就可以在实际项目中放心地使用它们了,这就是本书所涉及的实践工作的基础。 因此,不要指望学习如何设计和编写一个操作系统。本书也没有教你如何设计一个使用RTOS的嵌入式系统。但是,你将实实在在学到的是: (1) 有哪些可用的工具。 (2) 每种工具的工作方式。 (3) 为什么以及如何使用这些工具。 (4) 使用各种工具的不利之处。 实验的目的是为你提供一条学习真正的商业工具的途径,实际工作从最简单的问题开始,然后逐步推进到更复杂的层面。如果你不熟悉即将开展的工作,请按照我们的顺序进行。在你成功地完成序列中的每一项之前,不要跳过任何实验。如果在实践结束时,你认为还是没有学会这些基本工具,那或许就是我的问题了。 最后是我的建议: 如果您想了解嵌入式实时操作系统的基础知识,那么本书并不适合您。为此,您需要阅读我的另外一本著作Realtime Operating Systems Book 1—The Theory(或同类图书)中的内容。本书读者需要熟悉相关理论知识并具有一定的技能水平。 致谢 本书的更新版本包含使用可视化工具Tracealyzer的材料。我要对Percepio 公司提供的所有帮助表示极大的感谢,还要感谢Percepio公司提供的技术支持,特别是Johan Kraft博士(公司首席执行官)和Niclas Lindblom(资深FAE)所提供的技术支持。要说这些是无价也不为过。 吉姆·考林(Jim Cooling) 2020年12月于马克菲尔德(英国)