资讯详情

Linux在嵌入式系统应用中的深入探究

  计算机用于嵌入式控制设备领域的历史和计算机本身的历史一样久远。最初的用于控制机电式电话交换器的通讯设备中“控制程序”就是嵌入式程序。“计算机系统”在当时并不普遍;所以固态程序存放在内存中控制相应的设备。在那种时代,运行控制程序是很先进的思想,而且当时也只能如此而已。

  那时的计算机是专为特定的用户设计,特殊的应用程序指令、I/O设备和主要的计算设备集成在一起。微处理器的产生改变了这种局面,价格低廉、结构小巧的 和外设连接在总线上形成了比较大的系统。这种硬件架构很稳定,于是在这个基础上,这建立起了通用的软件开发环境和编程模式,且简化了编程,。

  软件也在随着硬件的发展而发展;开始只有简单的工具用于编程和调试,而且每一个软件都必须从头编写。程序大都采用宏汇编语言,汇编程序还不很完善,调试是一件很麻烦的事。因此一直到70年代的中期,模块化编写程序和标准化的运行库才逐渐流行起来。 在70年代的后期,出现了嵌入式系统的操作系统。它们采用汇编语言编写,而且只能运行在相应的特殊处理器上;处理器过时,则这个操作系统就没有用处了,对新的处理器必须重新编写操作系统的所有代码。C语言出现以来,采用C语言操作系统更有效率了,操作系统的编写有了很大的改观。C语言有很好的稳定性和可移植性,所以今天的许多操作系统都使用C来编写。 于是在 80年代末,出现了好几个商业的嵌入式操作系统。而且它们已经演化成为今天的主流嵌入式操作系统。比如很有名的、使用者众多的操作系统:Vxwork、 pSOS、Neculeus和Windowss CE。

  不过很多的嵌入式系统还没有使用操作系统,它们仅仅包含一些控制流程而已。在嵌入式系统相对简单的情况下,这些控制流足以应付。但是,当嵌入式系统的功能复杂后,简单控制逻辑就不够用了,这时你必须使用操作系统。如果不使用操作系统将会使得控制系统逻辑结构复杂混乱,很容易出错。再者,有些嵌入式系统需要接入网络系统,比如宾馆的门控制已经需要接入网络,因此就更需要嵌入式的操作系统来支持应用软件。

  除了商业化的操作系统外,还有其他的有版权要求的非商业化嵌入式操作系统可以使用。然而今天的Linux 系统有着嵌入式操作系统需要的很多特色、突出的优势:适应于多种CPU和多种硬件平台,性能稳定,裁剪性很好,开发和使用都很容易。因此,我们决定在嵌入式系统中使用Linux操作系统。

  原来开发嵌入式系统的关键是需要一套好用的开发和调试工具;而且在开发所不同阶段还需要不同的工具。就比如工匠,只有好的工具才能够使工作完成得又好又快。

  传统的开发调试工具就是ICE-在线;它取代目标板的微处理器,给目标程序提供仿真环境,同时可以连接;允许开发者调试和监视程序的运行。尽管这种运行方式会引起一些奇怪的问题,但是它总能够让你明了程序在目标板的工作状态,免除了对底层的软硬件的猜测。但是,这种设备价格非常贵。过去,甚至在整个开发期内,开发嵌入式系统主要依靠这些调试工具。 可是,我们发现,一旦软硬件能够正常支持串口的运行时,我们可以使用其他的调试办法。现代的嵌入式系统采用相当成熟的微处理器。因此很容易使得串口工作。串口连接成功,可以进行很多的开发调试。所以我们不用ICE也可以很好地开始开发和调试工作了,同时还降低开发费用。

  Linux利用GNU项目的C编译器来编译程序,使用gdb源程序级来调试程序。它们提供了合适的手段来使你能够开发嵌入式的Linux系统。为了开发基于Linux的嵌入式系统,可以按以下方法进行:

  向串口输出提示字符串,例如“hello word ”或“Waston, come here I need you!”等, 然后通过串口,指挥gdb 开始工作。以这种方式和另外一台运行gdb程序的Linux主机系统“交谈”,通过串口,你可以很方便地让gdb调试目标程序。通过串口和gdb通讯,可以进行C源程序级的调试。甚至你还可以以串口把其他的程序下装到RAM或flash存储器。通过串口,使用gdb可以使得软硬件的初始化代码继续运行到核心全部启动。

  一旦核心在运行了,你就可以使用其他的更好的调试工具,象Kgdb等,如果连接了网络,你也可以让网络工作起来。同时你就可以用GUI的xgdb来调试应用程序。

  细细分析起来,大多数系统并不需要严格的实时性。而嵌入式系统也经常被误解为就是实时性系统。其实,多数嵌入式系统并不需要实时性,而且实时性本身是个相对的概念绝对的实时性是指对需要的服务以限定的方式和在限定时间内提供,比如在微秒级内响应。 这种硬实时性功能只是针对特殊的设备而言 ,例如数字信号处理等。而这些要求使用特殊的硬件 如FIFO、A 和其他特殊设计的硬件 也可以满足 。

  有些设计者不能够准确地分析出系统真正实时需求,很多情况下对实时的需求在1-5 毫秒内响应 就可以;大部分情况下,软实时响应足以满足要求:WINSS 的 98Crashed_Yet 在98% 的时间内可 以在4 每秒内响应 ,如果时间是20 秒,则总会响应。那些软实时性容易满足。需要考虑的因素包括:上下文转换时间、中断延迟、任务的优先级和任务调度方式。上下文转换时间曾经是实时性分析的重点,但是因为CPU速度大幅度提高,它不再是关键问题。

  现在,严格要求的实时性任务的决定因素是中断例程本身和内核中的其他驱动程序有关;而响应延 迟时间主要受中断的优先级和其他进程会暂时地关闭中断响应的影响。因此管理和驱动中断的机制必须 保证实时要求。

  对于 x86处理器,实时扩充可以在Linux 系统中很容易进行,RT-Linux 就是很好的例子。 它主要是把Linux 的任务作为自己的一个任务,因此实时性要 求很高的任务不受非实时的 Linux 的干扰,可以得到满足。另外还提供了实时任务和Linux 的基本核 心和其他任务间的接口,这些接口是不需要很强的实时性。这种架构为其他的嵌入式系统提供了一个参 考。关键因素就是实时性的代码和非实时代码分开设计,而且实时应用程序的处理方式和其他程序的处 理方式差不多。

1 2 下一页> -电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。锐单自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台