文档详情

嵌入式系统软件开发概述.ppt

发布:2017-06-19约2.5万字共111页下载文档
文本预览下载声明
第4章 嵌入式系统软件开发概述 内容 嵌入式软件开发环境 嵌入式软件开发流程 嵌入式系统调试 典型的开发工具链 Intel开发工具链 开发例子 4.1 嵌入式软件开发环境 交叉开发 编程语言 4.1.1 交叉开发 通用计算机的软件开发一般都是以本地(Native)编译方式进行的,嵌入式系统一般不支持本地环境开发,其软件开发通常采用交叉开发(Cross Compile)的方式。 交叉开发环境建立在宿主机(Host)上,宿主机又称开发机、上位机,一般是一台通用计算机,如PC。对应嵌入式系统称为目标机。目标机指各式各样的嵌入式设备,例如手机、掌上电脑等;或者是嵌入式厂商提供的一套专用于开发的评估板(evaluation board),所以又称开发板;甚至是基于软件的模拟器。 开发时使用宿主机上的交叉编译、汇编和链接工具形成可在目标机上执行的二进制代码,然后把可执行文件下载到目标机上运行。此外嵌入式系统的调试也常采用交叉的方式。 4.1.1 交叉开发 为什么要交叉编译? 目标机上往往无法进行有效的本地编译 目标机硬件本身在开发过程中,还不能使用或还不够稳定 目标机平台上缺乏完整的native编译工具、环境 目标机系统本身性能不够,导致编译太慢 嵌入式系统的软件编译,与windows开发不一样,不仅要编译应用程序,还要编译相应的依赖库、操作系统内核等。所以一次完整的编译非常费时 比如编译一个Linux内核在奔4级别的PC上都需要十几分钟 而从硬件角度,决定编译速度的主要因素是CPU速度、内存容量和文件系统IO速度。 这些在嵌入式系统上往往都要比PC差很多 所以在目标机系统上进行本地编译效率太低 4.1.1 交叉开发 宿主机与目标机的区别 体系结构的不同。宿主机和目标机通常是异构的。宿主机一般采用x86体系结构,但是目标机的体系结构则可能非x86的,如是ARM、MIPS、PowerPC等各式各样。 对于某些系统这一点不一定成立。如Atom系统,宿主机和目标机一般都是x86系统,当然执行的指令集可能不一样,如宿主机(如Core 2 Duo)可能支持SSE4,而Atom支持到SSE3和SSSE3,因此编译时还是要考虑到目标机型号和指令集的选择。 处理能力不同。通常宿主机的处理速度。存储容量等会远远大于目标机。 运行的操作系统不同。宿主机一般运行通用操作系统,而目标机通常运行各种嵌入式操作系统。 输入输出方式不同。相对宿主机,目标机的输入输出功能可能比较单一。 交叉开发的主要工作有交叉编译(包括交叉链接)和交叉调试。 4.1.2 编程语言 嵌入式系统比较常用编程语言有C/C++、ADA、Python和Modula-2等。 4.2 嵌入式软件开发流程 一般地来说,嵌入式软件开发依次要经历编辑(代码准备)、编译、重定位(定址和打包)、烧写、下载、调试、优化等步骤,在某些嵌入式系统中可能还需要测试和验证等步骤。 从流程上说,大致可分为编码阶段、构建阶段、部署阶段、调优和其他阶段。 4.2 嵌入式软件开发流程 1. 编码阶段 编码阶段是软件开发的开始,其任务是编写软件的源代码代码,使用的工具是各种编辑器。 2. 构建阶段 构建阶段的任务是把代码转化成可以在嵌入式硬件上可执行程序的过程。此阶段,包括截然不同的步骤,包括编译,链接、定址和打包。 构建的第一步是编译,即源代码文件翻译目标文件。编译工作是由编译器完成的,编译器的任务是将由某种程序设计语言编写的源代码翻译成特定处理器上等效的一系列操作码,这些操作码对应的文件称为目标文件。 构建的第二步,就是将所有目标文件链接成一个目标文件,它称为可重定位程序(Re-locatable Program)。链接工作由链接器完成的,链接器的主要工作是扫描所有输入的目标文件,然后将多个目标文件的段合并,并解决它们之间的依赖关系(这一过程称为符号解析),最终生成一个可执行文件。 在许多开发工具中,将编译器和链接器的功能做在一起,可以直接将源代码文件转换成可执行文件,这一过程常称为生成(Build)。 构建阶段 可执行文件的可重定位和不可重定位 一般来说嵌入式系统的可执行文件有可重定位(re-locatable)和不可重定位(non-relocatable)两种版本。 可执行文件最后需要操作系统或加载程序将其加载到内存中才能执行。对于不可重定位版本的可执行文件,加载器只能把它加载到固定的地址运行;而对可重定位版本的可执行文件,可以加载到任何地址执行。 源代码程序生成可执行文件时既可生成为可重定位版本的,也可生成不可重定位版本的,这在编译-链接时必须选择不同参数,不仅如此,相同源代码程序生成的两种版本的可执行文件的代码也不一样。 对于简单的嵌入式系统软件,一般并不需要重定位功能,链接器直接生成只能在某个固定的内
显示全部
相似文档