MQX是一款免费、开源、有技术支持,面向工业控制、医疗电子、家用电器等领域的嵌入式实时操作系统(RTOS)。从1989年至今,MQX已经走过了20多年的发展历程,基于MQX的产品已达数百万。飞思卡尔于2009年收购MQX,并推出第一个版本MQX-RTOS 3.0.1后,对其功能进行了不断加强,版本也不断升级和更新,本书采用的版本是2014年2月推出的4.1.0版。
MQX具有学习难度低、开发工具成熟、外设驱动丰富、内核精简、架构清晰、实时性强、应用范围广等特点。与Linux相比,Linux的MMU、OpenGL功能强大,占用资源多,而MQX内核精简、效率高、实时性强,更适合工业控制、医疗电子、家用电器等领域。与μC/OS相比,两者内核大小接近,但MQX的维护团队强大,提供了众多的驱动,如USB、TCP/IP和MFS协议栈,降低了开发成本,方便用户实际应用。因此,选用MQX作为RTOS的学习蓝本,不仅入门难度小,且实际应用的可行性大。
当然,学习RTOS必须有明确的目的,就是为开发实际嵌入式应用产品打基础。在此前提下,学习RTOS还需要有一定的基础,缺乏基本的嵌入式软/硬件基础就开始学习RTOS,不符合由浅入深、循序渐进的学习规律。学习RTOS的前导基础主要有:①掌握C语言基础知识;②系统学习过一种微控制器(MCU),理解MCU硬件最小系统,理解和掌握GPIO、UART、定时器、A/D、D/A、PWM、Flash、SPI、I2C,以及USB、TCP/IP等微控制器内部模块的基本术语与应用方法;③了解一些软件工程的基础知识,有助于理解RTOS的工程框架、任务分割及编程规范等;④若能基本掌握一门PC的面向对象编程语言(如C#),对学习RTOS也有良好的促进作用。在学习RTOS的过程中,可以利用PC面向对象编程语言,通过串口通信实现与微控制器应用系统的连接,进行嵌入式系统的实际调试与现象观测。
苏州大学飞思卡尔嵌入式中心从2009年开始对MQX进行学习研究,跟踪飞思卡尔MQX的版本升级,进行了相关源码剖析,在体系梳理、工程框架设计、基本知识要素分解等方面展开工作,从2012年开始本书的撰写工作。本书立足点是从实际应用角度阐述MQX应用程序的设计方法,主要基本知识要素有:工程框架、任务基本设计方法与规则、启动流程、中断执行过程、延时函数、任务的创建、调度方法、事件、信号量、内存管理、日志等。但是,在实际应用开发中,会遇到各种各样的问题,要能分析和处理这些问题,需要理解RTOS的运行机理,为此本书给出了较深入的内容,即原理剖析,主要包括内核数据区、MQX启动过程(_mqx函数)、中断机制、时间管理机制、任务管理机制、调度机制等,这些内容的标题中均带有“剖析”二字,供读者在学习和实践基本知识要素的基础上进一步学习。
全书共11章,第1章为概述,简要给出RTOS的含义、使用场合、发展历程、RTOS的相关术语、MQX的主要特点及版本历史等基本问题;第2章给出硬件评估系统(SD-FSL-K60-C)、开发环境及MQX安装包简介;给出MQX工程框架(AMQXFW)及第一个MQX样例工程,给出MQX操作系统的启动流程剖析;第3章给出MQX中断处理用法及中断机制剖析,以ARM Cortex-M的SysTick为例,给出MQX时间“嘀嗒”的产生原理,给出延时函数_time_delay的使用方法与剖析;第4章给出了MQX驱动分类、常用I/O驱动的添加过程及驱动管理方法;第5章给出任务三要素、任务四种状态及任务状态之间转换等基本概念,给出MQX任务的管理函数及机制剖析,给出MQX调度策略及机制剖析;第6章给出事件、信号量与消息等概念与使用方法;第7章给出MQX内存管理和日志的应用方法;第1~7章囊括了MQX-RTOS的基本知识要素;第8章给出这些知识要素的综合实例,给读者提供一个MQX实际应用编程参考;第9章给出库文件、BSP和PSP移植、轻量级MQX、看门狗等MQX程序设计中需要关注的问题,以及任务设计方法的初步讨论;第10~11章分别给出USB组件及RTCS组件的使用方法。
本书由王宜怀负责编制提纲和统稿工作,并撰写第1~3、5~6章;朱仕浪撰写第4、7~8章、姚望舒撰写第9~11章及附录。文瑾老师、杨增汪老师、博士研究生蒋建武、硕士研究生柏祥、陈亚轩、史新峰、顾会光、王磊、白聪等参与程序编制与调试、书稿整理等工作。
飞思卡尔半导体有限公司殷刚先生、马莉女士一直关心支持苏州大学飞思卡尔嵌入式中心的建设,为本书的撰写提供了硬件及软件资料,并提出了许多宝贵建议。飞思卡尔半导体有限公司的许多技术人员提供了技术支持。电子工业版社的田宏峰先生为本书的出版做出了大量细致的工作。在此一并表示诚挚的谢意。
鉴于作者水平有限,书中难免存在不足和错误之处,恳望读者提出宝贵意见和建议,以便再版时改进。
王宜怀
2014年8月