1.嵌入式系统介绍
嵌入式系统是一种特殊的计算机系统,被嵌入到其他设备或系统中,以执行专门的任务。这些系统通常备有较小、低功耗、高性能和实时响应等特点。
嵌入式系统广泛应用于各个领域,包括消费电子、医疗设备、工业自动化、交通运输、军事和航空航天等等。举例来说,智能手机、数字相机、车载导航和嵌入在汽车控制单元中的电子系统都是嵌入式系统的应用。
嵌入式系统通常由硬件和软件两部分组成。硬件部分包括处理器、内存、IO接口和外围设备等。而软件部分则包括操作系统、应用程序和设备驱动程序等。
嵌入式系统的开发需要综合考虑硬件和软件的设计,以及系统性能和可靠性等方面。因此,嵌入式系统的开发一般需要多学科知识的综合运用。
嵌入式系统通过外设与外部通信:
串口:RS-232、RS-422、RS-485等 同步串口:I2C、SPI、ESSI等 USB:usb模块 多媒体卡:SD卡、CF卡等 网络:以太网、LonWorks等 现场总线:CAN总线、LIN总线、PROFIBUS等 定时器:PLL、捕获比较模块和时间处理单元 分立IO:GPIO ADC/DAC:AD 调试接口:JTAG、ISP、ICSP、BDM端口、BITP、DP9端口等
2.嵌入式软件架构
常用的嵌入式软件架构有几种不同的基本类型。
1.控制循环
在这种设计中,软件有一个简单的循环,这个循环调用各个子程序,每个子程序管理硬件或者软件的某一部分。中断通常用来设置标记或者更新软件其他部分能够读取的寄存器。
系统使用简单的API来完成允许和禁止中断设置。如果处理得当的话,它能够在嵌套子程序中处理嵌套调用,在最外面的中断允许嵌套中恢复前面的中断状态。这种方法是实现Exokernel的一个最简单的方法。
通常在循环中有一些子程序使用周期性的实时中断控制一组软件定时器,当一个定时器时间到的时候就会运行相应的子程序或者设置相应的标志。
2.非抢先式任务
非抢先式任务系统非常类似于上面的系统,只是这个循环是隐藏在API中的。我们定义一系列的任务,每个任务获得自己的子程序栈;然后,当一个任务空闲的时候,它调用一个空闲子程序(通常调用“暂停”、“等候”、“交出(yield)”等等)。
带有类似属性的架构都带有一个事件队列,有一个循环根据队列列表中的一个域确定删除时间和调用子程序。
这种架构的优点和缺点都非常类似于控制环,只是这种方法添加新的软件更加简单,只需要简单地编写新的任务或者将它添加到队列解释器中。
3.抢先式定时器
使用上面的任何一种系统,但是添加一个按照定时器中断运行子程序的定时器系统,这样就给系统添加了崭新的能力,这样定时器子程序第一次能在一个有保证的时间内运行。
另外,代码第一次能够在非预期的时间访问自己的数据结构。定时器子程序必须要象中断子程序一样进行处理。
4.抢先式任务
使用上面的非抢先式任务系统,从一个抢先式定时器或者其他中断运行。
这样系统就突然变得很不一样了。任何一个任务的代码都有可能损害其他任务的数据,所以它们必须进行切缺的切分。对于共享数据的访问必须使用一些同步策略进行控制,如消息队列、信号灯或者非阻塞同步机制。
5.微内核与外内核
这种方法试图将系统组织得比宏内核更易于配置,而同时提供类似的特点。
微内核是实时操作系统的一个逻辑发展,通常的组织方式是操作系统内核分配内存并且将CPU在不同的线程之间进行切换。用户模式的进程实现如文件系统、用户接口等主要的功能。
微内核在二十世纪五十年代开始首次尝试,但是由于计算机在任务间切换以及在任务间交换数据速度非常缓慢,所以人们放弃了微内核而钟情于MULTICS和UNIX风格的大内核。总体上来说,微内核在任务切换以及任务间通信速度快的时候是比较成功的,在速度慢的时候是失败的。
外内核通过使用普通的子程序调用获得的通信效率很高,硬件以及系统中的软件都是程序员能用也能扩展的。资源内核(可能是库的一部分)分配CPU时间、内存以及其他资源。如多任务、网络以及文件系统这样的大内核特性通过代码库来提供。库可以进行动态的连接、扩展或者共享。不同的应用甚至可以使用的不同的库,但是所有的资源都来自于资源内核。
6.虚拟机
一些航空电子系统使用几个商用计算机。这样更进一步,每个计算机都在模拟它们自身的几个副本,重要的程序同时在几个计算机上运行并且进行投票控制。
模拟环境的优点就是即使一个计算机出现故障,软件的不同例程能够迁移到正常工作的软件分区,表决的票数并不受影响。
通常虚拟软件运行在计算机的用户模式下,它捕捉、模拟硬件访问和不在用户模式下运行的指令。
3.嵌入式学习路线
1.计算机基础知识:首先需要掌握计算机基础知识,包括数据结构、计算机组成原理、操作系统和编程语言等。 2.硬件设计:了解嵌入式系统的硬件设计原理,学习电子电路设计、数字信号处理和模拟信号处理等知识。 3.嵌入式系统架构设计:熟悉各种微处理器、嵌入式系统体系结构以及各种外部设备接口标准,如串口、网络、USB、SPI和I2C等。 4.嵌入式软件开发:学习嵌入式系统软件开发,掌握C/C 语言和汇编语言,了解RTOS实时操作系统的原理以及驱动程序的编写方法。 5.集成开发环境:了解常见的嵌入式集成开发环境,例如Keil、IAR、Code Composer Studio等。 6.实践项目经验:通过完成嵌入式系统项目,例如开发智能家居、智能穿戴设备或者自动化控制系统等项目,来积累实践经验和技能。