9.嵌入式软件开发环境

课程名称:嵌入式系统原理与应用
Agenda: 9.1 概述 9.2 交叉开发技术 9.3 仿真开发技术 9.4 开发环境提供的主要工具 9.5 GNU的嵌入式开发环境 9.6 Wind River System公司开发的集成开发环境 9.7 仿真开发工具ARMulator
主讲:穆春阳
电气信息工程学院
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.1 概述
1、嵌入式软件的特性
嵌入式系统以应用为中心,嵌埋在系统运行环境中,软件特性
嵌入式软件开发与通用的软件开发具有许多共同点: 具有相同的开发过程:例如,系统定义、可行性分析、需求分析、概 要设计、详细设计、编程实现、软件测试、软件维护等阶段; 具有类似的开发工具:例如,相同分析工具、编程开发工具、软件调 试和测试工具、软件维护工具等; 具有类似的辅助工具:例如,项目管理工具、版本管理工具等。 嵌入式软件系统通常只为软件提供运行环境,而不提供也没必要提供软件 的开发环境; 嵌入式软件具有专用性,只能为指定的、更大的系统工作,无法运行于其 他系统中; 嵌入式软件的正确性不仅由系统功能和行为特性决定,还依赖于系统的时 间特性(或时间约束): 出于不同的考虑,嵌入式软件的时间约束既可以针对嵌入式软件本身 也可以针对其中的任务。
2
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.1 概述
2、嵌入式软件开发及其支持工具的特点
嵌入式软件特性给其开发提出了新的挑战,其特点:
需要协调管理特殊的硬件资源; 软件具有可配置/裁剪特性; 需要交叉编译环境; 需要交叉调试环境; 需要交叉测试环境; 需要软件固化工具。
与通用软件相比,嵌入式软件开发工具的特殊性主要体现在软 件编译、调试等软件编码实现和测试方面。
3
muchunyang@https://www.360docs.net/doc/c113370047.html,
课程名称:嵌入式系统原理与应用
Agenda: 9.1 概述 9.2 交叉开发技术 9.3 仿真开发技术 9.4 开发环境提供的主要工具 9.5 GNU的嵌入式开发环境 9.6 Wind River System公司开发的集成开发环境 9.7 仿真开发工具ARMulator
主讲:穆春阳
电气信息工程学院
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
0、交叉开发(Cross Developing)模式
大多数嵌入式系统软硬件资源是按照系统运行时的要求配置的
交叉开发的模式: ①开发系统是建立在软硬件资源均比较丰富的PC机或工作站(一般称为宿 主机或Host)上,嵌入式软件的编辑、编译、连接等过程在宿主机上完成; ②嵌入式软件的最终运行平台是嵌入式设备(一般称为目标机或Target), 与宿主机有很大差别的; ③宿主机与目标机通过串口、并口、网口或其他通信端口相连,嵌入式软 件的调试和测试是由宿主机和目标机之间的协作来共同完成。
5
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
0、交叉开发(Cross Deve

loping)模式
宿主机与目标机的主要差别
硬件的差别: 最主要是二者的处理器不同。 软件环境的差异 ①在宿主机上,通用操作系统等系统软件可以对软件开发提供支持; ②在目标机上,除了调试代理外几乎没有其他用于嵌入式软件开发的软件 资源,其上的嵌入式操作系统仅作为嵌入式软件运行时的支撑。
6
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
交叉开发方法的发展现状
交叉开发的发展过程实质上就是嵌入式应用开发技术发展的过程; 交叉开发技术随嵌入式应用开发技术的发展,其开发方法不断更新,开发 工具的功能越来越强,性价比越来越高; 但是,在实际软件开发中,各种交叉开发方法都有一定的使用范围,没有 一种方式可以适用所有的嵌入式软件开发; 在同一个嵌入式软件的不同开发阶段也经常采用不同的开发方式。 常见的交叉开发方法,如: Crash and Burn方式; ROM Monitor方式:存储器监控方式; ROM Emulator方式:存储器仿真器方式; ICE方式:在线仿真器(In Circuit Emulator)方式; OCD方式:片上调试器(On Chip Debugging)方式。
7
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
Crash and Burn方式
基本思想: ①在Host上编写代码; ②在Host上编译应用程序,生成可执行程序; ③固化(Burn)到Target的非易失存储器(如ROM、EPROM、Flash)中; ④启动运行,若正常则转到⑦; ⑤若不正确(Crash),则根据目标板上的信号显示,估计错误位置,改写代 码,纠正错误; ⑥返回②重复操作; ⑦固化完成。 早期的嵌入式软件开发,大多数采用此种方式,严格讲不属于交叉开发; 这种手工作坊式的开发方式,所采用的工具只有处理器厂商提供的专用编 译器或汇编器,以及固化用的烧写设备; 软件调试借助用户编写的、嵌在应用程序中的调试代码实现,支持的功能 很有限,效率地下; 目前,仅在较小规模的嵌入式系统开发时采用。
8 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
ROM Monitor方式
即存储器监控的开发方式; 基本思想: ①将一段称为ROM Monitor的程序固化在目标机上,负责监控目标机上被 调试程序的运行; ②ROM Monitor程序与宿主机的调试程序一起完成对应用程序的调试; ROM Monitor方式的基本结构如下图所示:
9
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
ROM Monitor方式
目前最广泛使用的调试方法之一,几乎所有的主流交叉开发环境都支持。 ROM Monitor程序的工作过程: ①被预先固化到Target的ROM空间; ②在Target复位后首先被执行,对Target进行必要的初始化; ③然后,初始化自身的程序空间;

④最后,等待Host的命令。 ROM Monitor程序的主要功能: ①它能完成对Target的内存和寄存器的读写、断点设置、单步执行等调试 命令; ②一些高级的ROM Monitor程序还能统计代码的性能参数。
10
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
ROM Monitor方式
采用ROM Monitor方式进行嵌入式软件开发的步骤: ① 编写代码; ② 编译应用程序; ③ 启动Target,建立Host调试程序与Target上ROM Monitor程序的通信 连接; ④ 将可执行目标代码下载到Target上; ⑤ 用户进行跟踪调试; ⑥ 如果一切正常,则转至步骤⑨; ⑦ 若发现错误,则在调试器帮助下定位错误; ⑧ 修改错误,重新编译后返回步骤④; ⑨ 将程序固化到Target上。 ROM Monitor方式的优点 ① 用户可以实时控制Target上的内存单元、寄存器、断点设置等,调试 效率明显提高,可以缩短产品开发周期; ② Target与Host通信可以借助Target自身的串口、网口等,不需专门的 调试硬件支持,成本低。
11 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
ROM Monitor方式
ROM Monitor方式的缺点 ① ROM Monitor程序驻留在Target内存中,要求Target有足够的内存空 间,而且导致Target调试时的内存使用与运行时不一致,从而可能隐藏 一些内存使用方面的软件错误; ② ROM Monitor程序是在Target上运行,可以导致Target调试时的CPU 运行与正常情况下的运行不一致,如干扰外部事件中断响应等,因此, 不便用来调试有时间特性的软件; ③ ROM Monitor程序与Host通信要占用Target的一个通信端口,因此无 法调试该端口相关的代码; ④ 若Target的CPU不支持硬件断点,则ROM Monitor程序无法调试设置 数据断点; ⑤ 调试时, ROM Monitor程序负责Target的启动初始化,因此,无法调 试系统启动初始化过程,例如, ROM Monitor程序本身的调试无法采用这 种方法。
12
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
ROM Emulator方式
基本思想: ① ROM Emulator 是 一 种 替 代 Target 上 ROM 芯 片 的 设 备 , 可 以 插 接 到 Target的ROM插座上,取代Target的ROM存储器; ②用户将被调试程序下载到ROM Emulator中,等效于下载到Target的 ROM中; ③通过ROM Emulator可以了解Target运行时的内存变化,可以修改内存单 元的值,从而实现软件错误的定位。 ROM Emulator方式的优点: ①可以保证被调试软件的调试版本与最终发布版本一致; ②调试时不需要其他ROM烧写工具。 ROM Emulator方式的缺点: ①它必须插接到Target的ROM插座上,这要求Target必须支持外接ROM存 储空间,因而此方式不适用于Target仅使用CPU片内存储资源的情形; ②其功能相对单一,通常与ROM Monitor配合适用

,故带有ROM Monitor 的所有缺点。
13 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
ICE方式
嵌入式系统领域使用得最多、功能最强大的调试器之一; 基本思想: ①是一种用于替代Target上CPU的设备; ②可以执行Target上CPU的指令; ③能够将内部的信号输出到被控制的Target; ④ICE上的内存可以被映射到用户的程序空间; ⑤即使Target不存在,也可以进行代码调试,而且表现与被代替的Target 处理器完全一样; ⑥允许用户查看处理器内的数据或代码,并控制CPU的运行。
14
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
ICE方式
ICE组成: ①仿真探头(Probe Pod):通过一条电缆与仿真器主板相连; ②仿真器主板:包含经过特殊处理的、与被替代CPU完全相同的处理器。
15
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
ICE方式
采用ICE可完成的特殊调试功能: ①同时支持软件断点和硬件断点的设置; ②设置各种复杂的断点和触发器; ③实时跟踪目标程序的运行,并可实现选择性的跟踪; ④支持“Time Stamp”; ⑤允许用户设置“Timer”; ⑥提供“Shadow RAM”,能在不中断被调试程序运行的情况下查看内存和 变量,即非干扰性(不占用运行时钟周期)调试查询。 ICE方式的优点: ICE能够检测Target系统硬件的时间响应特性,特别适合调试实时性强的 嵌入式软件和设备驱动程序,并进行一些实时性能分析。 ICE方式的缺点: ①一个ICE一般仅能仿真一个或一个系列的CPU,通用性不高; ②随着CPU越来越复杂,对应的ICE技术难度越来越大; ③成本高,不适合团队开发,一般仅用于普通调试工具解决不了的场合。
16 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
OCD方式
为了克服ICE实现越来越困难、降低成本。 基本思想: ①在CPU芯片内部内嵌一个调试模块,如BDM; ②内嵌的调试模块以基于微码的监控器或纯硬件资源的形式存在,包括一 些提供给用户的接口,如断点寄存器等; ③当满足一定的触发条件时CPU进入某种特殊状态,此时被调试程序停止 运行,主机的调试器可以通过处理器外部特设的通信端口,如JTAG,访问各 种资源,如寄存器、存储器等,并执行命令。 特点: ①将ICE提供的实时跟踪和运行控制分开,使用很少的实时跟踪功能被放 弃,而大量使用的运行控制被放到Target系统的CPU核内,由一个专门的调 试控制逻辑模块来实现,并用一个专用的串行信号接口开放给用户; ②OCD可以提供ICE 80%的功能,成本还不到ICE的20% 实现方法: ①仿ROM Monitor的结构,效率低,已被逐渐淘汰; ②两级CPU模式,即正常运行模式和调试模

式。
17 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
OCD方式
OCD方式的优点: ①性价比高; ②不占用Target硬件资源; ③调试环境和最终程序运行环境基本一致,对被调试程序性能影响小,从 硬件上监控程序运行状态,免去了软件监控不可避免的开销; ④既能调试应用程序,也能调试底层系统软件。 OCD方式的缺点: ①调试的实时性不如ICE强,不支持非干扰调试查询; ②CPU必须具有OCD功能; ③由于历史原因,OCD有许多不同实现方式,标准并不统一,如JTAG、 BDM、OnCE、MPSD等。
18
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
1、常用的交叉开发方法
OCD方式
OCD芯片举例: ①仿ROM Monitor结构的OCD芯片,如Motorola公司的CPU16、CPU32和 Coldfire等系列; ②两级模式的BDM OCD芯片,如Motorola公司的MPC5xx、MPC8xx系列 等; ③OnCE OCD芯片有Motorola公司的DSP芯片系列等; ④ JTAG OCD 芯 片 包 括 PPC6xx 、 PPC4xx 、 TI 公 司 的 DSP 芯 片 、 ARM7/9TDMI、一些MIPS芯片、Intel I960、EPSON公司的S1C33系列MCU 等。
19
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
2、交叉开发过程
应用软件交叉开发的3个阶段
软件生成阶段 软件调试阶段 固化运行阶段
20
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
2、交叉开发过程
应用软件交叉开发的3个阶段
软件生成阶段 ①与一般应用系统的生成一样; ②根据应用设计方案,选用适当的程序设计语言和工具编写嵌入式应用程 序,再使用交叉编译/连接工具生成可执行程序。 ③运行库Lib中的内容:a)可 以是一些公共函数,b)可以是dll 库文件,c)嵌入式构件; ④生成的可执行目标程序,不 能直接在开发环境所在的Host上 运行,而是必须下载到目标板上 运行。
21
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
2、交叉开发过程
应用软件交叉开发的3个阶段
软件调试阶段 ①此阶段目的:检查是否有错,并定位出错位置; ②调试必须借助一些专门的工具,如程序下载/交叉调试工具; ③物理连接如下图所示:
22
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术
2、交叉开发过程
应用软件交叉开发的3个阶段
固化运行阶段 ①本阶段需要将已经调试验证后的程序固化到目标机上,确保在需要时投 入运行。 ②根据嵌入式硬件的配置情况,软件固化方式有:a)固化到EPROM、 Flash等存储器中,b)固化到DOC、DOM等电子盘中。 ③与硬件配置有关,程序启动 过程也有所不同: a)固化到存储 器时,上电直接启动, b)固化到 电子盘时,需借助一些BIOS类 的引导功能间接启动。 ④引入动态加载功能:对于 PDA、手机等高端设备,不可能 将所有的应用程序都固化在有限 的存储空间中。
23
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.2 交叉开发技术

3、交叉开发环境
嵌入式开发环境
早期的嵌入式开发环境——字符界面的开发环境 ①一些嵌入式开发工具的简单组合; ②各种工具以独立的应用程序形式提供,并以命令行的方式启动和控制; ③工具之间通过共享临时文件的方式实现通信; ④举例:自由软件基金会组织的GNU系列嵌入式开发工具。 图形界面的嵌入式软件开发环境 ①提供统一的图形界面, 用户通过操作界面上的菜单 启动和控制各种开发工具; ②有助于提高软件开发效 率和质量; ③目前的商用嵌入式开发 环境多属于这一类,如 Tornado 、 CodeWarrior 、 LambdaTools等。
24 muchunyang@https://www.360docs.net/doc/c113370047.html,
课程名称:嵌入式系统原理与应用
Agenda: 9.1 概述 9.2 交叉开发技术 9.3 仿真开发技术 9.4 开发环境提供的主要工具 9.5 GNU的嵌入式开发环境 9.6 Wind River System公司开发的集成开发环境 9.7 仿真开发工具ARMulator
主讲:穆春阳
电气信息工程学院
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.3 仿真开发技术
0、仿真开发技术的应用背景
嵌入式交叉开发的缺陷
基于该方法的开发过程严重依赖宿主机和目标机协作; 在目标硬件系统准备完成之后,才能进行软件系统的调试和运行; 软件和硬件开发相互牵制,硬件引起的异常行为严重影响软件的调试和测 试,导致开发进度延误,软件质量难以保证。
市场上嵌入式新产品的生命周期越来越短
例如PDA、Web-Phone、手机、IPTV等,生命周期一般只有1、2年,短 则几个月; 要求目标机或评估板完成后再开发应用系统已无法满足需要。
仿真技术应运而生
利用计算机仿真技术模拟嵌入式硬件系统的真实运行,使软件开发和系统 集成在虚拟平台上运行; 在硬件原型制造前就完成系统模型验证和运行行为分析,避免软硬件开发 相互等待,提高开发效率,降低风险和成本; 原理上,仿真开发可被看成是一种特殊的交叉开发方式:宿主机和目标机 在同一个物理平台上,但其运行环境各不相同,交叉在两个环境之间进行。
26 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.3 仿真开发技术
0、仿真开发技术的应用背景
仿真开发环境的一种实现框架
27
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.3 仿真开发技术
1、仿真开发的分类
按所使用物理环境的不同,将嵌入式软件仿真开发分为2类:
基于仿真硬件的开发 ①例如:ROM Emulator、ICE、OCD等方法,采用了专门的仿真设备替代 目标环境的相关硬件,如ROM、CPU等。 ②仍需要宿主设备与仿真设备构成的开发环境,即不能避免嵌入式软件开 发必须在物理环境搭建完成后进行的问题,因而不能做到真正的软硬件同时 开发。 纯软件仿真开发 ①是软硬件同时开发的唯一选择; ②用宿主机上的资源模拟目标机的实际硬

件电路的运行(包括外设模拟), 构建应用软件运行所需的虚拟硬件环境; ③为程序员提供一个高效、低成本的嵌入式软件开发和调试的“软”平台; ④仿真平台开发出的程序,具有较高的可移植性。 ⑤按使用目的的差异,又分为:a)应用级仿真,b)编程接口级仿真,c)硬 件级仿真等几类。
28
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.3 仿真开发技术
1、仿真开发的分类
编程接口(API)级仿真开发
关注所开发的嵌入式软件在功能上是否满足需要,又称功能级仿真开发; 处理过程包括:①仿真API构造,②仿真软件开发; 不能保证运行逻辑、实时性等,对外设无关软件的前期验证非常有价值。
29
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.3 仿真开发技术
1、仿真开发的分类
硬件级仿真开发
又称指令级仿真开发,关注的是物理硬件功能和内部运行过程,其基本元 素是硬件指令操作和过程; 处理过程:构造仿真硬件->搭建仿真目标环境->用目标语言开发嵌入式软 件。
30
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.3 仿真开发技术
2、仿真开发过程
在与叉开发过程相 比增加了仿真验证
若是指令级仿真,仿 真库中存放仿真设备; 若是API级仿真,仿 真库中存放接口一致的 仿真API函数; 仿真验证通过后,再 生成实际的目标代码, 之后的开发过程按交叉 开发过程处理。 采用仿真技术后,既 可以实现软硬件并行执 行,也可以使其后的交 叉开发变得简单。
31
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.3 仿真开发技术
3、仿真开发环境
其在逻辑上可以由多个工具子系统组成
项目管理:①完成项目的创建、参数配置、编辑保存,②管理项目活动, ③包括嵌入式软件开发阶段所涉及的全部工具。 仿真调试:①可提供源代码级和 汇编级调试功能,②通过调试器可以 检查程序的功能和逻辑正确性,③提 供多窗口调试信息显示,④支持发送 调试命令,⑤控制程序的运行方式。 仿真运行环境管理:提供整个仿 真系统得以正确运行的机制。 仿真运行环境配置:根据用户选 择硬件和装配目标系统的要求,构建 一个虚拟的“目标板”,供仿真调和四 和测试使用。 软件逻辑分析:模拟硬件逻辑分 析仪的工作原理。 仿真硬件管理:管理仿真硬件。
32 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.3 仿真开发技术
4、仿真开发环境的特点
仿真开发环境是为弥补交叉开发的缺点而提出的; 仿真开发环境的优点:
不需要提供实际的目标硬件环境,构建成本低; 编译调试都在宿主机上进行,方便实用; 可最大限度地保证软、硬件同时开发,从而简化嵌入式软件开发过程,缩 短开发周期。
仿真开发环境的缺点:
高质量的仿真开发环境需要模拟目标机的所有设备和器件组件,工作量巨 大,

单独某个企业或机构难以完成; 仿真开发时交叉开发的必要补充: 在大多数环境下,仿真环境的实时特性还不能达到目标机的实际要求,因 此,在仿真调试完成后,仍需要移植到实际目标硬件,做进一步调试和测试 验证。
完整的嵌入式开发环境能够同时提供交叉开发环境和仿真开发环 境,以适应不同应用、不同开发阶段的需要。
33 muchunyang@https://www.360docs.net/doc/c113370047.html,
课程名称:嵌入式系统原理与应用
Agenda: 9.1 概述 9.2 交叉开发技术 9.3 仿真开发技术 9.4 开发环境提供的主要工具 9.5 GNU的嵌入式开发环境 9.6 Wind River System公司开发的集成开发环境 9.7 仿真开发工具ARMulator
主讲:穆春阳
电气信息工程学院
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
0、概述
嵌入式软件开发环境的组成
一般由一系列开发工具组成,通常有 项目管理器 项目配置工具 源码编辑工具 C RTL(C Run-Time Library) RTOS开发支持包 交叉编译工具 交叉调试工具 交叉测试与性能分析工具等。
35
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
1、项目管理
嵌入式项目的软件部分组成
由“①源文件、②开发工具选项、③编程说明” 3部分组成。
项目管理工具的主要工作
负责应用源程序的文件组织管理: 一个项目通常具有十几个、几十个,有的甚至会有上千个文件。 项目管理器的另一个任务是对编程对象的分类管理和快速检索: 从编程角度看,一个项目包含许多编程对象,如变量、结构、函数、宏定 义等。 为嵌入式软件在不同硬件平台上移植提供支持: ①项目管理器一般采用通用的工作区、项目管理方式,这能比较好地支持 在不同硬件平台上的软件移植; ②项目相关配置工具可对软件移植工作提供方便——所有与硬件相关的编 译、调试等交叉开发工具都根据硬件配置自动关联。 以项目为主线,提供启动配置、编辑、编译等工具的快捷方式,方便开发 人员使用。
36 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
2、配置裁剪
必要性
嵌入式开发环境一般设计为一种相对通用的平台; 而嵌入式系统应用环境差别巨大,系统资源的配置情况也各不相同; 需要嵌入式开发环境提供一系列的配置工具,以方便用户根据需要对项目 参数进行配置裁剪。
常见的配置裁剪工具,包括:
编译参数配置工具 ①用于确定目标代码的生成规则、编译连接选项和目标平台的选项; ②对C语言的标准库等硬件依赖支持库及优化选项进行配置。 实时操作系统裁剪工具 根据需求,对实时操作系统的各个组件进行裁剪和配置。 内存配置工具 ①对当前项目目标代码的内存定位、大小进行方便灵活的配置; ②自动生成和维

护链接定位文件,以便在生成可调试或可固化应用代码时 使用。
37 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
3、源码编辑
源码编辑器的特点
最基本的功能——支持标准的文本编辑; 支持语法色彩; 具有简单的语法检查功能; 具有源程序函数索引、定位功能; 与调试器协作,显示调试信息:当前执行语句、断点等; 提供文本保存的多种备份机制。
38
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
4、目标代码编译生成
嵌入式软件项目的文件数量巨大,手工编译容易出错。 嵌入式开发环境提供make工具,负责编译、连接项目源文件。 目标代码生成
其一般步骤可描述如下: ① 设置目标代码生成选项; ② C源码预处理,处理预处理命令: 一般预处理命令具有“#”前缀。 ③ C源码编译成紧凑、高效的汇编代码,同时反馈错误、警告等编译信息; ④ 将汇编语言程序转换为可重定位目标代码; ⑤ 将可重定位的目标模块连接成单一的、绝对定位的目标程序: 调试模式下包含调试信息,还会产生一个内存映像文件。 ⑥ 文件格式转换: 不同微处理器、下载工具要求的目标文件格式可能不同。
39
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
4、目标代码编译生成
目标代码优化
常用的优化技术包括: ① 合并已有常量; ② 公共子表达式删除; ③ 控制流优化; ④ 寄存器变量使用优化; ⑤ 循环优化:外提循环代码、削减强度、删除归纳变量; ⑥ 冗余指令删除; ⑦ 窥孔优化。 调试版本一般屏蔽各种优化功能: 为避免引起目标代码到所选程序设计语言或汇编语言源代码的映射混乱, 增加差错和排错的难度。
40
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
4、目标代码编译生成
编译提示信息
在编译和连接过程中,编译器和连接器反馈的提示信息,如错误信息、过 程信息和状态信息等。 编译错误信息: ①致命错误 通常是内部编译出错。 ②一般错误 指程序的语法错误、磁盘或内存存取错误、命令行错误等。 ③警告 只是指出一些值得怀疑的情况,并不终止编译的进行,一般编译器都有 编译开关选项,用以屏蔽警告信息。
库的使用
在开发大、中型软件时,常将编译好的模块统一放到一个库中,用开发环 境提供的“库的维护管理工具”维护库中的文件成员。 目的:①节省编译时间和空间;②知识产权保护的一种措施。
41 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
4、目标代码编译生成
常用文件后缀
常见的后缀: ① .c, .cc, .cxx, .cpp:C/C++语言的源代码文件; ② .h或.hpp: C/C++语言的头代码文件; ③ .s或.asm:汇编代码文件; ④ .S:已预

编译的汇编代码文件; ⑤ .o或.obj:编译后的目标文件; ⑥… … 文件后缀说明: ① 以上文件后缀仅是一个使用习惯,不是必须遵守的标准; ② 每一个开发环境可能仅涉及其中的一部分; ③ 同一类型文件在不同开发环境中可能采用不同的后缀; ④ 同一后缀的文件在不同开发环境中可能具有不同的格式和含义。
42
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
5、交叉调试
交叉调试的定义
从原理上考虑,可定义为: 调试器能够通过某种方式远程控制目标机上被调试程序的运行模式,并且 具备查看和修改目标机上的内存、寄存器以及被调试程序中的变量等功能。
交叉调试工具的组成
硬件部分:指Host与Target之间的连接线、仿真头、转换板等连接硬件, 包括可能使用的ICE、ROM Emulator等; 软件部分:指Host端调试工具和Target端ROM Monitor等。
交叉调试的特点
调试器(Debugger)与被调试程序(Debuggee)运行在不同的计算机环境中; Debugger通过某种通信方式与Target建立联系; 一般在Target上有Debugger的某种代理(Agent),它与Debugger一起配合完 成对Target上运行的程序的调试; Target可以是一种虚拟机,此时调试方式的本质保持不变。
43
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
5、交叉调试
交叉调试与非交叉调试的比较
44
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
5、交叉调试
交叉调试支持的功能
内存:读/写指定地址内存单元。 寄存器:读/写指定寄存器单元。 断点:包括设置、取消、屏蔽等断点维护功能,包括: ①软断点:将指定地址的指令设为非法,同时截获异常处理用于调试; ②硬断点:用于调试ROM中的程序和监控对变量的访问,需CPU支持。 变量:指查看和修改变量的控制功能。 显示模式:可采用C语言源码(编译时需产生符号表,可与C源文件对应)、汇编代码( 需反汇编器支持,不能与汇编源文件对应)、机器码,或混合显示模式进行调试。 OS-Aware:是指在调试时能获得目标系统中的对象信息,同时能控制系 统中对象的行为,给调试者提供强大的调试功能,主要用于多线程系统。 ①对象:是指在系统中有独立属性的、有独立数据结构的,且包含有对属 性和数据结构进行操作的方法的这样一种程序与数据的结合体。 例如,任务、消息队列、信号量等。 ②编程时能调用的系统函数,在OS-Aware的支持下几乎都能以命令的方 式在Target上运行。
45 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
5、交叉调试
交叉调试的过程框架
在Host与Target之间具有明显的 交叉进行的痕迹。
46
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
5、交叉调试
任务级调试

在RTOS支持下实现调试工作,RTOS本身不在调试范围内,调试的对象 是一个用户任务(集)。 任务级调试是最基本的 嵌入式软件调试技术。 任务级调试方式, ①调试范围灵活可控: 用户可以自定义调试范 围,在调试过程中添加或删 除调试范围中的任务。 ②适用于调试多任务的 复杂用户程序。 调试代理、被调试的任 务、不能被调试的任务之间 的关系:见右图。
47
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
5、交叉调试
系统级调试
即内核级调试,调试对象是Target上除调试Agent外的所有程序,包括 RTOS本身。 特点:①用户不能自定义调试范围;②调试范围内的所有程序地位相等, 不能区分RTOS和运行在其上的应用任务;③主要用于调试RTOS、ISR、 RTOS的可加载模块,以及一些简单的不需要OS支持的用户程序。 调试方与被调试方之间的关系,见下图:
48
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
6、测试工具
关于软件测试
它是一种重要的软件质量保证活动; 按所处开发阶段的不同,测试被分为单元测试、集成测试、系统测试、验 收测试和回归测试等; 嵌入式软件的测试具有通用软件测试的特点,其静态检查、动态覆盖等技 术与通用软件测试类似; 嵌入式软件测试属于交叉测试,即其测试必须由Host和Target协作完成。
49
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
6、测试工具
仿真测试
典型的嵌入式软件测试,分为:Host测试和Target测试。 在Host上的测试主要是单元测试: ①若被测单元所用程序设计语言是高级语言,或与Host相同的汇编语言, 则可以直接在Host上进行测试; ②若被测单元使用的汇编代码与Host不同,则如果想在Host上测试,需要 借助指令仿真器。 Host测试的缺点:需要特定的指令仿真器、改写代码等;其优点:测试可 以不依赖目标硬件环境,使得测试工作可以在目标硬件完成之前进行。 软件仿真测试环境:与指令仿真器相比,不仅能仿真指令集,还可以模拟 输入/输出指令以及中断的发生,功能更强大。 根据模拟方式的不同,仿真测试环境被分为2类: ①要求用户改写代码,使用仿真环境提供的输入/输出函数替代源程序中的 I/O访问,中断处理程序也要相应改变,这类方式主要完成功能性测试; ②允许用户在没有目标机硬件或I/O设备的情况下,无需改动其源程序就可 以进行测试,此类方式功能强,但构造仿真环境难,仿真速度较慢。
50 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
6、测试工具
仿真测试
纯软件仿真测试的结构框架,由3个部分组成: ①仿真运行平台:放置嵌入式系统的仿真硬件、被测软件; ②信

号仿真平台:模拟嵌入式系统外部运行环境,向嵌入式系统提供激励 和反馈信号。 ③主控计算机平台:主要进行测试用例的生成、测试运行调度管理、数据 分配、测试后的评估工作。
51
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
6、测试工具
交叉测试
在目标机上进行的测试,是不可替代的。 基于激励与反馈信号产生方式的不同,交叉测试被分为: ①仿真信号测试:不需要实际信号源,相对容易实现,测试可以只针对系 统的一部分进行。 ②实物测试:针对的是整个系统,需要所有硬件(包括实际测试信号源)到 位,测试代价高、周期长。 交叉测试时的记录方法:①借助在线仿真器;②使用插桩技术。
52
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
6、测试工具
实时性测试
实时嵌入式软件的功能和行为的正确性验证仍可采用传统的测试技术; 实时嵌入式软件的时间特性的验证,是实时嵌入式测试的核心内容。 实时软件的时间特性测试的2种方法: 静态时间分析:是指不执行被测程序而通过对程序结构的分析,预估 程序、进程或子程序执行时间。 ①任务的最大执行时间是计算的关键问题。 ②需要考虑单个任务执行时间的计算,以及实时系统多任务调度。 动态实时检测:通过实际执行程序来测试程序的时间特性。3种常用 的动态实时检测方法: a)在线仿真器:监视和度量程序的执行,缺点是其结果仅是测量 值,优点是测量无需改变程序,测量相对精确。 b)微处理器模拟器:能得到程序的运行时间,相当于“软件在线仿 真器”,与在线仿真器有同样的优点和缺点。 c)插桩工具:是通过向程序特定位置插入探针记录程序的执行时 间,缺点是记录的时间不准确。
53 muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
7、版本管理工具
版本管理
又称版本控制,是用户对项目文件版本进行控制的工具软件,其目的是: ①保存软件开发过程中的各种中间状态, ②控制对软件系统的修改,保护知识产权, ③记录软件系统的修改过程, ④为软件开发进程中文件或目录的发展过程提供有效的追踪手段, ⑤保证在需要时可回到旧的版本,避免文件的丢失、修改的丢失和相互覆 盖; ⑥是实现团队并行开发、提高开发效率的基础。 版本管理的内涵,包括:①版本库②临时工作区。 采用版本管理工具时的软件开发模式: 检出->修改->检入。 常用的版本管理工具:VSS、CVS、CC&CQ、CCC、VCS等。
54
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.4 开发环境提供的主要工具
7、版本管理工具
版本管理工具的功能结构
管理对象是嵌入式软件开发过程中涉及的所有文件对象,包括文件、目录

和链接。
55
muchunyang@https://www.360docs.net/doc/c113370047.html,
课程名称:嵌入式系统原理与应用
Agenda: 9.1 概述 9.2 交叉开发技术 9.3 仿真开发技术 9.4 开发环境提供的主要工具 9.5 GNU的嵌入式开发环境 9.6 Wind River System公司开发的集成开发环境 9.7 仿真开发工具ARMulator
主讲:穆春阳
电气信息工程学院
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.5 GNU的嵌入式开发环境
0、概述
关于GNU
自由软件基金组织为Linux配套的开发工具,包括: ①C编译器gcc ②make工具GNU make ③开发调试工具gdb 按GPL版权声明发布,不需要任何版税。 属于字符界面的开发环境。
57
muchunyang@https://www.360docs.net/doc/c113370047.html,
课程名称:嵌入式系统原理与应用
Agenda: 9.1 概述 9.2 交叉开发技术 9.3 仿真开发技术 9.4 开发环境提供的主要工具 9.5 GNU的嵌入式开发环境 9.6 Wind River System公司开发的集成开发环境 9.7 仿真开发工具ARMulator
主讲:穆春阳
电气信息工程学院
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.6 Wind River System公司开发的集成开发环境
0、概述
嵌入式软件开发环境——Tornado
1995年,获得EDN杂志颁发的年度产品创新奖。 采用交叉开发方式,支持多种宿主机/目标机连接方式。 是一个直观的、可视化的、用户可扩充的开发环境,属于图形界 面的嵌入式软件开发环境。
59
muchunyang@https://www.360docs.net/doc/c113370047.html,
课程名称:嵌入式系统原理与应用
Agenda: 9.1 概述 9.2 交叉开发技术 9.3 仿真开发技术 9.4 开发环境提供的主要工具 9.5 GNU的嵌入式开发环境 9.6 Wind River System公司开发的集成开发环境 9.7 仿真开发工具ARMulator
主讲:穆春阳
电气信息工程学院
muchunyang@https://www.360docs.net/doc/c113370047.html,
9.7 仿真开发工具ARMulator
0、概述
ARM公司产品——ARMulator
ARM公司推出的IDE ADS (ARM Developer Suite)中提供的指令 集模拟器。 ARMulator与运行在Host上的调试器相连接,模拟ARM微处理器 体系结构和指令集,为开发和调试ARM程序提供软件仿真环境。 ARMulator处理模拟ARM微处理器外,其他功能: ①可以仿真存储器和微处理器外围设备; ②支持全部的标准C库函数; ③具有跟踪功能,能记录程序中指令和内存访问的情况,也可以 记录各种事件的发生等; ④适合规模相对较小的应用开发。
61
muchunyang@https://www.360docs.net/doc/c113370047.html,
muchunyang@https://www.360docs.net/doc/c113370047.html,

嵌入式软件工程师应该知道的16个问题

嵌入式软件工程师应知道的0x10个基本问题(经典收藏版) C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不是在嵌入式系统上。如果上述任何问题的答案是"是"的话,那么我知道我得认真考虑我是否应该去做这份工作。 从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。 有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮助。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。 这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。 预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3) 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4) 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。 2 . 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A)<= (B) ? (A) : (B)) 这个测试是为下面的目的而设的: 1) 标识#define在宏中应用的基本知识。这是很重要的。因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。 2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。

嵌入式软件开发流程图

嵌入式软件开发流程 一、嵌入式软件开发流程 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所示。

嵌入式系统开发基础——基于ARM9微处理器C语言程序设计各章习题

第一章习题 1。嵌入某种微处理器或单片机的测试和控制系统称为嵌入式控制系统(Embedded Control System)。 在应用上大致分为两个层次,以MCS-51为代表的8位单片机和以ARM技术为基础的32位精减指令系统单片机 2。目标机上安装某种嵌入式操作系统和不安装嵌入式操作系统, 以MCS-51为代表的8位单片机不安装嵌入式操作系统。 3。32位、16位和8位 5。32位、16位 6。在大端格式中,字数据的高字节存储在低字节单元中,而字数据的低字节则存放在高地址单元中。 在小端存储格式中,低地址单元存放的是字数据的低字节,高地址单元中,存放的是数据的高字节。 第二章习题 (略) 第三章习题 1。 (1)寄存器大约有17类,每个的定义都是寄存器名字前面加一个小写”r” (2)在56个中断源中,有32个中断源提供中断控制器,其中,外部中断EINT4~EINT7通过“或”的形式提供一个中断源送至中断控制器,EINT8~EINT23也通过“或”的形式提供一个中断源送至中断控制器。 第四章习题 1,56个中断源,有32个中断源提供中断控制器 2,两种中断模式,即FIQ模式(快速模式)和IRQ模式(通用模式)。通过中断模式控制寄存器设置。 3,常用的有5个,它们是中断模式控制寄存器,控制中断模式;中断屏蔽寄存器,控制中断允许和禁止;中断源挂起寄存器,反映哪个中断源向CPU申请了中断;中断挂起寄存器,反映CPU正在响应的中断是哪个中断源申请的;中断优先级寄存器,它和中断仲裁器配合,决定中断优先级。

4,中断源挂起寄存器,反映哪个中断源向CPU申请了中断;中断挂起寄存器,反映CPU正在响应的中断是哪个中断源申请的。中断源向CPU申请了中断如果该中断源没被屏蔽并且没有和它同级或高级的中断源申请中断,才能被响应。系统中可以有多个中断源向CPU申请中断,但同一时刻CPU只能响应一个最高级的中断源中断请求。中断源挂起寄存器和中断挂起寄存器反映了中断系统不同时段的状态。 5,进入中断服务程序先清中断源挂起寄存器和中断挂起寄存器;中断结束,将该中断源屏蔽。 6,将该中断源屏蔽取消;将该中断源屏蔽。 第五章习题 1,S3C2410芯片上共有117个多功能的输人/输出引脚,它们是。 ?1个23位的输出端口(端口A); 。1个11位的输入/输出端口(端口B); 。1个16位输入/输出端口(端口C); ?1个16位输入/输出端口(端口D); ?1个16位输入/输出端口(端口E); ?1个8位输人/输出端口(端口F); ?1个16位输入/输出端口(端口G); 。1个11位的输入/输出端口(端口H)。 2,S3C2410 I/O口的控制寄存器、数据寄存器、上拉电阻允许寄存器的作用? 端口控制寄存器定义了每个引脚的功能;与I/O口进行数据操作,不管是输入还是输出,都是通过该口的数据寄存器进行的,如果该端口定义为输出端口,那么可以向GPnDA T的相应位写数据。如果该端口定义为输人端端口,那么可以从GPnDAT的相应位读出数据。 端口上拉寄存器控制每个端口组上拉电阻的使能/禁止。如果上拉寄存器某一位为0,则相应的端口上拉电阻被使能,该位做基本输入/输出使用,即第1功能;如果上拉寄存器某一位是1,则相应的端口上拉电阻被禁止,该位做第2功能使用。 5, rGPBCON=rGPBCON& 0xFFFFFC∣1; //蜂鸣器配置,PB1口接蜂鸣器,输出delay(1000); rGPBDAT & = 0xFFFFFE; //蜂鸣器响,低电平有效 rGPBDAT∣=1; // 蜂鸣器停 第六章习题 3,S3C2410 UART波特率如何确定?

嵌入式底层软件开发方法

嵌入式底层软件开发方法 自从20世纪70年代单片机出现以来,嵌入式系统已获得了较为深入的研究, 提出了一些嵌入式软件的开发方法,但嵌入式系统仍处于发展阶段,嵌入式系统 已经显示出广阔的应用前景。 1.嵌入式系统的定义 嵌入式系统又称为嵌入式计算机系统,是指嵌入到对象体系中的专用计算机系统。对象系统则是指嵌入式系统所嵌入的宿主系统,嵌入性、专用性与计算机系统 是嵌入式系统的三个基本要素。嵌入式系统通常被描述为:以应用为中心,以计 算机技术为基础,软硬件可剪裁,适应于应用系统对功能、可靠性、成本、体积和 功耗有严格要求的专业计算机系统。 2.嵌入式系统的发展历程 嵌入式系统是在硬件和软件交替发展的支撑下逐渐趋于稳定和成熟的,它有着 悠久的历史。从20世纪70年代单片机的出现到现在各种嵌入式微处理器、微控制 器的大规模应用,嵌入式系统己经有了30多年的发展历史。纵观嵌入式技术的发展,大致经历了以下几个发展阶段。 (1)无操作系统阶段:主要是以功能简单的专用计算机或单片机为核心的可编 程控制器形式存在的系统,具有监测、伺服、设备指示等功能,一般没有操作系统 的支持,通过汇编语言编程对系统进行直接控制。主要特点是:系统结构和功能都 相对单一,处理效率较低,存储容量较小,几乎没有用户接口,比较适合于各类专 用领域。 (2)以嵌入式处理器和嵌入式操作系统为标志的嵌入式系统:主要特点是出现 了高可靠、低功耗的嵌入式处理器,嵌入式操作系统能运行于各种不同类型的微处 理器上,兼容性好;操作系统内核精小、效率高,并且具有高度的模块化和扩展性;片上系统(System On Chip,SOC)使得嵌入系统越来越小,具有大量的应用程序接口,开发应用程序简单,应用软件丰富。 3.嵌入式系统的构成及其特点 1)嵌入式系统的组成 嵌入式系统主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件 系统等组成,具有专用性、可嵌入性、实时性、可移植性和分布式等特点。其中, 嵌入式微处理器是嵌入式硬件系统的核心部分,它担负着控制、协调系统工作的重 要任务,通常具有实时多任务处理能力、中断处理能力、存储器保护能力和低功耗 能力;支撑硬件主要包括存储介质、通信部件和显示部件等;支撑硬件的驱动程 序、操作系统、应用软件等一起构成嵌入式软件。

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

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

!嵌入式系统开发资料(入门必备)

获取更多权威电子书请登录https://www.360docs.net/doc/c113370047.html, ARM嵌入式系统开发综述ARM开发工程师入门宝典

获取更多权威电子书请登录https://www.360docs.net/doc/c113370047.html, 前言 嵌入式系统通常是以具体应用为中心,以处理器为核心且面向实际应用的软硬件系统,其硬件是整个嵌入式系统运行的基础和平台,提供了软件运行所需的物理平台和通信接口;而嵌入式系统的软件一般包括操作系统和应用软件,它们是整个系统的控制核心,提供人机交互的信息等。所以,嵌入式系统的开发通常包括硬件和软件两部分的开发,硬件部分主要包括选择合适的MCU或者SOC 器件、存储器类型、通讯接口及I/O、电源及其他的辅助设备等;软件部分主要涉及OS porting和应用程序的开发等,与此同时,软件中断调试和实时调试、代码的优化、可移植性/可重用以及软件固化等也是嵌入式软件开发的关键。 嵌入式系统开发的每一个环节都可以独立地展开进行详细的阐述,而本文的出发点主要是为嵌入式开发的初学者者提供一个流程参考。因为对于初学者在面对一个嵌入式开发项目的时候,往往面临着诸多困难,如选择什么样的开发平台?什么样的器件类型?在进行编译时怎样实现代码优化?开发工具该如何选择和使用?在进行程序调试时应该注意那些问题以及选择什么样的嵌入式OS 等等。希望通过本文,能帮助初学者了解有关ARM嵌入式系统开发流程。

获取更多权威电子书请登录https://www.360docs.net/doc/c113370047.html, 目录 前言 (2) 1 嵌入式开发平台 (4) 1.1 ARM的开发平台: (4) 1.2 器件选型 (7) 2 工具选择 (11) 3 编译和连接 (13) 3.1 RVCT的优化级别与优化方向 (16) 3.2 Multifile compilation (21) 3.3调试 (22) 4 操作系统 (23) 4.1 哪里可以得到os 软件包 (Open Source and Linux Kernel) (25) 4.2 安装镜像 (26) 4.3 交叉编译 (26) 总结 (27)

嵌入式系统

第一章绪论 1.嵌入式系统的定义、特点和分类 2.嵌入式操作系统 3.嵌入式系统的选型 4.嵌入式系统的发展趋势 5.嵌入式系统的关键技术 6.嵌入式系统的应用 思考与练习 1.什么是嵌入式系统?嵌入式系统的特点是什么? 2.请说出嵌入式系统与其它商用计算机系统的区别。 3.嵌入式系统的关键技术有哪些? 4.请说明嵌入式系统技术发展及开发应用的趋势。 5.你知道嵌入式系统在我们日常生活中哪些设备中应用?说明其采用的处理器是什么?采用的哪一个嵌入式操作系统? 6.开发嵌入式系统的计算机语言主要有哪几种?分别用在什么场合?7. 嵌入式系统和专用集成电路的关系是什么? 第二章嵌入式系统设计方法 1. 需求分析与系统分析法 2.软硬件协同设计方法 3.嵌入式硬件开发方法 4.嵌入式软件开发方法 5.构件式开发方法 6.软件调试与软件测试方法 思考与练习 1.请说出嵌入式系统设计的主要方法及设计流程。在嵌入式系统开发的总体设计中,需要进行哪几方面的工作? 2.嵌入式硬件调试的主要方法及技术手段有哪些? 3.什么是构件式开发方法?说明该方法对嵌入式系统开发具有什么意义,并举例说明。4.需求分析阶段分为哪几个步骤?每个步骤完成什么工作? 5.在进行系统设计时,概要设计和详细设计的工作内容有什么不同? 6.在嵌入式系统实现阶段,需要选择开发平台,通常开发平台的选择包括哪些内容?7.在当今IT 时代,为了使产品尽快进入市场,就产品开发阶段,你认为有哪些方法可以加快产品的开发速度? 8.什么是“黑盒”测试?什么是“白盒”测试?什么是“灰盒”测试? 9.嵌入式系统开发中,使用软件组件技术有什么好处? 10.什么是知识产权核(Intellectual Property Core,简称IP Core)?指出“软知识产权核(Soft IP Core)”、“硬知识产权核(Hard IP Core)”、“固知识产权核(Firm IP Core)”的意义和差别。 11.根据嵌入式软件开发的不同阶段,嵌入式开发工具有哪些种类? 12.从底层硬件到上层应用,嵌入式软件的开发可以分为哪几种? 13.什么是交叉开发环境? 14.什么是OCD 调试方法?指出OCD 的主要形式JTAG 和BDM 的特点和区别? 15.嵌入式软件的调试运行环境和固化运行环境主要区别是什么?

嵌入式软件开发流程

嵌入式软件的开发流程 嵌入式系统是指用于执行独立功能的专用计算机系统。它由包括微处理器、定时器、微控制器、存储器、传感器等一系列微电子芯片与器件,和嵌入在存储器中的微型操作系统、控制应用软件组成,共同实现诸如实时控制、监视、管理、移动计算、数据处理等各种自动化处理任务。嵌入式系统以应用为中心,以微电子技术、控制技术、计算机技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件与硬件可剪裁,以此满足系统对功能、成本、体积和功耗等要求。最简单的嵌入式系统仅有执行单一功能的控制能力,比如说单片机的应用,在唯一的ROM 中仅有实现单一功能控制程序,无微型操作系统。复杂的嵌入式系统,例如个人数字助理(PDA)、手持电脑(HPC)等,具有与PC几乎一样的功能。实质上与PC的区别仅仅是将微型操作系统与应用软件嵌入在ROM、RAM 和/或FLASH存储器中,而不是存贮于磁盘等载体中。很多复杂的嵌入式系统又是由若干个小型嵌入式系统组成的。 近些年来,随着以计算机技术,通讯技术为主的信息技术的快速发展和Internet 的广泛应用,传统的控制学科正在发生变革,出现了许多新的生长点。伴随而来的一个现象是控制专业的相当多的学生在毕业后进入了计算机,通讯行业,以致有人说学控制没有用,自动化专业可以取消了。这些情况的出现使我们控制教育工作者反复思考,传统的控制应如何拓宽它的领域?控制专业应该教什么才使学生感到有用?流行的嵌入式操作系统可以分为两类:一类是从运行在个人电脑上的操作系统向下移植到嵌入式系统中,形成的嵌入式操作系统,如微软公司的Windows CE及其新版本,SUN公司的Java操作系统,朗讯科技公司的Inferno,嵌入式Linux等。这类系统经过个人电脑或高性能计算机等产品的长期运行考验,技术日趋成熟,其相关的标准和软件开发方式已被用户普遍接受,同时积累了丰富的开发工具和应用软件资源。 另一类是实时操作系统,如WindRiver 公司的VxWorks,ISI 的pSOS,QNX系统软件公司的QNX,ATI 的Nucleus,中国科学院凯思集团的Hopen嵌入式操作系统等,这类产品在操作系统的结构和实现上都针对所面向的应用领域,对实时性高可靠性等进行了精巧的设计,而且提供了独立而完备的系统开发和测试工具,较多地应用在军用产品和工业控制等领域中。Linux 是90年代以来逐渐成熟的一个开放源代码的操作系统。PC机上的Linux 版本在全球数以百万计爱好者的合力开发下,得到了非常迅速的发展。90 年代末uClinux,RTLinux 等相继推出,在嵌入式领域得到了广泛的关注,它拥有大批的程序员和现成的应用程序,是研究开发工作的宝贵资源。 一、嵌入式软件开发流程 1.1 嵌入式系统开发概述 由嵌入式系统本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别。嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发3大部分,其总体流程图如图1.1所示。

嵌入式软件开发入门教程

C语言是嵌入式软件开发人员必须熟练掌握的编程语言。作为C语言的初学者重点掌握基本数据类型、复合数据类型、流程控制、数组、指针、函数这几方面的基本知识。本人建议通过观看视频教学的方式进行学习,这样既快速又通俗易懂,当然前提是必须找到优质的教学视频资源。此外,可以配合入门书籍谭浩强的《C语言程序设计》进行学习。如果想深入的学习可以参考美国人写的人民邮电出版社出版的《C Primer Plus》。 方法/步骤2: C语言的磨炼 掌握了基本的C语言语法以后并不代表我们就学会了C语言,关键是如何灵活的去运用。我们可以练习编写C语言学习书籍的课后习题或者在网站上搜索C语言笔试题库进行练习。也可以百度寻找经典的C 语言编程案例进行学习。总之,就是将C语言运用的越熟练越好。至于开发环境可以选择VC++ 6.0 或者linux。 方法/步骤3: 硬件电路基础

嵌入式软件工程师还必须懂一些硬件电路的基本知识。当然,对于刚入门的软件开发人员没必要非常精通电路技术,熟悉基本的电子元器件的功能即可。例如,电阻、电容、电感的作用以及符号,三极管、MOS管导通截止的条件,微处理器、晶振的基本概念等。至于,以上这些基本知识我们可以通过童诗白的第四版《模拟电子技术基础》和网上查阅的资料进行学习。 方法/步骤4: 如何看懂原理图 作为嵌入式软件开发人员我们经常会和硬件打交道,我们的程序最终会被烧录到微处理器内部运行。所以,我们必须要会看硬件原理图,看懂之后才知道如何写程序。首先,我们要知道嵌入式硬件最小系统的组成部分,包括电源电路、晶振、微处理器、复位电路。然后以微处理器为中心向四周查看,主要看我们可以操纵的外设资源。以上知识的学习我们不妨经常浏览一下某些知名IT网站其他人上传的经典原理图。 方法/步骤5: 基本外设知识

嵌入式系统软件开发和设计流程复习课程

* 本文由hquwgz贡献 ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 嵌入式系统及应用 第九章嵌入式系统软件的开发 主要内容 嵌入式软件开发工具嵌入式系统开发模式实时软件分析设计方法 第一节嵌入式软件开发工具 嵌入式软件开发工具的分类嵌入式软件的交叉开发环境嵌入式软件实现阶段的开发过程嵌入式软件开发工具的发展趋势 / 嵌入式软件开发工具 “工欲善其事,必先利其器”嵌入式软件开发工具的集成度和可用性将直接关系到嵌入式系统的开发效率。 嵌入式软件开发工具的分类 嵌入式软件开发阶段 嵌入式软件开发工具的分类 根据不同的阶段,嵌入式软件开发工具可以分为: 需求分析工具(Requirement Analysis Tools)软件设计工具(Software Design Tools) 编码、调试工具(Coding Tools) 测试工具(Testing Tools) 配置管理工具、维护工具等 Rational Rose RealTime ObjectGeode Rhapsody TAU Tornado LambdaTOOL pRISM+ Spectra Win CE Platform Builder CodeWarrior Xray Debugger Logiscope CodeTEST … Phases Requirement Analysis Software Design Coding Test Release 主要嵌入式软件开发工具产品 嵌入式软件开发工具的分类 嵌入式软件的开发可以分为以下几种: 编写简单的板级测试软件,主要是辅助硬件的调试开发基本的驱动程序开发特定嵌入式操作系统的驱动程序(板级支持包)开发嵌入式系统软件,如:嵌入式操作系统等开发应用软件 嵌入式软件开发工具的分类 从以上嵌入式软件开发分类来看,嵌入式软件开发工具可以分为: 与嵌入式OS相关的开发工具,用于开发: ` 基于嵌入式OS的应用部分驱动程序等 与嵌入式OS无关的开发工具,用于开发: 基本的驱动程序辅助硬件调试程序系统软件等 嵌入式软件的交叉开发环境 交叉开发环境是指用于嵌入式软件开发的所有工具软件的集合,一般包括: 文本编辑器交叉编译器交叉调试器仿真器下载器等 交叉开发环境由宿主机和目标机组成,宿主机与目标机之间在物理连接的基础上建立起逻辑连接。 运行平台Target ]

嵌入式软件开发流程

.嵌入式软件开发流程

————————————————————————————————作者:————————————————————————————————日期:

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

嵌入式系统完整开发方案学习资料

嵌入式系统完整开发 方案

本文提纲 嵌入式系统完整解决方案 一、前言:简单介绍嵌入式技术的飞速发展以及作为嵌入式领域老牌劲旅的旋极 公司在这方面所提供的完整解决方案; 二、由美国ATI公司生产的Nucleus操作系统特点及其优势; 三、根据用户所选用的CPU的不同,编译器有多种不同的选择:Paradigm开发 工具、CAD-UL开发工具,ARM公司的SDT2.5X 和ADS1.X,GreenHill 编译器; 四、嵌入式开发中,代码的调试也是重要的一步,因此必须选择好的调试工具才 能生产出好的软件,通常的调试手段有三种:ICE、ICD和MONITOR,我们向大家推荐由德国Lauterbach公司生产的Trace32-ICE/ICD; 五、用户需要RTOS厂商提供原型工具,以便可以在主机上来仿真目标软件环 境; 六、最后举例说明基于ARM/MIPS的开发方案。

嵌入式系统完整开发方案 xx旋极信息技术有限公司 在嵌入式技术飞速发展的今天,嵌入式产品已经出现在社会的各个领域,包括航空、航天、军事、仪表、工业控制及家庭消费等。全球每年要消耗掉30亿颗嵌入式微处理器,嵌入式系统带来的工业年产值已经超过了1万亿美元。而在这些嵌入式应用中,大多采用了嵌入式实时多任务操作系统(RTOS)。 早期的嵌入式应用程序都是在没有操作系统支持的裸机上用汇编语言和C语言来开发,这也正是目前我国大多数嵌入式开发的工作模式。为了能够有效利用高档单片机的处理能力,现代的嵌入式产品开发大多选用RTOS作为软件的核心。这样,不仅能够把系统软件和应用软件分开处理,还可以极大地简化系统的开发过程,提高可靠性,并缩短产品上市的时间。可以说RTOS 使嵌入式软件的编写从“小生产方式”进入了“大生产方式”。 旋极公司作为国内嵌入式技术领域的老牌劲旅,从xx93年公司创建之初就致力于嵌入式技术的引进和开发。起初,只是作为国外厂商的代理,向用户提供相应的开发工具,现在,为了适应市场的要求,改变了以前的模式,从简单的提供开发工具发展到向用户提供完整的解决方案。这其中包括:操作系统(图形、网络、浏览器等)、仿真器、编译器、原型工具等产品和我们为用户提供的全方位的技术支持服务。 一、操作系统 在这里我们要向大家推荐的操作系统是Nucleus,它是美国ATI公司的产品,是为实时嵌入式应用而设计的一个抢先式多任务操作系统。其95%的代码由ANSI C语言写成,因此结构性和可移植性非常好。Nucleus操作系统的设计采用了面向对象的方法,整个软件由多个功能明确的组件构成,因此结构清晰,便于裁减和复用。 Nucleus操作系统还拥有丰富的外围模块(如下图所示),如TCP/IP网络协议栈(包括各种应用层的协议)、多种风格的图形系统(Windows和Mac风格)、基于RAM/Flash存储器的文件系统、以及一个功能可定制的Internet浏览器。

嵌入式软件开发流程

嵌入式软件开发流程

————————————————————————————————作者:————————————————————————————————日期:

嵌入式软件开发流程 一、嵌入式软件开发流程 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所示。

嵌入式软件编程规范

TRZN TRZN 嵌入式软件编程规范

1文档概述 (4) 1.1关于本文档 (4) 1.2参考文献 (4) 2排版 (5) 3注释 (9) 4标识符命名 (17) 5可读性 (23) 6变量、结构 (24) 7宏 (29) 8函数、过程 (31) 9可测性 (38) 10代码版本管理 (40) 10.1代码质量定义 (40) 10.2G IT分支定义 (40) 10.3G IT代码引入规定 (41) 10.4G IT代码C OMMIT顺序 (41) 10.5C OMMIT文件过程中的其他注意事项 (41) 11附录A –推荐编辑器的默认配置修改 (42) 11.1K EIL U V ISION5默认配置修改 (42)

1 文档概述 1.1 关于本文档 本文档规范了芜湖天人智能有限公司嵌入式软件部软件代码的书写规范和原则。 本文档仅供公司内部员工使用。 公司机密,严禁外传。 本文档中各规则的格式如下: 【规则编号】 [规则内容] [[标记]] 其中[标记]的含义如下: (必须):表示该条规则是必须遵守的。 (建议):表示该条规则是建议遵守的。 (可选)或没有标记:表示该条规则是可选择遵守的。 本文档的示例中,如有使用“//”,并非代码注释,而是文档的注释(有可能是文档中对代码注释的解释)。 1.2 参考文献 [1]高质量C++编程 [2]Effective C++ [3]More Effective C++ [4]C++ Primer [5]Thinking in C++

2 排版 ●【规则 2-1】程序块要采用缩进风格编写,缩进的空格数为4个,对齐使用空格键,不得使用TAB键。 [必须] 嵌入式软件开发的代码编辑器,推荐使用Keil uVision5,编辑器参数设置见附录A。 ●【规则 2-2】相对独立的程序块之间、变量说明之后必须加空行。[必须] 示例: ●【规则 2-3】较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操 作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。[必须] 示例: ●【规则 2-4】循环、判断等语句中若有较长的表达式或语句,则要进行适当的分行,长表达式要在低 优先级操作符处划分新行,操作符放在行尾。[必须] 示例:

嵌入式软件开发的几点个人理解

嵌入式软件开发的几点个人理解 一、软件的概念 软件,是一系列按照特定顺序组织的计算机数据和指令的集合。我们日常生活中接触最多的软件大概要算应用软件了。在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语言的表现能力和处理能力极强,不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构,它还可以直接访问内存的物理地址,进行位级别的操作。

嵌入式软件工程师经典笔试题

预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中 有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编 译器这个常数是的长整型数。 4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。 记住,第一印象很重要。 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) <= (B) (A) : (B)) 这个测试是为下面的目的而设的: 1). 标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变 为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到 要求的性能,嵌入代码经常是必须的方法。 2). 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if- then-else更优化的代码,了解这个用法是很重要的。 3). 懂得在宏中小心地把参数用括号括起来 4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事? least = MIN(*p++, b); 3. 预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种 问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是: while(1) {

嵌入式开发必须具备哪些基础知识

嵌入式开发必须具备哪些基础知识 嵌入式操作系统简介 嵌入式操作系统(EmbeddedSystem)是指以应用为中心、以计算机技术为基础,软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、硬盘、Modem等均是由嵌入式处理器控制的。 嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set TopBox)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。 为什么要学嵌入式软件开发?好处是什么? (1)目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作系统、MPEG技术、无线通信协议等),掌握这些新技术的人当然很找。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。 (2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。搞企业应用软件的IT企业,这个用户的系统搞完了,又得去搞下一个用户的,而且每个用户的需求和完成时间都得按客户要求改变,往往疲于奔命,重复劳动。相比而言,搞嵌

相关文档
最新文档