前言
嵌入式系统应用开发技术基本的知识点是什么?这是许多急切想进入这一领域的初学者最想知道的问题,更是那些受有限课时数困扰的高校教师反复思考的问题。
嵌入式系统是后PC时代的概念,原则上将那些嵌入应用对象内的专用计算机系统统称为嵌入式系统。由于嵌入式系统具有软件与硬件紧密结合,应用程序与操作系统紧密结合,硬件和软件与应用对象紧密结合等技术特点,使得该学科成为一门需要融合多门专业基础课程的综合应用类课程,被业界公认为是一类高门槛的技术。
一个合格的嵌入式系统开发人员面对一个具体的应用项目必须要顾及从系统的硬件结构、系统初始化、操作系统的构建、驱动程序实现、应用程序开发,到各类输入/输出设备挂载的具体实现等方方面面。如果一定要将所有相关的知识和技能包纳于一门课程中并且在有限的几十个课时数内了解掌握,并且达到一个合格嵌入式开发人员的基本要求,显然是不现实的。这也是许多师生感叹嵌入式系统开发技术门槛高的原因。
目前有许多高校教师致力于探讨如何利用尽量少的课时传授给学生赖以入门的嵌入式系统必备知识的教学内容及教学方法,其核心问题是在几十个有限的课时内到底应该教授给学生哪些知识和技能才能使他们顺利地迈过可以自主学习更深入嵌入式系统开发技术这道门槛。尽管这道无形的门槛包纳了诸多技术因素,但是通过与传统的基于“Win/Tel”平台的计算机应用开发技术比较可以发现,“Win/Tel”平台的应用开发技术易于学习掌握的主要原因是其软/硬件平台技术的通用化、标准化,以及为这些规范化平台所提供的各种易于学习掌握的应用开发环境。这些规范化平台及开发环境屏蔽了软件开发人员对计算机硬件,甚至操作系统细节的理解,更不需要开发人员知道计算机硬件与软件的互动过程及硬件的编程需求。但是嵌入式系统开发人员所必须要了解的却恰恰是可以应对千变万化应用需求的硬件资源及底层软件。
尽管嵌入式系统开发技术是一门“软硬兼施”的综合应用开发技术,但具体的市场需求仍存在偏硬件和偏软件两个方向。从目前的市场人才需求来看,市场对嵌入式软件开发人才的需求量大于对硬件开发人才的需求,所以本教材的教学目标主要针对的是嵌入式软件开发人员。当我们认识到利用几十个课时的教学内容所能够达到的目标是引领嵌入式软件开发人员入门后,接下来的问题是这些引领入门的知识应该是什么。若以高校的计算机科学、计算机软件、计算机网络、自动化、通信等信息类专业的学生为对象,以他们已选修数字电子技术(或数字逻辑)、计算机组成原理、C语言程序设计、微机原理与接口技术等传统专业基础课为前提,结合自己多年来主持参与工程项目开发的经验以及在教学中对学生理解力的了解,作者认为无论是嵌入式软件开发还是硬件开发,阻碍学生掌握嵌入式应用开发技术的首要门槛是对嵌入式处理器编程结构及应用开发特征的理解和掌握。因为他们已学习过、实践过的计算机有关内容有意无意都夹杂着Win/Tel的开发模式,带着这样的知识烙印是难以进入嵌入式开发知识殿堂的。所以需要以一种新的角度来认识嵌入式处理器,这种新的角度就是计算机指令与计算机硬件动作的直接关联性。那么应该选择学习哪款嵌入式处理器呢?目前国内市场虽然已有多种公司和型号的嵌入式处理器在应用,但最为广泛的还是基于ARM内核的嵌入式处理器。
ARM嵌入式处理器技术的快速发展已经呈现了从Cortex M系列,ARM7、ARM9、ARM10、ARM11系列,到Cortex A8、A9系列产品在应用市场全面开花的局面。作为入门学习,到底应该选择那款处理器也是需要探讨的问题。从应用的角度看似乎应该选择最新款的处理器,但其实不然。其道理如同这几十年来对X86系列处理器的学习历程。尽管X86系列处理器已进化了三十几年,但学习该系列处理器仍然需要寻根溯源地从8086 CPU开始。因为无论什么最新的处理器都继承有其祖辈的许多基本特征,而后续衍生进化的新技术又都建立在这些基本的技术属性之上,是学习最新处理器必须首先掌握的内容。另外,越新的处理器所包含的技术内容越多,几十个课时的学习只能对方方面面内容进行蜻蜓点水似的浏览,无法达到理解和掌握的目标。
本教材根据每周3~5课时的教学安排,归纳出嵌入式软件开发必须要掌握和理解的嵌入式处理器学习内容,包括:嵌入式处理器的编程结构,指令系统及汇编语言编程的基本要素,嵌入式系统中的存储器,处理器存储器空间分配,时钟与功耗管理单元结构与编程,GPIO结构与编程,中断系统结构与编程,定时器/PWM单元结构及编程,串行通信单元结构与编程等最基础的内容。这些内容是各型高低端嵌入式处理器基本都具有的功能,而且是进一步学习其他功能的基础。考虑到学习内容的针对性和可实践性,选择了在国内市场比较有代表性的三星公司嵌入式处理器S3C44B0作为教学模型。事实上,虽然S3C44B0为ARM7TDMI内核,但三星公司后续的ARM9(如S3C2410和S3C2440等)和ARM11(如S3C6410)产品的许多基本功能都是由S3C44B0发展而来的。