随着通信、电子行业的迅速发展,全世界每天都会有大量的新芯片被生产,大量的新电路板被设计,因此,也会有大量设备驱动需要开发。在嵌入式开发中,这些设备驱动,或运行在简单的单任务环境中,或运行在 VxWorks、Linux、Windows等多任务操作系统环境中,发挥着不可替代的作用。
有无操作系统的区别
1)无操作系统(即裸机)时的设备驱动
并不是任何一个计算机系统都一定要运行操作系统,在许多情况下操作系统是不要的。对于功能比较单一、控制并不复杂的系统,如公交车刷卡机、电冰箱、微波、简单的手机和小灵通等,并不需要多任务调度、文件系统、内存管理等复杂功能,单任务架构完全可以很好地支持它们的工作。一个无限循环中夹杂对设备中断的检测或者对设备的轮询是这种系统中软件的典型架构。裸机的实现就有点类似单片机(MCU)了,尽管单片机的寄存器没有那么的多,如果会裸机驱动,我想,应该能胜任单片机的工作了,呵呵。
在这样的系统中,虽然不存在操作系统,但是设备驱动是必须存在的。一般情况下,对每一种设备驱动都会定义为一个软件模块,包含.h文件和.c文件,前者定义该设备驱动的数据结构并声明外部函数,后者进行设备驱动的具体实现。书中例举了一个串口驱动serial.c serial.h,主要是配置GPIO,串口控制寄存器,以及串口的收发(读写)寄存器,而这几个配置都是自定义函数实现的,比如串口的写(发)SerialSend 函数等。
其他模块需要使用这个设备的时候,只需要包含设备驱动的头文件 serial.h,然后调用其中的外部接口函数即可。如我们要从串口上发送字符串“Hello World”,使用函数SerialSend( " Hello World ",11)即可。
由此可见,在没有操作系统的情况下,设备驱动的接口被直接提交给了应用软件工程师, 应用软件没有跨越任何层次就直接访问了设备驱动的接口。 设备驱动包含的接口函数也与硬件的功能直接吻合, 没有任何附加功能。
有的工程师把单任务系统设计成设备驱动和具体的应用软件模块处于同一层次(即应用程序也在比如serial.c中实现),这显然是不合理的,不符合软件设计中高内聚低耦合的要求。
另一种不合理的设计是直接在应用中操作硬件的寄存器(单独一个main.c,所有功能都在一个函数中实现,不采用其他任何接口/函数),而不单独设计驱动模块,这种设计意味着系统中不存在或未能充分利用可被重用的驱动代码。
2)有操作系统时的设备驱动
无操作系统时的设备驱动中的设备驱动直接运行在硬件之上,不与任何操作系统关联。当系统中包含操作系统后,设备驱动会变得怎样?
首先,无操作系统时设备驱动的硬件操作工作仍然是必不可少的, 没有这一部分,设备驱动不可能与硬件打交道。
其次,我们还需要将设备驱动融入内核。为了实现这种融合,必须在所有的设备驱动中设计面向操作系统内核的接口,这样的接口由操作系统规定,对一类设备而言结构一致,独立于具体的设备。
由此可见,当系统中存在操作系统的时候,设备驱动变成了连接硬件和内核的桥梁。操作系统的存在势必要求设备驱动附加更多的代码和功能(以我看,主要是提供了很多结构),把单一的“驱使硬件设备行动”变成了操作系统内与硬件交互的模块,它对外呈现为操作系统的API,不再给应用软件工程师直接提供接口。有了操作系统之后,设备驱动反而变得复杂,那要操作系统干什么?
首先,一个复杂的软件系统需要处理多个并发的任务,没有操作系统,想完成多任务并发是很困难的。
其次,操作系统给我们提供内存管理机制。一个典型的例子是,对于多数含 MMU的处理器而言,Windows、Linux 等操作系统可以让每个进程都独立地访问 4GB的内存空间。
上述优点似乎并没有体现在设备驱动身上,操作系统的存在给设备驱动究竟带来了什么好处呢?
简而言之,操作系统通过给设备驱动制造麻烦来达到给上层应用提供便利的目的。如果设备驱动都按照操作系统给出的独立于设备的接口而设计,应用程序将可使用统一的系统调用接口来访问各种设备。对于类UNIX的VxWorks、Linux等操作系统而言,应用程序通过write()、read()等函数读写文件就可以访问各种字符设备和块设备,而不用管设备的具体类型和工作方式,是非常方便的。
常见的嵌入式系统有这么多
Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX 、Rtems 、QNX、INTEGRITY、OSE、C Executive、autosar......
什么是嵌入式操作系统?
嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统的重要组成部分。嵌入时操作系统具有通用操作系统的基本特点,能够有效管理复杂的系统资源,并且把硬件虚拟化。
从应用角度可分为通用型嵌入式操作系统和专用型嵌入式操作系统。常见的通用型嵌入式操作系统有Linux、VxWorks、Windows CE.net等。常用的专用型嵌入式操作系统有Smart Phone、Pocket PC、Symbian等。?
按实时性可分为两类:
实时嵌入式操作系统主要面向控制、通信等领域。如WindRiver公司的VxWorks、ISI的pSOS、QNX系统软件公司的QNX、ATI的Nucleus,很多汽车电子行业都是利用实时性很强的操作系统等。
非实时嵌入式操作系统主要面向消费类电子产品。这类产品包括PDA、移动电话、机顶盒、电子书、WebPhone等。如微软面向手机应用的Smart Phone操作系统。
嵌入式系统的设计和实现而言,基本上需要四种不同的工作:系统设计工作,硬件设计工作,驱动程序和操作系统移植工作和应用程序设计开发工作。?
1、系统设计工作?
在系统的设计阶段,系统分析师将根据需求确定系统的硬件的基本构成,根据系统的需求选择使用那种处理器,使用哪种操作系统,使用那些软件开发工具。系统分析师往往是较为完整的参与过嵌入式系统设计的全过程,对于系统应用的行业较为了解,对于嵌入式系统本身的开发流程十分清楚的人。
2、硬件设计工作
系统硬件设计人员需要根据系统分析师的设计结果,进行硬件原理图的设计。通常需要硬件设计人员熟悉嵌入式系统的硬件构成。硬件设计人员需要了解常用的嵌入式系统处理器,存储器(Flash,SDRAM),以太网MAC芯片,音频/视频编解码芯片,电源管理芯片,总线接口电路 (USB,PCI),液晶显示模块,可编程逻辑器件(FPGA/CPLD),无线网络通信模块(Bluetooth,WLAN,GPRS)等硬件电路构成元素的基本工作原理,连接使用方法,使用注意事项,基本调试方法等内容。在网络上能找到很多公司的评估板的原理图,对于这些原理图要仔细研究,摸清处理器同存储器,网卡,液晶模块等器件的连接方法和原因。通过对这些电路的研究,能够较快地了解整个嵌入式系统的构成,这些电路同实际产品中的电路虽有一定差别的,特别是对于手持设备,但这些差别不影响初学者学习嵌入式系统的硬件设计基本构成。
1)学习 Linux系统安装、 常用命令、应用程序安装。
2) 学习 Linux 下的 C 编程、这本书必学《UNIX 环境高级编程》、《UNIX 网络编程》,Rechard Stevens 写的,C 高手大都学习过 《C 和指针》、《C 缺陷与陷阱》、《高质量C/C++编程指南》、《C 专家编程》、《The C programming Language》
3)程序员大都要学:数据结构,嵌入式程序员数据结构必学!
4)底层开发人员大都要学:微机原理、计算机体系结构,嵌入式开发人员必学!
5)单片机可以让一个从事软件开发的人了解和如何操作硬件,有必要学,因为一开始就从 ARM 入手,不太现实!
6)ARM 体系结构,其中有汇编。
7)数字电路有必要学习,不然你在做底层开发时真的会不知道怎么看原理图,起码也得懂与或门吧。
8)ARM + Linux 应用程序开发。(前提是要有开发板)
9)要做底层开发,就必须知道软硬件之间是如何衔接和配合工作的,那么电子技术应该要好好学习了,很多时候会用到模拟电路知识,这是区别好手与菜鸟的不同之处之一。
10)Linux 下的汇编要学,这样你才能真正了解你写的程序是如何在一个特定的硬件上跑的。这是区别好手与菜鸟的不同之处之二。
11)TCP/IP 协议栈要学,所有的嵌入式高手都得掌握的东西,这是区别好手与菜鸟的不同之处之三。
12)有了这些东西,拿下 Linux 驱动 已经不再话下,需要你去学习 Linux 内核源代码和Linux驱动程序设计,这是一个技术升华。
13)音频、视频的解码译码技术你得学。
14)各种 IC ,各种 bootloader 你能够参与其开发设计。
15)自行设计开发新产品,新技术。
学到这个地步差不多要花个3年的时间吧。但是后面的路该怎么走呢?嵌入式系统性的东西搞了一个产品之后,基本上一些套路都摸清楚了。?
不同的行业,对于系统的要求是不一样的,比如汽车行业,航空航天行业等一些高精度,高安全的需要对实时性要求非常之高,对于安全性和可靠性的要求非常严格。而有些行业比如消费类产品,娱乐类的,生活用具方面的对于用户体验是不一样的,数码产品对于一些图像声音的处理,要求更高,需要高清,高品质的。而对于一些通信设备类对于网络的应答数据传输要求就非常严格,等等。这些根据不同的要求,选择符合自己的操作系统,能对开发工作有更大的帮助。【华宇诚数控】主要产品有圆管相贯线切割机、数控钢管切割机、数控相贯线切割机、钢管相贯线切割机、数控管道相贯线切割机、管桁架相贯线切割机、便携式相贯线切割机、数控火焰等离子相贯线切割机;找数控相贯线切割机厂家、数控管子相贯线切割机多少钱、数控相贯线切割机:http://www.hycsk.com/shukongxiangguanxianqiegeji.html