当前位置:文档之家› 嵌入式系统

嵌入式系统

嵌入式系统
嵌入式系统

@嵌入式系统

1嵌入式系统的定义

凡是带有微处理器的专用系统都可以称为嵌入式系统。如单片机系统和带OS的ARM 系统。各类单片机系统,在完成较为单一的专业功能时具有简洁高效的特点。但是由于他们没有操作系统,所以管理硬件和软件的能力有限,在实现复杂的多任务功能时往往困难重重,甚至无法实现。

嵌入式系统的更准确的定义:以应用为中心,以计算机技术为基础,且软硬件可裁减,适应应用系统对功能、可靠性、成本、体积、功耗的严格要求的专用计算机系统。这种专用计算机系统是由嵌入式微处理器构成的独立操作系统,完成特定功能,用于特定场合。

2嵌入式系统的特点

总体上嵌入式系统可以划分成硬件和软件两部分,硬件一般由高性能的微处理器和外围的接口电路组成,软件一般由实时操作系统和其上运行的应用软件构成。尽管嵌入式系统与PC类似,但在软硬件方面还有不同。

嵌入式系统与PC机在软件开发平台上对比:

(1)引导代码

嵌入式系统通过Bootloader引导,针对不同电路进行移植;PC机主板的BIOS引导,无须改动。

(2)操作系统

嵌入式系统包括Linux、WinCE、VxWorks等,需要移植;PC机操作系统包括Windows、Linux等,无需移植。

(3)驱动程序

嵌入式系统的每个设备驱动针对电路板进行开发或移植,一般不能直接下载使用;PC机操作系统含有大多数驱动程序,或下载直接使用。

(4)开发环境

嵌入式系统的编译环境为交叉编译;PC机操作系统的编译环境为本机编译。

(5)协议栈

开发嵌入式系统需要移植协议栈;PC机的协议栈由操作系统或第三方提供。

嵌入式系统与PC机在硬件开发平台上对比:

(1)CPU

嵌入式系统的CPU包括ARM,MIPS,Score+等;PC机的CPU包括Intel、AMD等。

(2)内存

嵌入式系统内存主要用SDRAM芯片;PC机操作系统大多用SDRAM或DDR内存条。(3)存储设备

嵌入式系统的存储设备主要为FLASH闪存芯片,容量主要为几十至几百MB;PC机的存储设备有硬盘及光盘等,其容量达几十至几百GB。

(4)输入与输出设备

嵌入式系统输入与输出设备主要是键盘、触摸屏、LCD等;PC机输入与输出设备比较丰富,有键盘、鼠标、麦克风、显示器等。

(5)其它设备

嵌入式系统主要包括音频芯片、USB芯片、网卡芯片等;PC机主要是主板集成或外接插卡。

通过以上的对比,嵌入式系统特点归纳如下:

(1)系统内核小

嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多

(2)专用性强

嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植

(3)系统精简

嵌入式系统一般不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于系统安全

(4)实时性操作系统

这是嵌入式软件的基本要求,而且软件要求固化存储,以提高速度,软件代码要求高质量和高可靠性、实时性

(5)专用的开发工具和开发环境

通过专用的开发工具,同时在特定的开发环境下,我们才可是嵌入式系统能完成特定的功能,并用于特定的场合。

3嵌入式系统的结构

嵌入式系统组成结构主要分为硬件和软件两部分。硬件核心部分是微处理器,还包括其它一些外围设备如FLASH、USB、LCD、键盘、串口等。软件部分由操作系统和应用程序构成。操作系统如Linux,应用程序如音乐播放器、图形软件等。这些软硬件的关系如下图所示

嵌入式处理器是嵌入式系统的核心部件,与通用处理器的最大差异在于其大多工作在为特定用户群设计的系统中。嵌入式处理器通常把通用计算机中许多由板块完成的任务集成在芯片内部,从而有利于嵌入式系统趋于小型化,并具有高效率、高可靠性等特征。目前,市面上有1000多种嵌入式处理器芯片,包括ARM系列、MIPS系列、PowerPC系列等等。

外围设备是指在一个嵌入式系统当中,嵌入式处理器以外的完成存储、通信、调试、显示等辅助功能的其它部件,根据外围设备的功能可分为以下3类:

存储器:SRAM、DRAM、NAND FLASH、NOR FLASH等。

接口:并口、RS232串口、SPI串行接口、USB通用串行总线、以太网接口等。

人机接口:LCD、触摸屏、键盘等。

操作系统是嵌入式软件的最重要组成部分,操作系统将CPU时间、中断、I/O、定时器等资源都包装起来,留给用户一个标准的API,并根据各个任务的优先级,合理地在不同任务之间分配CPU时间,用户的其它应用程序都建立在操作系统之上。操作系统主要功能:处理器管理、存储器管理、设备管理、文件管理、用户接口管理。

@嵌入式系统硬件设计与实现

根据上一章的模块分析,本章对嵌入式系统的各硬件电路加以实现。并构建基于ARM9(SamsungS3C2440)为微处理器的核心模块和传感器输出信号调理模块,实现了嵌入式系统软硬件运行的基本环境、硬件基础、网络传输及调试的基本接口。这里主要包括:精密放大电路,低通滤波电路,高通滤波电路,整形电路,AD,气泵控制电路,LED控制电路,按键控制电路,LCD相关电路,PWM驱动接口,FLASH存储器电路,SDRAM存储器电路,串口通信电路,以太网接口电路等。该嵌入式系统采用专业稳定的复位芯片和CPU内核电源芯片使系统稳定性有可靠的保证。

1 ARM9微处理器概述

1.1ARM简介

ARM于1990年11月在英国伦敦成立,它是一个知识产权公司,本身不生产芯片,靠转让设计许可,由合作伙伴公司来生产各具特色的芯片。目前,全世界有几十家著名的半导体公司都使用ARM公司的授权,其中包括摩托罗拉、因特尔、索尼、三星等,从而保证了大量的开发工具和丰富的第三方资源,它们共同保证了基于ARM处理器核的设计可以很快投入市场。

ARM微处理器有以下特点:

(1)体积小、低功耗、低成本、高性能;

(2)支持Thumb(16 位)/ARM(32 位)双指令集,能很好的兼容8 位/16 位器件;

(3)大量使用寄存器,指令执行速度更快;

(4)大多数数据操作都在寄存器中完成;

(5)寻址方式灵活简单,执行效率高;

(6)指令长度固定。

同时,为了提高处理器的运行效率,ARM采用典型的多级流水线结构。下图为4个通用处理器系列的流水线结构。

1.2 ARM9的特点

ARM微处理器目前包括的系列有:ARM7系列、ARM9系列、ARM9E系列、ARM10系列、ARM11系列、SecurCore系列等。除了具有ARM体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点。其中ARM7、ARM9、ARM10和 ARM11为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。SecurCore系列专门为安全要求较高的应用而设计。

ARM7采用冯·诺依曼结构,数据存储器和程序存储器重合在一起。同时,ARM7为三级流水线结构(取指,译码,执行),平均功耗为0.6mW/MHz,时钟速度为66MHz,每条指令平均执行1.9个时钟周期。但是,由于ARM7采用的Neumann结构,取指令和取操作数都是通过一条总线分时进行,这样,在高速运算时,不但不能同时取指令和取操作数,而且还会造成传输通道上的瓶颈现象。而ARM9可有效解决这一问题,它采用哈佛(Harvard)结构,程序存储器与数据存储器分开,提供了较大的存储器带宽。而且,ARM9为五级流水线(取指,译码,执行,缓冲/数据,回写),平均功耗为0.7mW/MHz。时钟速度为120MHz-200MHz,每条指令平均执行1.5个时钟周期。同时,ARM10和ARM11是近几年的新出现的微处理器,它们在速度和功耗等性能上优于ARM9,但是,它们与现有的很多软硬件匹配度不高。因此,ARM9是最为常用的一款微处理器。

我们在设计硬件电路和编程时还要了解ARM9在体系结构、数据类型、存储结构及工作模式。

ARM9体系结构特点:

(1)多处理器状态模式:ARM体系结构定义了7种处理器模式:用户(usr)、快中断(fiq)、中断(irq)、管理(svc)、终止(abt)、未定义(und)和系统(sys),大大提高了ARM9处理器的效率;

(2)两种处理器工作状态:ARM状态(执行32位ARM指令)和Thumb状态(执行16位Thumb 指令;

(3)嵌入式在线仿真调试:ARM体系结构的处理器芯片都嵌入了在线仿真ICE-RT逻辑,便于通过JTAG来仿真调试芯片,省去了价格昂贵的在线仿真器;

(4)灵活方便的接口:ARM体系结构具有协处理器接口,允许接16个协处理器。既可以使基本的ARM处理器内核尽可能小,方便地扩充ARM指令集,也可以通过未定义指令来支持协处理器的软件仿真;

(5)低电压功耗的设计:考虑到ARM体系结构的处理器主要用于手持式嵌入式系统中,ARM体系结构在设计中就十分注意功耗的设计;

(6)采用RISC型处理器结构:ARM采用RISC结构,在简化处理器结构,减少复杂功能指令的同时,提高了处理器的速度;

ARM9数据类型:ARM9数据类型有字节、字、半字。在ARM体系结构及常见的8位/16

位处理器体系结构中,字节的长度均为8位;字在ARM体系结构中的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位;半字在ARM体系结构中的长度为16位,这与8位/16位处理器体系结构中字的长度一致。

ARM9存储结构:ARM9体系结构将存储器看作是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB(232字节)。ARM9可以用两种方法存储字数据,称之为大端格式和小端格式。大端格式的字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址。小端格式与大端存储格式相反。低地址中存放的是字数据低字节,高地址存放的是字数据的高字。

ARM9工作模式

(1)用户模式(usr):应用于正常程序执行的模式,大部分任务执行在这种模式;

(2)快速中断模式(fiq):应用于高速通道传输或通道处理。当一个高优先中断级产生时会进入这种模式;

(3)外部中断模式(irq):应用于一般的中断处理。当一个低优先中断级产生时会进入这种模式;

(4)管理模式(svc):供操作系统使用的一种保护模式。当复位或软中断指令执行时会进入这种模式。

(5)中止模式(abt):应用于虚拟存储及存储保护。当存取异常时,会进入这种模式。

(6)未定义模式(und):应用于软件仿真硬件处理器。当执行未定义指令时会进入这种模式。

(7)系统模式(sys):应用于特权级的操作系统任务。供需要访问系统资源的操作系统任务使用。

2 S3C2440A处理器

S3C2440A是韩国三星公司推出的16/32位RISC微控制器,其CPU采用的是ARM920T 内核,加上丰富的片内外设,为手持设备和其它应用,提供了低价格、低功耗、高性能微控制器的解决方案。S3C2440A的详细资料可参考用户手册,这里主要介绍S3C2440A的特性、时钟管理、中断体系结构。

2.1 S3C2440A的主要特性

(1)具有16KB指令Cache、16KB数据Cache和存储器管理单元MMU;

(2)外部存储器控制器,可扩展8组,每组128MB,总容量达1GB;支持从Nand flash存储器启动;

(3)4通道的DMA,并且有外部请求引脚;

(4)3个通道的UART,带有16字节的TX/RX FIFO,支持IrDA1.0功能;

(5)具有2通道的SPI、1个通道的IIC串行总线接口和1个通道的IIS音频总线接口;

(6)2个USB主机总线的端口,1个USB设备总线的端口;

(7)有4个具有PWM功能的16位定时器和1个16位内部定时器;

(8)8通道的10位A/D转换器,提供有触摸屏接口;

(9)具有130个通用I/O口和24通道的外部中断源;

(10)兼容MMC的SD卡接口;

(11)看门狗定时器;

(12)具有日历功能的RTC;

(13)具有PLL功能的时钟发生器,时钟频率高达533MHz;

(14)具有电源管理功能,可以使系统以普通方式、慢速方式、空闲方式和掉电方式工作;

(15)电源系统:内核供电电压为1.2V,存储器供电电压为1.8V/2.5V/3.3V, I/O供电电压

为3.3V。

2.2 S3C2440A的时钟管理

S3C2440A含有两个锁相环MPLL、UPLL产生系统所需要的不同频率的时钟。

MPLL分别为CPU产生内核时钟(FCLK),为高速总线(AHB)产生总线时钟(HCLK),例如存储器、DMA都将其作为它们工作时钟;MPLL还为其它外部资源产生I/O接口时钟。内核时钟(FCLK)是由输入时钟经过锁相环(PLL)倍频得到的,这个输入时钟的频率一般为12MHz。

系统刚上电启动时,晶振是不稳定的,及毫秒后晶振稳定。这时锁相环(PLL)并未启动,此时内核时钟(FCLK)频率与晶振频率一样,为12MHz。当复位信号(nRESET)恢复为高电平后,CPU开始工作并执行指令,在程序开始位置设置MPLL寄存器后就启动锁相环。但在启动后等待一段时间,锁相环(PLL)才工作稳定,这段时间称为Clocktime。在此期间,内核时钟(FCLK)是没有频率的。CPU也停止工作。经过Clocktime时间段后,锁相环(PLL)倍频形成一个新锁相环的频率(MPLL),并且处于正常的工作状态,此时CPU工作在新的频率下。这一过程如下图所示

倍频后锁相环输出频率公式如下:

MPLL =(2×m×Fin)/(p×2S)

m = M+8,M:M寄存器的值

p = P+2,P:P寄存器的值

S:S寄存器的值

UPLL为USB产生USB时钟(UCLK),一般为48MHz。

2.3 S3C2440A的中断体系结构

S3C2440A的中断体系结构主要由中断源和控制寄存器两大部分构成,其寄存器主要有4种:模式、屏蔽、优先级、挂起(标志)寄存器等。S3C2440中断控制器有60个中断源对外提供24个外中断输入引脚,内部所有设备都有中断请求信号,例如DMA控制器、UART、

IIC等。S3C2440的ARM920T内核有两个中断,分别为IRQ中断和快速中断FIQ。

当有中断(无子寄存器)产生时,中断源挂起寄存器相应位就被置为1;若有子中断源产生,这时子中断源挂起寄存器相应位就被置为1;如果子中断没有被子中断源屏蔽寄存器屏蔽,那它在中断源挂起寄存器相应位也被置为1;若中断源在中断寄存器中未被屏蔽,那就进入中断模式。在中断模式中将决定进入快速中断(FIQ)或普通中断(IRQ);若进入快速中断(FIQ),则直接处理;若为普通中断(IRQ),则可能有几个中断同时被触发,那这几个中断就要经过中断优先级仲裁器处理来选出级别高的中断,然后中断挂起寄存器的相应位就被置为1。这一过程如下图所示:

3 S3C2440A存储控制器

3.1 S3C2440A存储控制器特性

(1) S3C2440A存储器管理器提供访问外部存储器的所有控制信号,它有27位地址信号、32位数据信号、8个片选信号、以及读/写控制信号等;

(2)S3C2440A存储器管理器总共有8个存储器bank,从bank0至bank7,bank0---bank5为

固定128MB,bank6和bank7的容量可编程改变,可以是2、4、8、16、32、64、128MB,最大共1GB;

(3)bank0可以引导ROM,其数据线宽只能是16位和32位,其它存储器的数据线宽可以是8位、16位和32位;

(4)CPU提供的8个片选信号分别对应bank0至bank7,当访问到某个bank时,相应的片选信号输出低电平;

(5)每个存储器bank可外接总线型设备,这些设备共用系统总线,而且存储器bank的片选信号线与对应总线设备的片选端相连接;

(6)前7个存储器bank的起始地址是固定的,最后一个存储器bank的起始地址可由编程来选择。

3.2 SDRAM原理分析

SDRAM掉电后并不能够保持数据的特性,但其存取速度快,具有可读写特点,经常应用于程序运行空间及数据及堆栈区。本项目开发板使用了两片内存(SDRAM),型号为K4S561632,每片的容量为32M,数据宽度为32bit,连接在BANK6上,片选信号nGCS6,地址范围:0x3000_0000至0x33FF_FFFF。SDRAM部分原理图如图所示

图中可看出:

片选为nGCS6;

时钟信号为nSCKE和nSCLK;

写使能为nWE;

列地址选通为nSCAS;

行地址选通为nSRAS;

SDRAM内部是一个存储阵列,相当于一个表格,表格中每个单元被称作存储单元。若要找到这个单元就需要找到行地址和列地址,整个表格称为逻辑bank(L-bank)。在K4S561632中,行地址数为13,列地址数为9,并且.有四个逻辑BANK(L-BANK),这样

就需要两根信号线来选中其中的一个,这两根信号线在图中为BA0和BA1。此外,K4S561632的地址线是由ADDR2至ADDR14,因为SDRAM是32位的,数据都以32位进行存取,所以不会访问到最低的两个字节,故ADDR0与ADDR1是不接的。当列地址选通nSCAS信号有效时,地址线的前9为(ADDR2至ADDR10)发出列地址信号;当行地址选通为nSRAS 信号有效时,地址线(ADDR2至ADDR14)发出行地址信号。

3.3 FLASH原理分析

FLASH存储器是一种系统可编程器件,存储信息即使在掉电的情况下也不会丢失,它具有擦写速度快、功耗低、能够整片以及分扇区编程(烧写)和擦除程序等特点,并且可以利用内部嵌入的算法来完成对芯片的操作,因而广泛的应用于嵌入式系统中。

这一系统有两类Flash。一类是NOR FLASH,型号为EN29LV160AB,大小为2M,数据宽度为16bit,它连接在BANK0上,片选信号nGCS0,地址范围:0x0000_0000至0x0020_0000。其特点是线性寻址、可直接按地址进行读写操作、写操作之前需进行擦除操作、写入和擦除速度较慢、读取速度较快、单位密度低、成本较高。另一类是一类是NAND FLASH,型号为K9F2G08,大小为256M * 8Bit,数据宽度为8bit,一般用于存储大容量数据。它连接在BANK0上,片选信号nGCS0,地址范围有专门的时序控制总线,不占用系统总线资源。其特点是非线性寻址、读操作时,一次必须读一个扇区(512字节)、写操作时,可按指定地址直接写入、写之前必须进行擦除操作、单位密度高、成本低、擦除速度快。

与NOR Flash相比,NAND Flash在容量、功耗、使用寿命等方面的优势使其成为高数据存储密度的理想解决方案;NOR Flash的传输效率很高,但写入和擦除速度较低;而NAND Flash以容量大、写速度快、芯片面积小、单元密度高、擦除速度快、成本低等特点,在非易失性类存储设备中显现出强劲的市场竞争力。在使用NAND Flash存储器时,有时会出现坏块和位交换。其坏块是随机分布的,需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用;NAND Flash中发生的次数要比NOR Flash多,在使用NAND闪存时,同时使用EDC或ECC校验算法。其使用方法是NOR Flash可在芯片内执行(XIP,eXecute In Place),应用程序可以直接在FIash闪存内运行,不必再把代码读到系统RAM中;而NAND Flash 则需I/O接口,因此使用时需要写入驱动程序

通过以上分析我们知道,NAND Flash地址范围有专门的时序控制总线,不占用系统总线资源,所以程序并不是从零地址开始执行。这就通过S3C2440A内部有一个叫“起步石(Steppingstone)”的SRAM缓冲器来解决的。系统启动时NAND Flash存储器的前面4K字节的代码被自动拷贝到起步石(Steppingstone)中,同时起步石(Steppingstone)被映射到nGCS0对应的BANK0存储空间,CPU然后在Steppingstone的4KB内部缓冲器中开始执行引导代码,在引导代码执行完毕后,自动跳转到SDRAM执行程序。可以说着前4KB的引导代码是非常重要的,必须确保器不能有位错误。

4 嵌入式系统硬件功能模块

4.1实时时钟(RTC)

在嵌入式系统中,实时时钟(RTC)是一个非常重要的部分,一般TX2440内部有实时时钟(RTC),它一般通过对寄存器操作来获取时间。实时时钟(RTC)单元在系统电源关闭的情况下可以在备用电池下工作。RTC 可以使用STRB/LDRB ARM 操作传输二进制码十进制数的8位数据给CPU。实时时钟(RTC)主要组成部分有瑞年发生器、读写寄存器、备用电池、报警功能、节拍时间中断。

闰年发生器可以从28、29、30、31 中确定每个月的最后一天。该模块在确定某月最后一天的时候会考虑闰年的因素。一个8位的计数器仅能代表两个BCD 数字,所以它不能确定是否是00年(该年的最后两个数字是00)。例如,它不能区别1900 年和2000 年。为了解决这个问题,S3C2440A 的RTC 模块有一个硬件逻辑来支持在2000 年的闰年。记录1900 年不是闰年而2000 年是闰年。因此两个数字00 在S3C2440A 中记录的是2000 年而不是1900 年。

为了写实时时钟(RTC)模块中的BCD寄存器,RTCCON寄存器的位0 必须置1。为了显示秒分小时星期日月年,CPU应该分别读取在RTC模块中的BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON,和BCDYEAR。但是,因为多寄存器读取可能存在一秒的误差。例如,当用户读BCDYEAR和BCDMON,结构假定是2059年12 月31 日23 点59 分。当用户读BCDSEC寄存器,值的范围是从1到59(秒)就没有问题,但是如果值是0,年月日就变成了2060年1月1日0时0分因为有刚才提到的1秒误差。在这种情况下如果BCDSEC为0,用户应该重读BCDYEAR到BCDSEC。

实时时钟(RTC)逻辑可以由备用电池驱动,其通过RCTVDD 引脚给RTC 模块提供电源,即使系统电源关闭。当系统关闭时,CPU 和RTC 模块的接口是封闭的,备用电池仅驱动振荡电路和BCD 计数器以最小化电源消耗。

实时时钟(RTC)在掉电模式或正常操作模式下的特定时间会发出报警信号。在正常操作模式下报警中断(INT_RTC)被激活。在掉电模式下,电源管理唤醒信号(PMWKUP)也如INT_RTC一样被激活。RTC 报警寄存器(RTCALM)决定了报警的使能状态和报警时间设定的条件。

实时时钟(RTC)节拍时间是用于中断请求。TICNT 寄存器有一个中断使能位和对于中断的计数器值。当节拍时间中断出现时,计数器的值为0。节拍时间可以用于实时操作系统内核时间节拍。如果时间节拍由实时时钟(RTC)时间节拍生成,与实时操作系统功能相关的时间就会和实时同步。

通过以上分析,实时时钟(RTC)点如下:

(1) 时钟数据采用BCD 编码;

(2) 时钟数据有:秒、分、时、日、月、年、星期;

(3) 能够对闰年的年月日进行自动处理;

(4) 具有告警功能,当系统处于关机状态时,能产生告警中断;

(5) 具有独立的电源输入,32.768K的晶振是其时钟输入;见图所示

(6) 提供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟;

4.2数模转换器(ADC)

S3C2440片内自带了8通道10位数模转换器(ADC)模块,S3C2440的A/D转换器包含一个8通道的模拟输入转换器,可以将模拟输入信号转换成10位数字编码。在A/D转换时钟频率2.5MHz时,其最大转换率为500KSPS,其输入电压范围为0~3.3V,A/D转换器支持片上操作、采样保持功能和掉电模式, AD转换接口中的AIN[7]通道和AIN[5]通道为触摸屏的模拟信号输入口

启动AD有两种方式,读取方式和置位启动。读取方式是将将ADCCON中的READ_START 设置为1,即每次读取ADCDAT0中的数都会触发下一次AD转换;置位启动是将ADCCON中的ENABLE_STAERT设置为1,即启动AD转换;AD转换开始后改位自动清零。

4.3通用异步串行口(UART)

通用异步串行口(UART)电路的设计是使用MAX232作为TTL电平和RS-232电平的转换器件,MAX3232输入端可以直接连接PC机,高电位为3.3v。S3C2440 的通用异步串行口(UART)有三个独立的异步串行I/O 端口:UART0、UART1、UART2;每个串口都可以在中断和DMA 两种模式下进行收发;它所支持的最高波特率达230.4kbps。每个通用异步串行口(UART)包含波特率发生器、接收器、发送器和控制单元。其中,波特率发生器以PCLK 或UCLK为时钟源,发送器和接收器各包含1个64位的FIFO 寄存器和移位寄存器。

本系统UARTO应用于PC机通信,而且在调试程序时,也可以作为标准输入输出接口设备,UART1可直接连接打印机。在目前,PC机在通信工业中最常见的通信接口是RS-232。RS-232是一种在低速率串行通讯下增加通讯距离的单端标准。RS-232采采用不平衡传输方式,即单端通讯。发送数据时,发送端驱动器输出正电平在+5v至+15v,负电平在-15v至-5v。无数据传输时,通信线上为TTL电平,从开始传送数据到结束的时段内,通信线上的电平是由TTL电平转换到RS-232电平,然后再转换至TTL电平。接收器典型工作电平在+3v至+l2v,-12v至-3v。串口通讯接口电路如图3一14所示:

4.4 DM9000网卡芯片

本系统采用了DM9000网卡芯片,这是一款完全集成的和符合成本效益的,单芯片快速以太网MAC控制器,其是集成度高而且功耗低。它的主要特性如下:

(1)提供了介质无关的接口,用来连接所有提供支持介质无关接口功能的网络设备或其他收发器,并支持10/100M带宽的以太网连接;

(2)芯片内部自带4K双字的SRAM,其中3KB用来发送,13KB用来接收。DM9000网卡芯片在发送与接收数据时采用的总线是ISA总线兼容模式,8个IO基址分别是300H, 310H,320H, 330H, 340H, 350H, 360H, 370H。IO基址与设定引脚或内部EEPROM的共同选定;访问芯片有两个地址端口,分别是地址端口和数据端口。当引脚CMD接地时,为地址端口;当引脚CMD接高电平时,为数据端口。在访问任何寄存器前,地址端口输入的是数据端口的寄存器地址,寄存器的地址必须保存在地址端口;

(3)DM9000网卡芯片支持8位,16位和32 位接口访问内部的存储器,来支持不同的处理器。DM9000网卡芯提供的DMA(直接存取技术)来简化对内部存储器的访问。在对内部存储器起始地址完成编程后,然后发出伪读写命令就可以加载当期数据到内部数据缓冲区,可以通过读写命令寄存器来定位内部存储区地址。根据当前总线模式的字长使存储地址自动加1,下一个地址数据将会自动加载到内部数据缓冲区。要注意的是在连续突发式的第一次访问是读写命令的内容。内部存储器空间大少为16K字节。低3K字节单元用作发送包的缓冲区,其他13K字节用作接收包的缓冲区。所以在写发送包存储区的时候,当存储器地址越界后,自动跳回0地址并置位IMR第七位。同样在读接收包存储器的时候,当存储器地址越界后,自动跳回起始地址0x0c00;

(4)DM9000网卡物理协议层接口完全支持使用10MBps下3类、4类、5类非屏蔽双绞线和100MBps以下的5类非屏蔽双绞线,这是完全符合IEEE 802.3u规格。非屏蔽双绞线连接头内部已经包含了藕合线圈,所以不需要再连接网络变压器,使用普通的网线就可将本地系统连接到路由器或者交换机;

(5)DM9000网卡芯片还具有自动协调功能,可自动完成配置来最大限度地适应其线路带宽。同时还支持IEEE 802.3x全双工流量控制。因此用户可以较容易地移植嵌入式系统下的端口驱动程序。

DM9000网卡芯片如图3一巧所示:

4.5 CAN总线电路

CAN为串行通讯协议,可以有效地支持具有高安全等级的分布式实时控制。CAN有很广的应用范围,从高速网络到低价位的多路接线都可以使用CAN,其传输速度超过1Mbit/s。同时,建立CAN总线技术规范是很重要的,其目的是为了在任何两个CAN仪器之间建立兼容性。但是兼容性有不同的方面,如数据转换和电气特性的解释。一般根据ISO/OSI参考模型尽可能达到设计透明度以及实现灵活性。CAN总线在进行数据传送时,发出报文的单元称为该报文的发送器。该单元在总线空闲或丢失仲裁前为发送器。如果一个单元不是报文发送器,并且总线不处于空闲状态,则该单元为接收器。对于报文发送器和接收器,报文的实际有效时刻是不同的。对于发送器而言,如果直到帧结束末尾一直末出错,则对于发送器报文有效。如果报文受损,将允许按照优先权顺序自动重发送。为了能同其他报文进行总线访问竞争,总线一旦空闲,重发送立即开始。对于接收器而言,如果直到帧结束的最后一位一直末出错,则对于接收器报文有效。

本系统中,CAN总线电路使用的是MCP2510芯片和TJA1050芯片。MCP2510是一种带有SPI接口的CAN控制器,它支持CAN技术规范;而且可发送相应扩展的信息帧,还具有信息管理和接收滤波的功能。MCP2510通过SPI接口与系统主机进行数据传输,最高数据传输速率可达5Mb/s,系统主机可通过MCP2510与CAN 总线上的单元通讯。MCP2510含有二个接收缓冲器、三个发送缓冲器。同时它的中断管理能力非常灵活,这些特点使得MCU 对CAN 总线的操作变得非常简便。MCP2510的主要原理包括收发操作、中断管理、错误检测。MCP2510的收发操作通过三个发送缓冲器来加以实现的,这三个发送缓冲器各占据14个字节;MCP2510有8个中断源,包括发送中断、接收中断、总线唤醒中断及错误中断等。利用中断屏蔽寄存器CANINTF和中断使能寄存器CANINTE和可以方便地实现对相应中断的有

效管理。当中断发生时,INT引脚呈现低电平状态,并一直保持在低电平,直至系统主机清除中断为止。在使用CAN控制器MCP2510时,需要对MCP2510进行初始化以及对CAN 总线上的数据进行收发操作。与其它CAN控制不同的是,读、写MCP2510的发送和接收缓冲器必须通过SPI接口协议的读写命令来实现。写指令首先被发送到MCP2510的SI引脚,并在SCK 的上升沿锁存每个数据位,然后发送地址和数据。执行完毕指令后,数据被写进指定的地址单元中,再通过SPI 接口协议的写命令来设置发送位以启动发送。

TJA1050是由飞利浦(Philips)公司生产同时用以代替82C250的高速CAN总线驱动器。这一器件提供了CAN控制器同物理总线之间的连接接口以及对CAN总线的差动发送功能和接收功能。TJA1050除了具有82C250的主要特性,它在其它某些方面的性能也有了很大的改善。TJA1050总线驱动器完全兼容ISO标准,主要应用于通信速度在60kbps至1Mbps 高速应用领域。它还具电路保护功能,可有效防止发送输出级对电源、地或负载短路,同时还具有其过热保护功能。TJA1050有两种工作模式:高速工作模式和待机模式。TJA1050的正常工作模式就是高速模式,我们此时将脚8接地便可实现高速工作模式。待机模式时,发送器被关闭,这样可防止由于CAN控制器失控而造成网络阻塞,器件的所有其它部分仍继续工作,此时将引脚8接高电平。同时,在TJA1050中还设计了一个超时定时器,用以监视TXD端的低电位,这一功能的作用是可以避免因系统硬件或软件故障而使TXD端长时间处于低电位,这就导致总线上所有其它节点也将不能够进行通信,运行机制特点就是TXD 端信号的下降沿可启动该定时器。当TXD端低电位持续时间超过了定时器的内部定时时间的时候,此时应将发送器关闭,使CAN总线回归到隐性电位的状态。而在TXD端信号的上升沿定时器将会被复位,使TJA1050恢复到正常工作的状态。MCP2510芯片和TJA1050芯片如图所示

4.6 复位电路

系统在开始运行的时候,一般都是从复位开始进行的。程序有时在运行过程中会出现一些问题,这时我们也可以通过复位操作来使系统重新运行。系统的复位功能就是对系统所进行的一种初始化操作。系统的一些部件通过复位操作便可处于确定的初始状态,并且便可以开始运行,所以复位在嵌入式系统中有着很重要的作用。复位电路在嵌入式系统中主要完成以下工作:刚上电时提供相应的复位信号,一直到系统供电电压处于稳定的状态,这时再撤除。本嵌入式系统中所使用的复位芯片是MAX811S,这是一个4引脚微处理器电压监视器,并且带有手动复位输入(4管脚微处理器电压监控器,低有效复位输出),它实现了系统核心S3C2440所需的低电平复位功能,如图3一17所示。本嵌入式系统中S3C2440的RESET 引脚就是复位信号的引脚,当电源打开然后达到稳定状态时,RESET引脚低电平不应少于4个MCLK周期时,此时系统可以复位。

4.7 电源模块

本嵌入式系统中的S3C2440微处理器工作在300MHZ时内核电压为1.2V,压为1.3V,但其片内功能模块的工作电压为3.3V。本系统外接5V直流变压器,通过降压芯片产生整个系统所需要的两种电压:3.3V、1.25V。电源电路如图3一18

图电源电路

@嵌入式系统软件平台搭建

1 嵌入式Linux操作系统

当前常用的嵌入式操作系统有嵌入式Linux、WinCE、VxWorks、μC/OS,其特点如下:WinCE的缺点是体积庞大,价格昂贵,不完全开放源码。因此随着嵌入式操作系统领域日益激烈的竞争,微软不得不应付来自Linux等免费系统的冲击。

VxWorks是美国WindRiver公司专门为实时嵌入式系统设计开发的操作系统软件。VxWorks拥有良好的持续发展能力、高性能的内核以及友好的用户开发环境,在实时嵌入式操作系统领域占据一席之地,但其昂贵的价格让不少厂商望而却步。

μC/OS是一个典型的实时操作系统。它是研究和学习实时操作系统的重要选择。

其特点:源码公开、代码结构清晰、可移植性好、可裁减、可固化、内核属于抢占式,最多可以管理60个任务,但是μC/OS操作系统的价格也不菲。

Linux本身所具备的源码开放、内核可裁减等种种特性使其成为一种重要的嵌入式操作系统;随着嵌入式Linux技术的成熟,定制更加方便,同时支持更多的平台。当与其他可用的不同商用操作系统作比较时,Linux最大的优势在于它的价格、可靠性,还有它所赋予开发人员更大的自由。而且Linux内核在今后还会不断更新和完善。

通过以上分析,Linux具多用户、多任务、丰富的网络功能、良好的可移植性、开源、免费等优势,同时综合考虑本项目特点,所以我们选择嵌入式Linux操作系统为开发平台。

1.1交叉编译环境的建立

由于有一些嵌入式系统的存储容量小,同时处理能力较弱,不能在它上面安装开发软件;

而有的嵌入式系统处理器的结构比较特殊,一般的开发工具无法在上面运行。例如:Linux 就没有像WinCE 那样的集成开发环境。所以,我们对于Linux 嵌入式系统的开发,就需要采用交叉编译的方式来进行。交叉编译就是指在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码。简单地说,就是在一个平台上生成另一个平台上的可执行代码,这个编译过程就叫交叉编译,即开发人员在PC 操作系统平台中生成Linux 嵌入式平台中的应用程序。这里所谓的平台,实际上包含两个概念:体系结构和操作系统。同一个体系结构可以运行不同的操作系统;同一个操作系统也可以在不同的体系结构上运行。我们在进行嵌入式项目开发时,开始阶段并未建立目标平台,这时就需要进行交叉编译,以生成相应操作系统内核;当能够启动目标平台后,由于开发人员在目标平台上所使用的资源有限,因此当编译大型的程序时,也需要交叉编译。本系统交叉编译环境的开发流程如图4一1所示。这里主机一般采用通用PC 机上的Linux 系统,目标系统一般为S3C2440微处理器构成的目标开发板。通常,在主机与目标板之间的数据通信可以通过使用串口、以太网接口、USB 接口和J-Link 等连接方式来进行。

我们先在宿主机中安装redhat 系统,然后进行Samba 、NFS 等服务器配置,接着构建

安装相应交叉编译工具链,移植Bootloader 启动程序,并烧写进嵌入式Linux 存储器中;再移植嵌入式Linux 内核及相应的文件系统;并下载到嵌入式Linux 硬件平台,最后编译应用程序,同样下载到嵌入式Linux 硬件平台中去。

1.2交叉编译工具链的建立

交叉编译的综合开发环境是由编译器、连接器和解释器构成。要进行交叉编译,我们需

要在主机平台上安装对应的交叉编译工具链,然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。交叉编译工具一般包括gcc 、glibc 和binutils 。Linux 系统下的交叉编译环境包括4个部分:

(l)目标系统编译器gcc;

(2)目标系统二进制工具binutils;

(3)目标系统标准C库glibe,有时考虑需要减小libc库大小,也可用其它C库代替glibe,例如uelibe、newlib等;

(4)目标系统Linux内核中的头文件。

arm交叉编译开发环境建立的过程如下:

(1)创建开发编译环境。这一过程中,我们设置相应的环境变量,创建对应的安装目录,并且还要安装头文件和内核源代码等;

(2)建立嵌入式系统内核头文件;

(3)建立嵌入式系统二进制工具;

(4)建立嵌入式系统的初始编译器;

(5)建立嵌入式系统标准C库;

(6)建立一个嵌入式系统全套编译器。

通过以上分析,我们看出交叉编译工具链的建立是一个比较复杂的过程,一般可直接从网上下载一些编译好的可用的交叉编译工具链。

1.3交叉编译工具的安装

我们一般通过相关网站下载源代码,然后按以下步骤进行安装:

(l)将下载的源码包arm-linux-gcc-4.3.2.tgz复制到djl目录下,然后进入到djl目录中,执行相应的命令:

#cd djl

#tar xzvf arm-linux-gcc-4.3.2.tgz –C

(2)执行完命令后,arm-linux-gcc-4.3.2.tgz就自动被解压到/usr/local/arm/目录下。其中,bin 目录下存放的是可执行文件,本项目中使用arm-linux-gcc编译器。lib目录下存放的是库文件,编译出的应用程序在运行时都要依赖这些库文件。

(3)进入刚解压的目录下,先后执行make和make install命令,就可完成安装。把在系统环境变量中加入编译器路径,可运行命令

#vi etc/profile,

在文件中,添加环境变量和相应路径export PATH=/usr/local/arm/4.3.2/bin:$PATH,然后保存退出。最后执行命令:

#source etc/profile

这样,就使profile文件生效,

(3)重新登录系统,在命令行输入arm-linux-gcc -v,这样就成功安装交叉编译工具。

1.4交叉编译工具的使用

由于嵌入式系统软件的代码量非常大,有时会有成百上千个文件,单个文件的编译时不现实的,所以我们就要编写相应的编译规则,然后将编译规则写成Makefile文件。同时,根据Makefile文件定义的规则和步骤利用代码维护工具GNU make,完成整个软件项目的代码生成和维护工作。

GNU make将整个软件项目的代码分开放在几个小的源文件中,在改动其中一个文件的时候,可以只对该文件进行重新编译,然后重新链接所有的目标文件。这样就节省了大量的编译时间。

2 嵌入式系统Boot1oader的移植

2.1 Boot1oader简介

简单地说,Bootloader就是在操作系统运行之前所要运行的一段小程序。通过这段小程

序,可以初始化硬件设备、建立系统的内存空间映射图,从而将系统的软件硬件环境带到一个合适的状态,以便为调用操作系统内核准备好正确的环境。Bootloader最终会把操作系统内核映像加载到RAM中,并将系统控制权交给它。

2.2 Boot1oader的操作模式及启动过程

大多数Bootloader都包含两种不同的操作模式,即启动加载模式和下载模式,二者的区别仅对开发人员才有意义,从最终用户的角度看,Bootloader的作用就是加载操作系统。在嵌入式系统中,CPU上电后会从某个地址开始执行,同时ROM或Flash等存储器就被映射到这个地址中;Bootloader通常会存放在这个地址开始位置,这样Bootloader在CPU一上电就能够被执行。

Bootloader启动流程分两个阶段。第一阶段的代码通常都用依赖于CPU体系结构的汇编语言代码来实现,其运行效率比较高。第二阶段则一般用C语言实现,一方面使系统能够实现复杂的功能,更重要的是这种代码具有更好的可读性和可移植性。

2.3 U-boot的移植

U-boot是德国DENX小组开发用于多种嵌入式CPU的bootloader程序,UBoot不仅支持嵌入式Linux系统的引导,而且它还支持VxWorks、QNX、RTEMS、ARTOS、LynxOS 等嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。U-boot的目录如下所示:

(l) board:开发板相关目录。

(2) common:通用的命令函数。

(3) cpu:特定CPU架构相关目录,如arm920t。

(4) doc:uboot的开发、使用文档。

(5) drivers:uboot支持的设备驱动程序,比如串口,nandflash,网卡。

(6) fs: 支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。

(7) include:头文件和开发板配置文件,configs目录下是开发板的配置文件。

(8) lib_xxxx: 与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。

(9) lib_generic:通用的库函数。

(l0) net:各种网络协议,TFTP协议、NFS协议等。

(l1) tools:uboot自带的工具。

U-boot的启动分两个阶段,第一阶段主要在目录cpu/arm920t/start.s 完成硬件初始化,其完成的工作有:

(l)设置CPU工作模式;

(2)关看门狗;

(3)设置系统时钟;

(4)关MMU和CACHE;

(5)为第二阶段准备RAM空间(调用board/smdk2410/lowlevel_init.s);

(6)设置堆栈;

(7)跳转到第二阶段代码的C入口点(lib_arm/board.c start_armboot( ) )。

第二阶段主要在目录lib_arm/board.c中的start_armboot函数完成较为复杂硬件的初始化:(l)init_sequence:初始化CPU,设置系统时钟,初始化定时器,初始化环境参数,初始化串口控制台,检测内存映射;

(2)flash_init: 初始化NORFLASH;

(3)env_relocate: 初始化环境变量;

(4)初始化系统外围设备;

(5)最后在目录command/main.c中调用main_loop()函数。

在第二阶段程序中,将所要初始化及设置的硬件模块地址存入指针变量中,并将建立一个指针数组,同过二级指针来对这些硬件模块进行操作,并向主函数返回相应信息。

移植U-boot时,常用的简便方法是选择一种已经支持开发板平台的U-boot进行修改。本系统的选用U-boot.1.1.6作为Bootloader。主要移植步骤如下:

(l) 修改Makefile文件,添加开发板的配置选项,建立相应开发板文件,使U-boot能够支持本开发板。其中,由于4.3.2版本的编译器无法成功编译U-boot,所以这里我们选用3.3.2版本的编译器;

(2)修改U-boot中的文件,以匹配S3C2440;

(3)交叉编译U-boot。

编译完成会在根目录u-boot-1.1.6下生成镜像文件“u-boot.bin”。

3 Linux内核分析和配置

Linux内核的最初版本由Linus Torvalds在1991年发布,最初的版本仅支持386的机型,随着时代发展,Linux内核版本也不断更新,到现在已经发展到2.6.40以上版本,本项目所使用的Linux内核版本为2.6.31。内核的版本号可在内核源码顶层目录下Makefile文件中查看

Linux内核的源码目录结构比较复杂,这里介绍主要几个模块:

(l)arch目录:与体系结构相关的代码。对应于每个支持的体系结构,有一个相应的子目录如x86、arm等,每个体系结构子目录下包含几个主要子目录:boot为启动内核所需的平台特有代码;kernel为体系结构特有特征(如SMP)的实现;mm为与体系结构相关的内存管理代码;lib为与体系结构相关的通用函数的实现;

(2)drivers:所有设备驱动程序代码,它占整个内核代码量一半以上,每一个子目录对应一类驱动程序;

(3)fs:文件系统代码,每个支持的文件系统有相应的子目录,如cramfs,yaffs,jffs2等。

(4)include:包括编译内核所需的大部分头文件,与平台无关的头文件放在include/linux子目录下,平台相关的头文件如include/asm-arm等;

(5)init:内核初始化代码;

(6)kernel:内核管理核心代码;

(7)lib:库函数代码;

(8)Mm:内存管理代码;

(9)net:网络支持代码;

(10)sound:音频设备驱动代码;

(11)scripts:用于配置内核的脚本文件;

(12)documentation:内核相关文档。

由于嵌入式系统的运行空间具有局限性,对操作系统所占内存容量有较严格的要求,所以我们在设计时要根据相应的硬件平台来裁剪Linux内核。而且,更新后的内核支持更多硬件平台,具有更优化的进程管理能力,运行速度更加快素、稳定,并且一般会对老版本中已经发现的一些漏洞进行修复,所以结合具体开发板在选择Linux内核版本不能太陈旧。为了使内核编译配置选项能被正确合理地设置,因此只编译系统需要的功能代码。

建立好交叉编译环境后就可以根据配置Linux内核了。

(l) 解压Linux内核源码;

(2)修改Makefile文件,指定系统硬件架构和交叉编译器,这里为arm和arm-linux;

(3)修改时钟和机器码,本硬件平台时钟为12MHz,机器码为S3C2440;

(4)进入图形化配置界面进行系统配置;

(5)编译内核。编译完后,会在arch/arm/boot下生成zImage内核镜像文件。

4嵌入式文件系统移植

4.1嵌入式文件系统介绍简介

文件系统是操作系统的重要组成部分,所谓文件系统是指操作系统中负责管理和存储文件以信息的软件机构;它是一套软件代码。由于linux嵌入式操作系统的设备是以文件的形式存在于在系统中,将这些文件进行分类管理,同时提供与内核交互的接口,这就构成的目录结构即嵌入式文件系统。linux嵌入式操作系统的顶层目录如下所示:

(l)bin:所有用户都可以使用的基本命令;

(2)sbin:只有管理员能够使用的命令(系统命令);

(3)dev:设备文件(对应具体硬件设备);

(4)etc:配置文件;

(5)lib:共享库和驱动模块;

(6)home:用户目录;

(7)root:根用户目录;

(8)var:log文件,临时文件;

(9)proc:作为proc文件系统的挂载点;

(10)mnt:临时挂载某个文件系统的挂载点;

(l1)tmp:临时文件;

(l2)usr:系统中所有的应用程序和文件,其中包括应用程序、用户管理程序、本地目录、Linux 内核的源码

4.2嵌入式文件系统结构

Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了便于统一管理各类文件系统,Linux引入虚拟文件系统VFS(Virtual File System),为各类文件系统提供统一的操作界面和应用编程接件口如下图所示:

嵌入式学习心得体会5篇

嵌入式学习心得体会5篇 嵌入式学习心得体会(一) 首先我声明,我是基于嵌入式系统平台级设计的,硬件这个方向我相对来讲比较有发言权,如果是其它方面所要具备的基本技能还要和我们培训中心其它专业级讲师沟通。他们的方面上我只能说是知道些,但不是太多,初级的问题也可以问我。 对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的modem 射频模块,都采用成熟的套片,而当年国际上只有两家公司有此技术,自我感觉模拟功能不太强的人,不太适合搞这个,如果真能搞定到手机的射频模块,只要达到一般程度可能月薪都在15k以上。 另一类就是数字部分了,在大方向上又可分为51/arm的单片机类,dsp类,fpga 类,国内fpga的工程师大多是在ic设计公司从事ip核的前端验证,这部分不搞到门级,前途不太明朗,即使做个ic前端验证工程师,也要搞上几年才能胜任。dsp 硬件接口比较定型,如果不向驱动或是算法上靠拢,前途也不会太大。 而arm单片机类的内容就较多,业界产品占用量大,应用人群广,因此就业空间极大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互pk,判定水平高低的依据。而接口设计这块最关键的是看时序,而不是简单的连接,比如pxa255处理器i2c要求速度在100kbps,如果把一个i2c外围器件,最高还达不到100kbps的与它相接,必然要导致设计的失败。这样的情况有很多,比如51单片机可以在总线接lcd,但为什么这种lcd就不能挂在arm的总线上,还有arm7总线上可以外接个winband的sd卡控制器,但为什么这种控制器接不到arm9或是xscale处理器上,这些都是问题。 因此接口并不是一种简单的连接,要看时序,要看参数。一个优秀的硬件工程师应该能够在没有参考方案的前提下设计出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇到一个工程师

什么是嵌入式软件开发嵌入式系统软件开发所需要学习那些知识_百(精)

什么是嵌入式软件开发?嵌入式系统软件开发所需要学习那些知识? 随着智能化和信息化网络化的不断发展,嵌入式技能已经日趋成为一种新时代新技术革命的关键。对于嵌入式系统和嵌入式软件开发人员来说,这份职业无疑是种高端应用技术的结合。是一个很有前景的职业。 嵌入式趋势来势汹涌,目前为止已经被很多企业所应用,对于这方面人才的需求更是倍感吃紧。关于嵌入式具体应用不做详细的解说,在这里有必要强调一下,嵌入式软件开发是含义,和要想在嵌入式软件开发中取得不菲的成绩所需掌握那些最基础的知识。 嵌入式技术执行专用功能并被内部计算机控制的设备或者系统。嵌入式系统不能使用通用型计算机,而且运行的是固化的软件,嵌入式技术及应用是计算机应用技术的新发展,具有广泛的应用领域和发展前景,就业形势看好。 嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑,笼统地来说,嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 这么多的应用可见嵌入式系统的前景和人才需求是相当大的,在最近几年中关于这一类的培训也层出不穷,所涉及到的课程和知识点相对来说还是有点差异的,在深圳达内福田培训中心网站上看到了关于嵌入式系统软件开发所需要掌握的几大知识点,感觉划分的很细致。 主要包含以下8个核心部分 1.Linux操作系统核心

嵌入式实验心得体会

嵌入式实验心得体会 嵌入式实验心得体会是计算机专业应该具备的常用知识,以下这篇范文整理个人对嵌入式系统的认识,和进行操作之后的个人体会,对操作的疑难的反思。下面是这篇嵌入式实验心得体会 嵌入式实验心得体会 学期开始,我们开始学习《嵌入式系统及应用》,由于初次接触嵌入式系统,感觉蛮难的,所以收获不是很大,很多的概念都比较模糊,等到学期结束开始做嵌入式课程设计时,真是茫然无从下手,自,从拿到设计主题后,我就从像热锅像上的蚂蚁,一个字“急”。最后实在没有办“法,逼着自己去学法 习,查资料,总算对嵌入式有了资浅层理解。浅 嵌入式系统本本身是一个相对模糊的定义义,一个手持的mp3和一个一pc104的微型工业业控制计算机都可以认为是嵌入是式系统。总体来说,嵌入式系统是“用于控,制,监视或者辅制 助操作机器器和设备的装备”。一个典典型的桌面linux系统统包括3个主要的软件层---linux-内核、cc库和应用程序代码。内核核是唯一可以完全控制硬件的层,内核驱动程序代件表应用程表序与硬件之间进行行会话。内核之上是c 库,,负责把posixapii转换为内核可以识别的形形式,然后调用内核,从应应用程序向内核传递参数。应用程序依靠驱动内核。来完成特定的任务。来在了解了基础知识之后,我了开始进行上机操作,当然开,,其中遇到很多的难题,很多东西都是第一次接触很,又没有别,人在旁边指导操作,完全凭借自己去摸操索索练习。其中的困难可想而知。然而坚持就是胜利而,,牙一咬眼一闭坚持做下去去,而通过本次实验,我感觉收获还是蛮多的。可感能我对于嵌入能式的知识学习的还是不太多,但是这习之外的东西收获颇丰。之

嵌入式开发工具使用

《嵌入式开发工具使用》 实验报告 学生姓名:______________________ 学号:— 专业班级:_______________ 指导教师:_________________ 完成时间: 实验2嵌入式开发工具使用实验 一?实验目的 了解嵌入式开发工具套件组成,掌握开发工具安装,熟练运用gcc各命令选项,熟练编写Makefile和使用make工具,掌握gdb各命令用于应用程序调试。 二?实验内容 实验 2.1 arm-linux-gcc安装 实验2.2编译工具gcc使用 实验2.3 编写Makefile和使用make编译 实验2.4使用gdb调试应用程序 实验2.5 使用code::blocks进行图形化编程 三?预备知识 Linux使用等 四?实验设备及工具(包括软件调试工具) 硬件:ARM嵌入式开发平台、PC机Pentium100以上、串口线。软件:WinXP或 UBUNTU开发环境。 五?实验步骤 5.1交叉编译工具配置及编译 第一步,解压缩交叉编译器工具,命令为: #cd /tmp _____________________________________________________________________ ? arm-l inu x-gcc可执行文件位于目录 /root/gcc-gdb-make_exp _________________________________________ 。 第二步,修改PATH环境变量,将arm-linux-gcc可执行文件目录添加到PATH环境变量中,命令为 5.2 arm-l inu x-gcc编译工具使用

嵌入式实验报告心得

嵌入式实验报告心得 篇一:嵌入式系统原理实验总结报告 嵌入式系统原理实验总结报告 车辆座椅控制系统实验 XX/5/23 嵌入式系统原理实验总结报告 一、技术性总结报告 (一)题目:车辆座椅控制系统实验(二)项目概述: 1.为了实现车辆座椅控制的自动化与智能化。 2.方便用户通过智能手机与车载传感器之间的联动。 3.使车辆作为当今物联网中重要的一个节点发挥作用。 4.通过车辆座椅控制系统实验实现对嵌入式系统原理课程的熟练掌握与对嵌入式系统原理知识的深化记忆。 5. 加强本组学生对嵌入式系统原理的更深层次的理解与运用。 (三)技术方案及原理 本次试验分为软件、硬件两个部分。 1.软件部分。 A.智能手机部分,包括通过智能手机对座椅的控制部分、手机所携带的身份信息部分。 本部分软件使用Java编写,其程序部分为:主程序:package ;

import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ;import ; import ; import ; public class MainActivity extends ActionBarActivity { private Button Up = null; private Button Left = null; private Button Dowm = null; private Button Right = null; private Socket socket = null; private static final String HOST = "";private static final int PORT = 10007; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(; initControl();} private void initControl() {

嵌入式学习心得体会范文

嵌入式学习心得体会范文 嵌入式学习是将学习真正“嵌入”到日常工作中,使学习的知识能得到有效的转化。下面是小编整理的嵌入式学习心得体会,欢迎大家参阅。 嵌入式学习心得体会范文: 这个题目很大,给人一种感觉我好像很成功,其实不然。实际上自己水平不高,甚至很低,但是做过了一些曲折的学习道路,同时把自己真实的学习历程表达出来,希望对后来者有借鉴的意义,甚幸! 工作三年、几成废人!

我XX年毕业于华中地区的一个理工科大学,专业是机械电子,我当时已经签了一家内陆某个省级机关工作,家里八辈是农民,并且很偏远,能够进入这样的地方是祖坟有风水。但在毕业前夕有个进入it的机会,我本想进去的,家里人极力反对,阻力可想而知。同时要交4000元的违约金,对我来说是天文数字。大学里的费用很多是借的,几乎将近一半的费用是在大学勤工俭学挣的,为了省钱,高中一个学期回家一次,大学一年回去一次。并且我个人也有特殊的人生背景(悲景更确切),这里不多说了,写十篇也写不完,同时偏离主题。这样我就参加了工作。一张报纸一杯茶的日子,几乎下班后有种很空虚和恐慌的感觉。在工作中虽然是与自己专业有点关系,但是很少。专业几乎荒废。我自己也思考,如果再不出去,自己将会成废人,只好让国家养了。两年后决定出去,但是几成废人,谁要呢,只好到学校去镀金。这是中国教育和社会的悲哀! 至于专业就改为计算机方面,听说好找工作,我说实话不是很对计算机特别感兴趣,生存第一需要。不要笑我,哈哈!

考研成绩出来,超过了国家线几十分。那个方向要两个,我第三,但是那年非碘,不面试就按分数来排,自然我落选了。其实给我面试机会也不一定要我,哈哈,自己几斤几两很清楚。 最后调剂到另外一个学校,交钱,咬咬牙,交吧!现在仍然债台高筑! 进入学校前夕 为什么要把这段列出,看后就知道了。 单位有网络,经常上网查些英语资料,在那里唯独英语没有丢很多。于是我就在网上查资料,学什么好呢,最后确定学嵌入式把,听说跟硬件相对比较紧密!而我在大学里多少学习了数字电路,单片机等,所以多少也有所利用,不会真的一无所知。当然在这之

嵌入式心得体会

对于电焊,虽然一点都不陌生,但亲手操作的机会却只有几次,因此我很庆幸能够有这样的焊接机会,进行这样的实践。 焊接看似容易,实则需要长时间练习才能掌握。刚开始的时候,手一直在抖,尤其这次焊的还是贴片电容、电阻,原器件比以前焊的小好多,用镊子的手一抖就夹不住了,拿着烙铁的手抖得都不容易将器件焊上,焊出来的焊点也特别难看,在不断尝试,不断挑战自我的过程中,我的手不抖了,也基本能掌握锡的用量了,当焊点终于不再“丑不忍睹”的时候,对焊接也没有当初的恐惧了。对自己的动手能力也有了信心。 在焊接的过程中我学到了许多以前我不知道的东西,比如,以前我只知道有电烙铁,但不知道它还有好多种类,有单用式、两用式、调温式、恒温式、直热式、感应式、内热式和外热式。松香可以将多余的锡弄下来,用酒精可以把板擦的干净些。通过视频和查找资料,知道了在焊不同的器件时用的电烙铁的头不同,比如在焊引脚时要用尖头,焊CPU时要用刀口,为防止锡将焊引脚的小孔堵住,用松香把纸条粘在小孔上,把小孔盖住,把CPU的引脚对齐,用锡先涂满两边,固定好芯片,在焊另外两边,然后用尖头的电烙铁沾着松香将多余的锡弄下来。 本次课程设计的是信号发生器,信号发生器在EDA课程,数字信号处理课程中都曾涉及,所以还是较为熟悉的,在设计之前查阅了一些相关书籍,也从网上查找了一些相关资料,程序代码中运用到了C语言,将程序加入到嵌入式结构框架中,进行定义变量,端口,设定所用的GPIO参数等等。 在焊接的过程中我不仅学到了知识,而且让我深深地体会到一个团队中各成员合作的重要性,要善于团队合作,在进行团队合作的时候,还要耐心听取每个成员的意见,每个人都有长处和短处,只有在包容别人的同时我们才可以取长补短,不断完善和不断进步,交到更多的朋友,学到更多的知识。同时还让我明白:做任何事都要一心一意,严谨认真,反复琢磨,不能畏惧,要有信心和勇气,一定要做好充分的准备。不能盲目去做,要坚持,还要学会反思跟总结,我们不是为了完成任务而完成,这还是一个学习跟提高的过程。 在大学里学的不是知识,而是一种叫做自学的能力。在这个知识爆炸的时代,知识更新太快,靠原有的一点知识肯定不行。以后的工作中肯定会用到一些新的

嵌入式实习报告总结

嵌入式实习报告总结 随着信息化技术的发展和数字化产品的普及,以计算机技 术、芯片技术和软件技术为核心的嵌入式系统再度成为当前研究和应用的热点,通信、计算机、消费电子技术(3C)合一的趋势正在逐步形成,无所不在的网络和无所不在的计算( , )正在将人类带入一个崭新的信息社会。 二、实习目的 学习和了解了嵌入式在生活中的重要作用和发展过程,熟练掌握硬件体系结构,熟悉下的嵌入式编程流程,积累自己的软件编写经验,能够参与并实现一个真实和完整的嵌入式项目,为今后的学习和将从事的技术工作打下坚实的基础 三、实习任务 第一阶段操作和编程基础 主要介绍的基本命令和基础编程知识,包括 的文件操作和目录操作命令,编辑器,编译器,调试器和项目管理工具等知识。 第二阶段嵌入式C语言编程基础 主要介绍在嵌入式开发编程中C语言的重要概念和编程技巧中的重点难点,以复习串讲和实例分析的形式,重点介绍包括函数与程序结构,指针、数组和链表,库函数的使用等知识。

第三阶段上C强化编程训练 主要包括整数算法训练,递归和栈编程训练,位操作训练,指针训练,字符串训练和常用C库函数编程接口实践,强化学员对下基本编程开发的理解和编码调试的能力。 第四阶段环境高级编程及项目开发编程实践 主要包括系统编程(信号/系统调用/管道消息队列/共享内存等),文件编程(文件描述符/文件读写接口/原子操作/阻塞与非阻塞等,多任务和多线程编程(进程标识/ 用户标识与多线程概念/线程同步等),网络编程(网络基本概念/套接口编程/网络字节次序结构编程);掌握下编程的开发流程,熟悉网络编程的调用接口函数和相关数据结构,使学员初步具备在上进行系统编程开发的能力。同时综合之前所学内容和编程技术,以小组为单位进行一个团队合作项目的开发,考核内容包括文件编程,多线程编程,网络编程和项目文档编写。 第五阶段嵌入式处理器体系结构及编程实践 主要介绍体系结构及其基本编程知识,包括指令分类,寻址方式、指令集、存储系统、异常中断处理、汇编语言以及C\和汇编语言的混合编程等知识。同时结合嵌入式开发板硬件设计原理和基本硬件设计流程,分析各种外设的工作原理和驱动机制,并自己动手实践完成一个开发板上的编程大作业。

嵌入式系统学习心得

嵌入式系统学习心得 首先我声明,我是基于嵌入式系统平台级设计的,硬件这个方向我相对来讲比较有发言权,如果是其它方面所要具备的基本技能还要和我们培训中心其它专业级讲师沟通。他们的方面上我只能说是知道些,但不是太多,初级的问题也可以问我。 对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的modem射频模块,都采用成熟的套片,而当年国际上只有两家公司有此技术,自我感觉模拟功能不太强的人,不太适合搞这个,如果真能搞定到手机的射频模块,只要达到一般程度可能月薪都在15k以上。 另一类就是数字部分了,在大方向上又可分为51/arm的单片机类,dsp类,fpga类,国内fpga的工程师大多是在ic设计公司从事ip核的前端验证,这部分不搞到门级,前途不太明朗,即使做个ic前端验证工程师,也要搞上几年才能胜任。dsp硬件接口比较定型,如果不向驱动或是算法上靠拢,前途也不会太大。而arm 单片机类的内容就较多,业界产品占用量大,应用人群广,因此就业空间极大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互pk,判定水平高低的依据。而接口设计这块最关键的是看时序,而不是简单的连接,比如pxa255处理器

i2c要求速度在100kbps,如果把一个i2c外围器件,最高还达不到100kbps的与它相接,必然要导致设计的失败。这样的情况有很多,比如51单片机可以在总线接lcd,但为什么这种lcd就不能挂在arm的总线上,还有arm7总线上可以外接个winband的sd卡控制器,但为什么这种控制器接不到arm9或是xscale处理器上,这些都是问题。因此接口并不是一种简单的连接,要看时序,要看参数。一个优秀的硬件工程师应该能够在没有参考方案的前提下设计出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇到一个工程师把方案中的5v变1.8v的dc芯片,直接更换成ldo,有时就会把cpu烧上几个。前几天还有人希望我帮忙把他们以前基于pxa255平台的手持gps设备做下程序优化,我问了一下情况,地图是存在sd卡中的,而sd卡与pxa255的mmc控制器间采用的spi接口,因此导致地图读取速度十分的慢,这种情况是设计中严重的缺陷,而不是程序的问题,因此我提了几条建议,让他们更新试下再说。因此想成为一个优秀的工程师,需要对系统整体性的把握和对已有电路的理解,换句话说,给你一套电路图你终究能看明白多少,看不明白80%以上的话,说明你离优秀的工程师还差得远哪。其次是电路的调试能力和审图能力,但最最基本的能力还是原理图设计pcb绘制,逻辑设计这块。这是指的硬件设计工程师,从上面的硬件设计工程师中还可以分出ecad工程师,就是专业的画pcb板的工程师,和emc设计工程师,帮人家解决emc的问题。硬件工程师再往上就是板级测试工程师,就是c语功底很好的硬件工程师,在电路板调试过程中

嵌入式心得体会解读

嵌入式心得体会 嵌入式心得体会一:嵌入式学习心得体会 4月10号,为期一个阶段的Linux开发基础培训课程圆满结束,回首这些天所留下的点点滴滴,感触深深,学习上知识点的积累,灵活运用的过程中感受到了Linux操作的快速高效性能,这也是我所追求的效率! 当初初涉培训课程的第一门课程时,都说Linux操作很繁琐复杂,心里总有些顾忌,带着种种不安与些许拼博的决心,开始了自我提升阶段的“充电”,由徐海兵老师教授我们基础课程的培训,我们则像着小学生般认真的记着笔记,仔细听着并学会如何去在实践中运用所学的Linux下的各种强大的命令集。 在Unit 1中,徐老师详细生动的为我们讲述了有关Linux的诞生、初成长以及辉煌的发展至今,今后应用范围则愈来愈广泛,讲解了为Linux这个伟大的OS做出巨大贡献的一位位出色的、伟大的人物,他们那种学习钻研的精神、锲而不舍的信念、勇于把握住难得的机会,从小处着手,踏踏实实的创造出了对人类科技发展做出卓越贡献的Linux(Unix)系统,他们的种种,都值得我们去深刻反省、刻苦学习、传承并永远发展下去。 查看ip地址和重启网络服务是我学的第一个命令: ifconfig eth0、ifconfig eth0 IP 地址、service network restart。了解到远程登录软件可用xmanager。 secureCRT是我们常用的,安装好后利用其登录到了Red hat Linux,需要知道Linux 主机的ip 地址。徐老师为我们介绍了重要内容:SHELL,即运行程序的程序,如echo $$SHELL可查看SHELL的环境变量是csh还是bash。指令pwd可查看当前所在路径,passwd:更改Linux下的密码,仅限root用户有此权限,当然我们是利用虚拟机VMware 程序来运行Linux OS的,懂得了如何设置虚拟机的网卡设置、暂停、恢复、全屏等。 简单的学习后进入Unit 2,命令行的句法让我懂得了用法规则,一系列的命令功能强大:

实习报告_嵌入式

学 生 实 习 报 告 实 习 名 称 专业生产实习 院 部 名 称 信息技术学院 专 业 08电子信息工程(2)(本) 班 级 08电子信息工程(2) 学 生 姓 名 王震宇 学 号 0805111005 实 习 地 点 中软国际(无锡) 指 导 教 师 夏兵 实习起止时间:2011年 7月 4日至2011年 7月29日 金陵科技学院教务处制

实习项目名称: LCD驱动开发实习学时: 4周 同组学生姓名:崔敏杰王璇陈永康实习地点:中软国际(无锡)实习日期: 2011年07月04月-07月29日成绩: 批改教师:沈维燕批改时间: 实习报告 前言 中软国际有限公司(中软国际)是根植中国、服务全球的IT服务提供商,致力于为遍及全球的客户提供全面的服务,打造中国智造综合平台。中软国际总部位于北京,在美国、日本、香港以及中国大陆25个主要城市设有35家分子公司或办事处,员工突破10000人。年营业额逾10亿元人民币(2007财年)。2007年和2008年中软国际对欧美软件外包业务位列全国第一(IDC统计数据)。 集团业务涵盖以咨询为驱动的解决方案、以专业化为准则的ITO和BPO外包服务和以人才供链为导向的培训服务,包括咨询服务、软件开发、系统集成、软件测试、软件本地化、企业应用平台建设与维护、IT服务外包以及业务流程外包。 凭借集团的全球分布,中软国际能够充分运用全球资源和自身领先的技术实力帮助客户应对不断快速变化的商业挑战。凭借中软国际在中国市场所拥有的独特领导地位和全球提交能力,除能为客户提供“传统”外包服务及信息解决方案外,还能以其国内、海外市场的互动能力帮助客户在中国或海外开拓新的业务机会。 一、实习目的 1、掌握嵌入式微处理器的结构与原理 2、熟悉并掌握嵌入式Linux操作系统的操作 3、熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。 二、实习时间

嵌入式系统学习心得总结

嵌入式系统学习心得总结 嵌入式系统学习心得总结 嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。以下为你带来嵌入式系统学习心得总结,希望对你有所帮助! 嵌入式系统学习心得总结篇1 嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。 看到了嵌入式系统的范围,你也应该知道嵌入式系统工程师是做什么的,就是开发上面的那些电子产品的工程师。 关于如何学习嵌入式? 学习嵌入式,该学习什么基本的知识呢? 首先C语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对C语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用C语言,你说不掌握它可以吗?至于如何学习C语言,我想这些基础的知识每个人都有自己的方法,关键要去学习,看书也好,网上找些视频看也好。很多人会问,

C语言要学到怎么样,我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后,就该写代码了,动手才是最重要的,当你动手了,遇到问题了,再反过来学习,反过来查查课本,那时的收获就不是你死看书能得到的。 其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的,当然,不是看书就能把这些理解透,如果不是一时能理解,没关系,多看看,结合以后的项目经验,会有更好的理解的。 还有应该学习嵌入式系统,如linux或者wince下的编程,这些对以后做应用的编程很有帮助,当然,如果做手机的话,那可以学习MTK、塞班、Android等操作系统,Android是以后发展的趋势,现在很热门,Android也是基于linux系统封装的,所以建议先学习下linux。 还有,应该学习下单片机或者ARM或者MIPS,很多人说我没有单片机的经验,直接学ARM可以吗?我觉得那完全没有问题的,当然如果你学习过单片机,那最好不过了,以后学习ARM就更简单了。 最后如果你把以上的知识都有所了解后,就该去阅读阅读一些优秀的代码,比如结合arm芯片手册学习去学习下UBOOT的源代码,了解下最小的系统开发,那对你整个嵌入式开发的非常有帮助的,可以的话,还可以学习下linux的源代码,当然如果你直接阅读2.6的代码,我想你会很痛苦的,可以先看看linux 代码早期的版本,比如0.12 的代码等等,麻雀虽小,五脏俱全,如果你全看完了,那我想

嵌入式学习心得

嵌入式学习心得 如何学习嵌入式系统(基于ARM平台) 前言 网上看到众多网友都问了关于嵌入式系统方面的很多问题,很多都可在这里找到答案,希望我的这篇文章能给他们以启发。也请大家不要轻易转载。 一、嵌入式系统的概念 着重理解“嵌入”的概念 主要从三个方面上来理解。 1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC 机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。IXP系列最高主频可以达到1.8G,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由intel进行整合后成Xscale内核的最高的处理器了。 2、从软件上前,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操作系统内核时所选择的应用程序组件就是完成了软件的“嵌入”,比如WinCE在内核定制时,会有相应选择,其中就是wordpad,PDF,MediaPlay等等选择,如果我们选择了,在CE启动后,就可以在界面中找到这些东西,如果是以前PC上将的windows操作系统,多半的东西都需要我们得新再装。 3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的“嵌入”。 以上的定义是我在6、7年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有很多,但在这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科 二、嵌入式系统的分层与专业的分类。 嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。 1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。 硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。 2、驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows 下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不就是等上一会才能运

嵌入式软件开发流程图

嵌入式软件开发流程 一、嵌入式软件开发流程 1.1 嵌入式系统开发概述 由嵌入式系统本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别。嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发3大部分,其总体流程图如图1.1所示。 图1.1 嵌入式系统开发流程图 在系统总体开发中,由于嵌入式系统与硬件依赖非常紧密,往往某些需求只能通过特定的硬件才能实现,因此需要进行处理器选型,以更好地满足产品的需求。另外,对于有些硬件和软件都可以实现的功能,就需要在成本和性能上做出抉择。往往通过硬件实现会增加产品的成本,但能大大提高产品的性能和可靠性。 再次,开发环境的选择对于嵌入式系统的开发也有很大的影响。这里的开发环境包括嵌入式操作系统的选择以及开发工具的选择等。比如,对开发成本和进度限制较大的产品可以选择嵌入式Linux,对实时性要求非常高的产品可以选择Vxworks等。

1.2 嵌入式软件开发概述 嵌入式软件开发总体流程为图4.15中“软件设计实现”部分所示,它同通用计算机软件开发一样,分为需求分析、软件概要设计、软件详细设计、软件实现和软件测试。其中嵌入式软件需求分析与硬件的需求分析合二为一,故没有分开画出。 由于在嵌入式软件开发的工具非常多,为了更好地帮助读者选择开发工具,下面首先对嵌入式软件开发过程中所使用的工具做一简单归纳。 嵌入式软件的开发工具根据不同的开发过程而划分,比如在需求分析阶段,可以选择IBM的Rational Rose等软件,而在程序开发阶段可以采用CodeWarrior(下面要介绍的ADS 的一个工具)等,在调试阶段所用的Multi-ICE等。同时,不同的嵌入式操作系统往往会有配套的开发工具,比如Vxworks有集成开发环境Tornado,WindowsCE的集成开发环境WindowsCE Platform等。此外,不同的处理器可能还有对应的开发工具,比如ARM的常用集成开发工具ADS、IAR和RealView等。在这里,大多数软件都有比较高的使用费用,但也可以大大加快产品的开发进度,用户可以根据需求自行选择。图4.16是嵌入式开发的不同阶段的常用软件。 图1.2 嵌入式开发不同阶段的常用软件 嵌入式系统的软件开发与通常软件开发的区别主要在于软件实现部分,其中又可以分为编译和调试两部分,下面分别对这两部分进行讲解。 1.交叉编译 嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。在第3章中已经提到,编译的最主要的工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统。因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。要注意的是,编译器本身也是程序,也要在与之对应的某一个CPU平台上运行。嵌入式系统交叉编译环境如图4.17所示。

嵌入式开发学习心得

个人学习嵌入式心得体会 就我个人而言,从最开始对嵌入式一窍不通到现在越学越感兴趣,当然相应在嵌入式方面的提高也是很明显的。学习潜入式越来越成为我学习生活的一部分,现在把我的学习过程与大家一起分享,希望那些和我一样对嵌入式想学而又迷茫,不知从哪入手的同学朋友有所帮助。 一、语言基础 嵌入式开发很大一部分靠C语言,尤其在底层驱动等用的很多,当然在应用开发还用到诸如C++等其他语言,但我想对于一个初学者有C基础就足够了,等到学到一定程度再去扩展。所以,C 基础是学嵌入式的前提。 二、单片机等知识的储备 我觉得单片机、嵌入式等这一类都有很大的相似性,知识功能不一样,但工作的原理、控制原理都和大的相似。就我个人而言,能比较快的进入嵌入式的学习与提高,很大一部分依赖于对单片机的原理有较深入的学习和理解,单片机比较简单,学习起来相对比较容易,所以我建议哪些想学潜入式的同学,可以和我一样从单片机入手,那样不仅可以理解这些微处理器、微控制器的操作与控制原理,当然还可以顺便学学汇编语言,这对后面的嵌入式学习都有很大的帮助。 三、接受培训 暑假,我在学院的组织下参加过ICC的嵌入式培训,虽然接触的都是皮毛,但是对我进入嵌入式的学习起了一个很好的引导作用。所以,如果有条件的可以去报名正规的专门的培训班,这样如果遇到问题也可以比较容易的得到老师或专业人士的指导,提高学习效率。 四、买开发板自己动手做 个人觉得这是最重要的一种做法。这东西没自己亲手做,程序没亲手写,没有进行调试等,都是很难学到东西,因为很多东西感觉看的都懂,其实真正做起来就什么都不会了。因此买块板来自己做,这样才能真正将所学的应用到实际中去。而且这样做映像很深,死记硬背原理及规则不但不可行还会拖垮你的学习兴趣,自然学不下。 总之,我觉得,基础知识很重要,但是动手做更重要!我能说的就这些了,能力有限,不好的地方请指教!

嵌入式学习心得体会

嵌入式学习心得体会 BAKYANNMYRADOV 01 这学期才接触嵌入式系统感觉还称不上入门,我通过学习知道了嵌入式的发展前景很大,各个领域都用到了嵌入式,学好嵌入式不愁没饭吃。 广义上讲,凡是带有微处理器的专用软硬件系统都是嵌入式系统。如各类单片机和DSP系统。从狭义上讲,那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的专用软硬件系统称为嵌入式系统。嵌入式系统由嵌入式硬件与嵌入式软件组成; 嵌入式硬件以芯片、模板、组件、控制器形式埋藏于设备部。理解“嵌入”的概念主要从三个方面上来理解。 1、从硬件上,将基于CPU的处围器件,整合到CPU芯片部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。IXP系列最高主频可以达到1.8G,支持2G存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由intel进行整合后成Xscale核的最高的处理器了。

嵌入式linux学习心得(精选多篇)

嵌入式linux学习心得(精选多篇) 第一篇:嵌入式linux学习内容 知识结构 1嵌入式处理器与裸机程序开发2linux系统管理3linux 应用程序开发4linux驱动程序开发5linux内核开发与系统移植 一、处理器 1arm处理器工作模式2arm系统寄存器3arm寻址方式4arm汇编指令集5arm环境c语言编程6arm中断与异常7ads 集成开发环境 8裸机程序开发(串口、lcd、时钟、led、按键……) 二、系统管理 1linux定制安装2linux命令详解 3samba、nfs、tftp、wireshark使用4shell编程 三、应用程序开发 1gcc、gdb、makefile2文件、时间编程

3多进程、多线程程序设计4进程间通讯5网络编程 6qt图形化应用程序开发7android图形化应用程序开发 四、内核开发 1linux内核配置与裁剪2linux内核模块开发3根文件系统制作4进程子系统5内存子系统6proc文件系统7系统调用8内核定时器9内核异常分析 五、驱动程序开发 1字符设备驱动程序2总线、设备、驱动模型3硬件访问技术4中断处理5input设备驱动6platform驱动程序7pci、usb 驱动程序8网卡驱动程序9触摸屏驱动程序xx串口驱动程序 学习顺序 1嵌入式处理器与裸机程序开发2linux系统管理3linux 应用程序开发4linux内核开发基础5嵌入式linux环境搭建6linux驱动程序开发7深入学习linux内核 第二篇:嵌入式linux学习步骤 嵌入式linux学习步骤 作者:phantom时间:xxxx-8-6文章来源:来自网络

嵌入式实训心得体会_嵌入式实习心得与感悟.docx

篇一:嵌入式实训心得体会 8月我参加了学校安排的课题实训,基地在北京,学院安排我们集体坐火车一同前去,浩浩荡荡的队伍开始出发了。刚来北京的时候,映入眼绵的都是高楼大厦,一直想到的地方终于到了,好多以前的同学听说我要去北京实训都很羡慕不已,我自己也隐隐感到自豪。 我参加的课题实训是嵌入式方向的,开课的内容主要是嵌入式开发方面的,C语言,数据结构,LINUX基本操作,网络编程,操作系统和汇编语言,这些都是嵌入式不可缺少的。每个专业技能都决定了你以后找工过。我们班分了很多小组,每组都有小组长,小组长直接对我们负责。教课老师很认真,都是从很基础的开始讲;同学们听课也很认真,由于代码操作比较多,键盘的声音源源不断的在响。好久没有感觉到这种浓重的学习气氛了,而在这紧张而充实的学习氛围中我获益匪浅,感受颇多。 授课过程中老师们也传授了一些找工作方面的经验,比如简介的样式和写法,面试中的一些着装,礼貌用语和技巧,对此基地的老师还精心的为我们安排了一场模拟面试,在其中我们学到了很多有关于面试方面的经验。 通过这几个月的实训我学到了很多,同时也让我们意识到我们要学的更多。从程序的设计到编写、画图、调试、修改、完善、到最后的实训报告,每个人都付出了时间和精力去做好自己的任务帮助队友,所以团队的合作和队友之间的相互协助非常重要。通过实训让我们更深一步的对自己的专业,对自己的能力,对自己所学的有正确的认识,并且能在以后的学习工作中不断提高和完善自己。特别是讲C语言和进程通信中老师给了我们每个小组的几个小项目,让我学到了更多项目经验,这在学校之前是没有的。这次实训也碰到了些问题,比如项目文档的写法,代码的规范,流程图的画法,这些都有讲究,在老师和同学的帮助下,我不断的提高了在这些方面的学习。 生活上班主任郭老师和王老师对我们关怀备至,让我们没有感觉在外面的那种不适感,同学们也互帮互助,所以生活上大致没什么问题,这让我们更好的去学专业。很感谢学校有这样的实训安排。 总的来说,这次实训还是比较成功的,无论是个人动手能力还是团

嵌入式实训心得体会

嵌入式实训心得体会 篇一:嵌入式心得体会 这学期才接触嵌入式系统感觉还称不上入门,我通过学习知道了嵌入式的发展前景很大,各个领域都用到了嵌入式,学好嵌入式不愁没饭吃。 广义上讲,凡是带有微处理器的专用软硬件系统都是嵌入式系统。如各类单片机和DSP系统。从狭义上讲,那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的专用软硬件系统称为嵌入式系统。嵌入式系统由嵌入式硬件与嵌入式软件组成; 嵌入式硬件以芯片、模板、组件、控制器形式埋藏于设备内部。 理解“嵌入”的概念主要从三个方面上来理解。 1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集

成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。IXP系列最高主频可以达到,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由intel进行整合后成Xscale内核的最高的处理器了。 2、从软件上前,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操作系统内核时所选择的应用程序组件就是完成了软件的“嵌入”,比如WinCE在内核定制时,会有相应选择,其中就是wordpad,PDF,MediaPlay等等选择,如果我们选择了,在CE 启动后,就可以在界面中找到这些东西,如果是以前PC上将的windows操作系统,多半的东西都需要我们得新再装。 3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的“嵌入”。。 嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层 1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层

嵌入式培训心得体会

嵌入式培训心得体会 当我们通过实验去学习嵌入式培训理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆,分享心得体会。下面是为大家收集整理的嵌入式培训心得体会,欢迎大家阅读。 嵌入式培训心得体会篇1 本人大学学的是电子信息科学与技术专业,其实这个专业和嵌入式没有多大的关系,要说有关系就是简单的讲了下C语言语法,学完之后还不知道什么是C语言,只记住了,char,int,string等占几个字节,if, for, while循环什么的,感觉也就能算一些小学就会的题目,全国计算机等级二级也就糊涂的过了。我这个专业没学过C++,一开始不知道什么是向对象,什么叫面向过程,这可能让大家笑话了。不过这说的是实话,大学的时候比较喜欢动手,喜欢硬件方面的东西,也喜欢看书。 在大一的时候就听学长说,单片机很难学,在没事的时候就从图书管借了本关于51的书,一开始还真是不怎么懂,然后硬着头皮去看,当我把51的结构看完了,就不像一开始那样一头雾水了,自己在纸上把51的结构图默画一遍,然后再把各个寄存器功能写一下,各个功能口的结构也画一遍,然后就不觉得51有什么难了。其实有些时候不是这个东西你不会,而是在不会的时候自己先告诉自己这个太难了,自己先放弃了。我们学习51芯片,是为了以后的打基础,知道是怎么通过配置寄存器来实现功能。

大二下学期的时候,我们开了51的课,这个课几乎就没怎么去,因为我认为没有必要去听自己会的东西了。后来听别人说avr的资源会比51的丰富的很多,所以就想试试,看看有什么难的,就从网上买了本马潮老师《AVR单片机嵌入式系统原理与应用实践》,一边看书,一边想自己画一个板了,一开始想实现一个点阵屏,实现滚动效果,后来想想做个板也花不少钱呢,为什么不多加一些功能呢,还能多学到些知识,所以就加了温感,红外,铁电存储器等并把所有的扩展口都扩展了出来,备以后用,那时还挺自豪的呢,同学们都很羡慕,不过现在想想其实也没什么了。 大学也听说过嵌入式这个词,不过不太明白是什么意思,20xx 年的时候从网上找到中嵌视频,有四张DVD(大约13G),下载下来后,从头到尾的看了一遍,没什么印象,只记得讲一些不知所云的函数,然后莫名其妙的讲怎么使用那个44b0的开发板,不过听完了,还是有很大收获的,就有一种想装一个linux的冲动,我是大二下学期才有的自己电脑,不过电脑的配置比较低,1g内存,跑虚拟机就像个蜗牛,所以就想着怎么才能装个linux,自己用XP习惯了,如果全换了又舍不得,那时从书上知道linux的文件系统和windows不一样,只有一个根分区,所以也害怕一装linux全盘就被格式化了,不过最后还是欲望战胜了担心,买了张redhat 9的光盘,小心的装这个系统,里边的英文也不是太难,还是知道大概意思的,所以一步步的装,最后装到我的硬盘的最后空间,重新启动,竟可以选择进入哪一个系统了,从这之后,自己就不害怕怎么装系统了,应了那句言,纸上得来

相关主题
文本预览
相关文档 最新文档