本章的最后,通过描述ARM为核心的嵌入式系统,来介绍了嵌入式系统的软件和硬件构成和结构。这里根据这部分的介绍以及其他的文章,描述下通用的嵌入式系统的软件和硬件。
首先来说下硬件,书中说,包含有处理器,控制器,外设和总线四个部分。这是一种比较笼统的说法,如果要更笼统点来说,应该是包含处理器,总线,外设三个部分。因为诸如存储器,控制器,接口等都可以被归纳成外设。通常来说,嵌入式系统的广义上的外设可以分为下面几类:
1。系统类:电源模块,振荡器模块。
2。存储类:Cache,TCM,ROM,EPROM,EEPROM,SRAM,DRAM,SDRAM,Nor Flash,Nand Flash。(Cache是否为外设有待讨论。软盘,硬盘和光驱类的,应用比较少,在此不列出。)
3。定时类:Timer,Watch Dog。
4。中断类:VIC或者通用的中断控制器。
5。接口类:I2C,SPI,UART,SDIO,PWM。
6。多媒体接口类:I2S,ITU601,Lcd(Sys,RGB)。(区别于常用接口,单独列出。)
7。功能模块类:蓝牙,Wifi,FM,GPS,电视模块等。这类外设和一些其他的专门模块,因为通常用接口类外设去控制,所以在此不赘述了。
文中在描述存储器的时候,简单描述了存储器的性价比和系统设计时的关系。笔者描述下现在比较通用的存储器使用结构。现今在嵌入式平台上经常使用的存储器有ROM,SRAM,SDRAM,Nor Flash,Nand Flash。ROM用来存储程序,但是由于现在很多平台要求程序的可Update,所以很多平台在ROM中存放一小段Boot代码,而把大部分代码放置在Flash上。但是Flash由于读写方式和速度的关系,并不能满足代码的运行需求,因此大部分系统都在自身划分出一段SRAM空间,用来Load代码,然后在SRAM上运行。由此又产生了一个问题,SRAM的容量有限,通常只有几十K到上百K,相对于代码来说小了些,为了不浪费SRAM,又产生了Overlay技术,就是将程序划分成模块,运行的时候,只需要Load相应的模块,不用Load所有模块的代码,这样既可以高速的运行,又可以节省SRAM的空间。SRAM的另外一部分就用来存放数据,但是仅仅几十K的空间,并不能满足很多系统的需要,为此,SDRAM这种容量很大但是价格便宜的存储器就很适合充当SRAM的补充。不过SDRAM有其固有的缺点,需要定时刷新,读写慢,所以比较适合大容量的数据Buffer,而不适用于运算过程。
上面这段已经涉及到了一些嵌入式系统软件的结构,下面就接着讨论本章中描述的嵌入式系统的软件。本章中对嵌入式软件的讨论主要是从操作系统的角度讨论的,主要包括初始化程序(引导程序),操作系统,设备驱动和应用程序几部分。但是现存的嵌入式软件通常分为两种,一种就是本章所描述的操作系统类型的,第二种就是通常所说的无系统架构(也可以称为前后台系统)。第一种通常应用在资源丰富,功能较多的系统上,而第二种相反,这种应用和这两种架构的特点密不可分。带有操作系统的的架构,程序设计模块化比较容易,相对来说方便多人共同协作完成,但是由于Task的栈分离,以及操作系统的本身代码和RAM需求等,对资源的要求较多。相反,前后台系统,就没有这些缺点,但是前后台系统调度不容易,如果想让功能穿插运行,对拆分代码的要求很好,而且会因为设计调度,浪费很多时间。所以这两种架构各有优缺点,具体该用哪种架构,要看具体的场合和具体的要求了。