嵌入式软件开发的几点个人理解一、软件的概念软件,是一系列按照特定顺序组织的计算机数据和指令的集合。
我们日常生活中接触最多的软件大概要算应用软件了。
在21世纪的今天,电脑、手机等智能设备进入千家万户,基本上每个现代化的家庭中或多或少拥有一台电脑或一部手机,我们每天都用着电脑或者手机中的应用软件享受着科技带给这个世界的便利。
然而软件的概念却并不只是在这些应用软件中,一般来讲,软件被划分为编程语言、系统软件、应用软件,其中系统软件包括操作系统和支撑软件。
另外,软件并仅包括可以在广义计算机上运行的电脑程序,还包括与这些电脑程序相关的文档。
学术界将软件定义为程序加文档的集合体,确实非常贴切。
对于软件和硬件,这两者之间从来是相互依存,相得益彰的。
硬件是实在的,有模有样的。
软件是程序性的,是一系列的指令。
个人认为,我们其实可以将人的身体与灵魂分别比作硬件和软件,软件的存在必须依附于硬件才能体现软件的价值;而硬件因为有了软件的存在,才具备了更加丰富的功能。
二、软件开发中的编程语言软件的编程语言有多种、常见的编程语言有Pascal、Python、Ruby、Java、C、C++、C#、Basic、PHP等。
这些编程语言各有特点,其中进行嵌入式系统开发常用的语言有C、C++、Java 等语言。
2.1、C语言C语言是介于汇编语言和高级语言之间的语言,属于高级语言,也称为中级语言,是集汇编和高级语言优点于一身的程序设计语言。
于1972年在美国贝尔实验室里问世,早期的C语言主要用于UNIX系统。
由于C语言的强大功能和各方面的优点逐渐为人们认识,到了九十年代,C语言开始进入其他操作系统,并很快在各类大、中、小和微型计算机上得到广泛的应用,成为当代最优秀的程序设计语言之一。
C语言的特点:1)是一种结构化语言,层次清晰,便于按模块化方式组织程序,易于调试和维护。
2)C语言的表现能力和处理能力极强,不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构,它还可以直接访问内存的物理地址,进行位级别的操作。
3)由于C语言实现对硬件的编程操作,所以既可用于系统软件的开发,也适合于应用软件的开发。
C语言还具有效率高,可移植性强等特点。
因此广泛地移植到了各类计算机上,从而形成了多种版本的C语言。
4)由于C语言允许直接对位、字节和地址进行操作,能实现汇编语言的大部分功能。
5)目标代码质量高,程序执行效率高。
总体上来说,C语言的优点是简洁、紧凑、使用方便、灵活、易于学习和应用。
仅有32个关键字,9种控制语句,程序的书写形式也很自由。
2.2、C++语言C++是于1986年由AT&T贝尔实验室开发的,语言开发的目的在于通过数据封装减少程序变量的副作用,从而降低程序的复杂性并提高程序的可靠性。
C++是C语言的直接扩展,C++的多继承机制能更好地描述对象的属性和行为。
C++的特点:C++的特点:面向对象、继承、封装、多态性。
由于C++是C的扩展,所以C++也同时具备C的特点。
2.3、Java语言Java编程语言的风格十分接近C、C++语言。
Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。
Java语言具有简单、面向对象、结构中立、安全、可移植的、高性能、多线程等特点。
Java在诞生之后不久,便受到广大群众的欢迎,甚至有人说出有了Java,可以不要C/C++了,一度把Java提到了很高的地位。
三、常见嵌入式软件开发工具嵌入式软件开发的工具非常多,为了更好地帮助读者选择开发工具,下面首先对嵌入式软件开发过程中所使用的工具做一简单归纳。
嵌入式软件的开发工具根据不同的开发过程而划分,比如在需求分析阶段,可以选择IBM 的Rational Rose等软件,而在程序开发阶段可以采用CodeWarrior等,在调试阶段所用的Multi-ICE等。
同时,不同的嵌入式操作系统往往会有配套的开发工具,比如Vxworks有集成开发环境Tornado,WindowsCE的集成开发环境WindowsCE Platform等。
此外,不同的处理器可能还有对应的开发工具,比如ARM的常用集成开发工具ADS、IAR和RealView等。
四、嵌入式软件开发流程4.1嵌入式系统开发概述由嵌入式系统本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别。
嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发3大部分。
在系统总体开发中,由于嵌入式系统与硬件依赖非常紧密,往往某些需求只能通过特定的硬件才能实现,因此需要进行处理器选型,以更好地满足产品的需求。
另外,对于有些硬件和软件都可以实现的功能,就需要在成本和性能上做出抉择。
往往通过硬件实现会增加产品的成品,但能大大提高产品的性能和可靠性。
再次,开发环境的选择对于嵌入式系统的开发也有很大的影响。
这里的开发环境包括嵌入式操作系统的选择以及开发工具的选择等。
在进行嵌入式系统开发时要对项目进行分析,根据需求选择合适的嵌入式操作系统。
比如,对开发成本和进度限制较大的产品可以选择嵌入式Linux,对实时性要求非常高的产品可以选择Vxworks等。
4.2嵌入式软件开发概述嵌入式软件开发总体流程分为需求分析、软件概要设计、软件详细设计、软件实现和软件测试。
嵌入式系统的软件开发与通常软件开发的区别主要在于软件实现部分,其中又可以分为编译和调试两部分,下面分别对这两部分进行讲解。
4.2.1交叉编译嵌入式软件开发所采用的编译为交叉编译。
所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。
编译的最主要的工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统。
因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。
要注意的是,编译器本身也是程序,也要在与之对应的某一个CPU平台上运行。
与交叉编译相对应,平时常用的编译称为本地编译。
这里一般将进行交叉编译的主机称为宿主机,也就是普通的通用PC,而将程序实际的运行环境称为目标机,也就是嵌入式系统环境。
由于一般通用计算机拥有非常丰富的系统资源、使用方便的集成开发环境和调试工具等,而嵌入式系统的系统资源非常紧缺,无法在其上运行相关的编译工具,因此,嵌入式系统的开发需要借助宿主机(通用计算机)来编译出目标机的可执行代码。
由于编译的过程包括编译、链接等几个阶段,因此,嵌入式的交叉编译也包括交叉编译、交叉链接等过程,通常ARM的交叉编译器为arm-elf-gcc、arm-linux-gcc等,交叉链接器为arm-elf-ld、arm-linux-ld等。
4.2.2.交叉调试嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有很大的差别。
在常见软件开发中,调试器与被调试的程序往往运行在同一台计算机上,调试器是一个单独运行着的进程,它通过操作系统提供的调试接口来控制被调试的进程。
而在嵌入式软件开发中,调试时采用的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。
嵌入式系统的交叉调试有多种方法,主要可分为软件方式和硬件方式两种。
它们一般都具有如下一些典型特点。
●调试器和被调试进程运行在不同的机器上,调试器运行在PC机(宿主机),而被调试的进程则运行在各种专业调试板上(目标板)。
●调试器通过某种通信方式(串口、并口、网络、JTAG等)控制被调试进程。
●在目标机上一般会具备某种形式的调试代理,它负责与调试器共同配合完成对目标机上运行着的进程的调试。
这种调试代理可能是某些支持调试功能的硬件设备,也可能是某些专门的调试软件(如gdbserver)。
●目标机可能是某种形式的系统仿真器,通过在宿主机上运行目标机的仿真软件,整个调试过程可以在一台计算机上运行。
此时物理上虽然只有一台计算机,但逻辑上仍然存在着宿主机和目标机的区别。
五、嵌入式软件开发的发展趋势软件产业高速发展以来,整个世界较以往发生了翻天覆地的变化。
时至目前,软件行业的发展势头依然强劲并将在很长时间里保持这种强劲的势头。
可以预见软件行业必将成为21世纪拥有最大规模和最广阔前景的产业之一。
软件行业的发展,最重要的是人才和创新的发展,所以可以预见,软件行业的发展必将呈现以下特点:1)高成长。
软件行业的增长速度必将远大于世界的平均增长速度。
2)高投入。
随着软件行业的蓬勃发展,软件开发所带来的高利润必将带来各研发机构对软件开发的高投入。
3)服务性提升。
软件开发完成后,同时需要不断对软件进行维护,以及进行必要的售后工作,售后工作量大,同时开发过程需要与用户进行反复沟通,所以软件行业发展的同时,也对软件售后服务提出了要求。
4)高附加值。
软件的相对附加值高,大约是CPU的两倍,存储芯片的三倍,硬盘的五倍。
5)全球性强。
互联网的出现拉近了人们之间的距离,同时也出现了电子商务的发展,使得贸易全球化,同时也给软件行业的发展提供了机遇,也使得软件产品可以轻易的销售到全球。