嵌入式系统软件开发和设计流程.docx
《嵌入式系统软件开发和设计流程.docx》由会员分享,可在线阅读,更多相关《嵌入式系统软件开发和设计流程.docx(23页珍藏版)》请在冰豆网上搜索。
嵌入式系统软件开发和设计流程
本文由贡献
文档可能在端浏览体验不佳。
建议您优先选择,或下载源文件到本机查看。
嵌入式系统及应用
第九章嵌入式系统软件的开发
主要内容
嵌入式软件开发工具嵌入式系统开发模式实时软件分析设计方法
第一节嵌入式软件开发工具
嵌入式软件开发工具的分类嵌入式软件的交叉开发环境嵌入式软件实现阶段的开发过程嵌入式软件开发工具的发展趋势
嵌入式软件开发工具
“工欲善其事,必先利其器”嵌入式软件开发工具的集成度和可用性将直接关系到嵌入式系统的开发效率。
嵌入式软件开发工具的分类
嵌入式软件开发阶段
嵌入式软件开发工具的分类
根据不同的阶段,嵌入式软件开发工具可以分为:
需求分析工具()软件设计工具()编码、调试工具()测试工具()配置管理工具、维护工具等
主要嵌入式软件开发工具产品
嵌入式软件开发工具的分类
嵌入式软件的开发可以分为以下几种:
编写简单的板级测试软件,主要是辅助硬件的调试开发基本的驱动程序开发特定嵌入式操作系统的驱动程序(板级支持包)开发嵌入式系统软件,如:
嵌入式操作系统等开发应用软件
嵌入式软件开发工具的分类
从以上嵌入式软件开发分类来看,嵌入式软件开发工具可以分为:
与嵌入式相关的开发工具,用于开发:
基于嵌入式的应用部分驱动程序等
与嵌入式无关的开发工具,用于开发:
基本的驱动程序辅助硬件调试程序系统软件等
嵌入式软件的交叉开发环境
交叉开发环境是指用于嵌入式软件开发的所有工具软件的集合,一般包括:
文本编辑器交叉编译器交叉调试器仿真器下载器等
交叉开发环境由宿主机和目标机组成,宿主机与目标机之间在物理连接的基础上建立起逻辑连接。
运行平台
目标机应用系统调试代理
开发平台
宿主机开发环境运行库
—应用软件—应用中间件—目标机目标机硬件
————
编辑编译连接调试
宿主机宿主机硬件
交叉开发环境
嵌入式软件的交叉开发环境
宿主机():
是用于开发嵌入式系统的计算机。
一般为机(或者工作站),具备丰富的软硬件资源,为嵌入式软件的开发提供全过程支持。
目标机():
即所开发的嵌入式系统,是嵌入式软件的运行环境,其硬件软件是为特定应用定制的。
在开发过程中,目标机端需接收和执行宿主机发出的各种命令如设置断点、读内存、写内存等,将结果返回给宿主机,配合宿主机各方面的工作。
嵌入式软件的交叉开发环境
物理连接和逻辑连接物理连接是指宿主机与目标机通过物理线路连接物理连接在一起,连接方式主要有三种:
串口以太口()方式,如、等
物理连接是逻辑连接的基础。
逻辑连接指宿主机与目标机间按某种通信协议建逻辑连接立起来的通信连接,目前逐步形成了一些通信协议的标准。
嵌入式软件实现阶段的开发过程
设计完成后,嵌入式软件的开发进入实现阶段,可分为三个步骤:
生成、调试和固化运行。
软件的生成主要是在宿主机上进行,利用各种工具完成软件的生成对应用程序的编辑、交叉编译和链接工作,生成可供调试或固化的目标程序。
调试是通过交叉调试器完成软件的调试工作。
调试完成调试后还需进行必要的测试工作。
固化运行是先用一定的工具将应用程序固化到目标机上,固化运行然后启动目标机,在没有任何工具干预的情况下应用程序能自动地启动运行。
嵌入式软件生成阶段
三个过程
源代码程序的编写编译成各个目标模块链接成可供下载调试或固化的目标程序
库文件
源程序
目标模块
可供调试/固化
编辑器
交叉编译器
交叉链接器
交叉编译
把在宿主机上编写的高级语言程序编译成可以运行在目标机上的代码,即在宿主机上能够编译生成另一种(嵌入式微处理器)上的二进制程序。
嵌入式软件的调试
交叉调试器
是指调试程序和被调试程序运行在不同机器上的调试器调试器通过某种方式能控制目标机上被调试程序的运行方式通过调试器能查看和修改目标机上的内存、寄存器以及被调试程序中的变量等
交叉调试调试器和被调试程序运行在不同的计算机上可独立运行,无需操作系统支持可独立运行,被调试程序的装载由调试器完成需要通过外部通信的方式来控制被调试程序可以直接调试不同指令集的程序
非交叉调试调试器和被调试程序运行在同一台计算机上需要操作系统的支持被调试程序的装载由专门的程序完成程序完成不需要通过外部通信的方式来控制被调试程序只能直接调试相同指令集的程序
嵌入式软件的调试
交叉调试方式
方式(非交叉)
在宿主机上编写代码反复检查代码,反复检查代码,直到编译通过,通过,生成可执行程序将程序固化(将程序固化()到目标机的非易失)性存储器(性存储器(E2、等)中、等
启动目标机运行,启动目标机运行,观察程序是否正常工作N
最早的嵌入式应用软件调试方法。
Y
在宿主机上反复检查码,查找问题根源改写代码
结束
是被固化且运行在目标机上的一段程序,负责监控目标机上被调试程序的运行,与宿主机端的调试器一起完成对应用程序的调试。
调试器与之间的通信遵循远程调试协议。
宿主机调试器
目标机监控程序(被调试)程序嵌入式硬件物理上的连接调试方式调试方式
逻辑上的连接
或其它桌或其它桌面操作系统机等硬件机等硬件
在目标机上电或复位后首先执行的就是,它对目标机进行一些必要的初始化
初始化要求的外围设备,如最基本的串口和用于内存刷新的系统计时器芯片;初始化用于下载映像的内存系统;初始化中断控制器和安装中断处理程序。
初始化自己的程序空间等待宿主机端的命令
能配合调试器完成:
程序映像下载对目标机系统内存的读写对寄存器的读写设置和清除不同类型的断点单步执行指令复位系统…等调试功能
调试过程
(1)启动目标机,监控器掌握对目标机的控制,等待和调试器建立连接;
(2)启动调试器,并和监控器建立起通信连接;(3)使用调试器将应用程序下载到目标机上的空间中;(4)使用调试器进行调试,发出各种调试命令,监控器解释并执行这些命令,通过目标机上的各种异常来获取对目标机的控制,将命令执行结果回传给调试器;(5)如果程序有问题,在调试器的帮助下定位错误;修改之后再重新编译链接并下载程序,开始新的调试,如此反复直至程序正确运行为止。
优点
1)提高调试程序的效率,缩短开发周期,
降低成本
2)简单、方便3)可扩展性强,可支持许多高级调试功能4)成本低廉,不需专门的调试硬件支持5)几乎所有的交叉调试器都支持这种方式
缺点
1)2)
需要用方法开发。
当占用时,应用程序不响应外部的中断,因此不便调试有时间特性的程序。
某些调试功能依赖于硬件的支持(如硬件断点功能)要占用目标机一定数量的资源,如、、和通信设备等资源。
调试环境不同于实际目标环境。
3)4)
5)
仿真开发方式
嵌入式应用的开发经常会遭遇缺少目标机环境、缺乏目标机芯片等资源的问题,而开发过程又不可能停止,因此自然就提出了根据不同的应用需要,利用仿真器件、仿真环境进行开发的方法。
硬件仿真开发
软件仿真开发
是一种用于替代目标机上的芯片的设备,即仿真器。
利用这种设备,目标机可以没有芯片,但目标机的可以读取设备上芯片的内容:
设备上的芯片的地址可以实时地映射到目标机的地址空间,从而仿真()目标机的。
的调试方式是一种不完全的调试方式:
设备只是为目标机提供芯片和在和间建立一条高速的通信通道,因此它经常和前面两种调试方式结合起来形成一种完备的调试方式。
的典型应用就是和的调试方式相结合。
优点目标机可以没有芯片、可以使用提供的空间且不需要用别的工具来写。
缺点目标机必须能支持外部存储空间,而且由于其通常要和配合使用,因此它拥有的所有缺点。
()是一种用于替代目标机上的设备,即在线仿真器。
它比一般的有更多的引出线,能够将内部的信号输出到被控制的目标机。
上的也可以被映射到用户的程序空间,这样即使目标机不存在的情形下也可以进行代码的调试。
连接和目标机时,一般是将目标机的取下,而将的引出线接到目标机的插槽。
用进行调试时,在端运行的调试器通过来控制目标机上运行的程序。
宿主开发平台
调试结构调试结构
目标平台
功能特点
同时支持软断点和硬件断点的设置设置各种复杂的断点和触发器实时跟踪目标程序的运行,并可实现选择性的跟踪支持“”允许用户设置“”提供“”,能在不中断被调试程序的运行下查看内存和变量即非干扰调试查询
适用于:
1)2)3)4)
调试实时的应用系统调试设备驱动程序对硬件进行功能和性能的测试实时性能分析
缺点:
1)2)
价格太昂贵,不利于团队开发所仿有限
()是芯片提供的一种调试功能(片上调试),可以认为是一种廉价的功能:
的价格只有的20%,但提供了80%的功能。
宿主机调试器
目标机
逻辑上的连接
被调试程序
或其它桌或其它桌面操作系统机等硬件机等硬件仿真器物理连接并口、并口、串口或网络接口为特定处理器而建造
接嵌入式接硬件口
针形连接器
调试结构调试结构
调试方法
1)2)3)
将的模式分为一般模式和调试模式一般模式下,从内存读取指令执行调试模式下,首先从调试端口读取指令,通过调试端口可以控制进入和退出调试模式;端的调试器可以直接向目标机发送要执行的指令,读写目标机的内存和各种寄存器,控制目标程序的运行以及完成各种复杂的调试功能。
优点
1)2)3)4)5)
不占用目标机的资源调试环境和最终的程序运行环境基本一致支持软硬断点、功能精确计量程序的执行时间提供时序分析功能
缺点
1)调试的实时性不如2)不支持非干扰调试查询3)必需具有功能
存在各种实现
?
?
()()(主流方式)()(主流方式)(主流方式)()
各种仿真器实例
边界扫描技术()
——标准测试访问接口与边界扫描结构(),已被1149.1标准所采纳,是面向用户的测试接口。
该接口一般由4个引脚组成:
测试数据输入()测试数据输出()测试时钟()测试模式选择引脚()异步测试复位引脚(,可选)
边界扫描技术()
优点
可以通过边界扫描操作测试整个板的电气连接,特别为表面贴元件提供方便各个引脚信号的采样,并可强制引脚输出用以测试外围芯片可以软件下载、执行、调试和控制,为复杂的实时跟踪调试提供路径可以进行多内核和多处理器的板级和芯片级的调试,通过串接,为芯片制造商提供芯片生产、测试的途径不占用系统资源,能够调试没有外部总线的芯片,代价非常小
边界扫描技术()
缺点
通过串口依次传递数据,速度比较慢只能进行软件断点级别的调试不能完成实时跟踪和多种事件触发等复杂调试功能
几种增强版本
芯片的实时调试方案()背景调试模式片上仿真
标准
提出一个在之上的嵌入式处理器调试的统一标准将调试开发分成四级
第一级使用的简单静态调试;第二级支持编程跟踪和实时多任务的跟踪,并允许用户用引脚作为多路复用辅助调试口;第三级包括处理器运行时的数据写入跟踪和存储器的读写跟踪;第四级增加了存储替换并触发复杂的硬件断点。
标准
通过标准可以解决以下问题
调试内部总线没有引出的处理器,如含有片内存储器的芯片传统在线仿真器无法实现的高速调试深度流水线和有片上的芯片,能够探测具体哪条指令被取指和最终执行可以稳定地进行多内核处理器的调试
交叉开发方式存在如下缺点:
硬件支持必须有目标机或评估板易使用性普通编程人员不熟悉廉价性成本高不高可移植性、可扩展性团队开发较难开发周期较长
一种软件仿真器,在宿主机上创建一个虚拟的目标机环境,再将应用系统下载到这个虚拟目标机上运行/调试。
软件仿真的对象
仿真处理器仿真外设仿真环境
软件仿真的级别
指令级仿真开发级仿真开发
用户应用编程接口目标操作系统库编辑:
C、编译、链接调试通信虚拟目标环境仿真调试代理应用系统虚拟目标硬件
宿主机应用仿真开发环境示意图应用仿真开发环境示意图
设 计
编码仿真库仿真编译
N
仿真调试
正确
Y
运行库
编译链接
下载
交叉调试固化运行
调试
固化
测试
结合了仿真的软件开发过程
运行维护
优点最大好处就是可以不用真正的目标机,可以在目标机环境并不存在的条件下开发目标机上的应用系统,并且在调试时可以利用资源提供更详细的错误诊断信息。
缺点1)和实际的运行环境差别很大
2)3)4)
设备模拟的局限性较大实时特性较差对的资源要求较高适用范围对时间特性没有严格要求、没有特殊外设、只需要验证逻辑正确的应用程序。
嵌入式软件的测试
测试工具:
能够用来辅助测试的工具,主要用来支持测试人员的工作,本身不能直接用来进行测试。
测试工具一般都是通用工具,测试人员应该根据实际情况对它们进行适当的调整。
嵌入式软件测试中经常用到的测试工具有:
内存分析工具性能分析工具覆盖分析工具缺陷跟踪工具等
嵌入式软件的测试
内存分析工具
嵌入式系统的内存资源通常是受限的,内存分析工具可以用来处理在进行动态内存分配时产生的缺陷。
当动态分配的内存被错误地引用时,产生的错误通常难以再现,出现的失效难以追踪,使用内存分析工具可以很好地检测出这类缺陷。
目前常用的内存分析工具有软件和硬件两种:
基于软件的内存分析工具可能会对代码的执行性能带来很大影响,从而影响系统的实时性;来很大影响,从而影响系统的实时性;基于硬件的内存分析工具对系统性能影响小,基于硬件的内存分析工具对系统性能影响小,但价格昂贵,并且只能在特定的环境中使用。
昂贵,并且只能在特定的环境中使用。
嵌入式软件的测试
性能分析工具
嵌入式系统的性能通常是一个非常关键的因素,开发人员一般需要对系统的某些关键代码进行优化来改进性能。
性能分析工具
可以提供有关数据,可以提供有关数据,帮助确定哪些任务消耗了过多的执行时间,了过多的执行时间,从而可以决定如何优化软件,以获得更好的时间性能。
软件,以获得更好的时间性能。
引导开发人员发现在系统调用中存在的错误以及程序结构上的缺陷。
以及程序结构上的缺陷。
嵌入式软件的测试
覆盖分析工具
在进行白盒测试时,可以使用代码覆盖分析工具追踪哪些代码被执行过分析过程一般通过插桩来完成,插桩可以是在测试环境中嵌入硬件,也可以是在可执行代码中加入软件,或者是两者的结合。
开发人员通过对分析结果进行总结,可以确定哪些代码被执行过,哪些代码被遗漏了。
目前常用的覆盖分析工具一般都提供有关功能覆盖、分支覆盖、条件覆盖等信息。
覆盖分析工具实例
测试工具实例:
逻辑分析仪
工作机理:
在不打断被测程序运行流程的基础上,对程序运行中的相关信息进行采集和分析,然后通过真实再现程序运行的逻辑流程和分析程序运行数据,帮助用户优化系统设计和解决出现的问题。
与调试工具的对比
调试器:
调试器:
照相机逻辑分析仪:
逻辑分析仪:
摄像机
测试工具实例:
逻辑分析仪
主要功能:
真实再现程序运行流程发现系统死锁及软件造成的死机发现系统内存泄漏指导对任务的合理划分指导关键路径设计与验证指导合理分配任务堆栈使用率统计指导合理设计中断服务程序
测试工具实例:
逻辑分析仪
嵌入式应用软件运行的逻辑流程
测试工具实例:
逻辑分析仪
系统堆栈使用率分析
嵌入式软件的固化运行
当调试完成之后,程序代码需要被完全烧入到目标板的非易失性存储器(如或闪存)中,并且在真实的硬件环境上运行,这个过程叫做固化。
调试环境与固化环境的区别:
代码定位不同初始化部分不同
嵌入式软件的固化运行
阶段编译链接调试环境
目标文件需要调试信息应用系统目标代码不需要应用系统目标代码不需要模块,模块,此模块已由目标板上的监控器程序实现。
监控器程序实现。
程序的所有代码段、程序的所有代码段、数据段都依次被定位到调试空间的依次被定位到调试空间的中。
宿主机上的调试器读入被调试文件,宿主机上的调试器读入被调试文件,并将其下载到目标机上的调试空间中,目标机掉电后所有信息全部丢失。
被调试程序在目标监控器的控制下运行,并与后者共享某些资源,运行,并与后者共享某些资源,如资源、资源以及通信设备如串口、网口等)资源。
(如串口、网口等)资源。
固化环境
目标文件不需要调试信息应用系统目标代码必须以应用系统目标代码必须以模块作为入口模块。
模块作为入口模块。
程序的各逻辑段按照其不同的属性分别定位到非易失性存储空间()或中。
空间()中
在宿主机上利用固化工具将可固化的应用程序写入目标机的非易失性存储器中,存储器中,目标机掉电后信息不丢失。
定位
下载
运行
程序在真实的目标硬件环境上运行
嵌入式软件的固化运行
模块:
当应用程序在真实的目标环境下运行时将首先执行该程序,它至少由系统加电时执行的代码组成。
模块的主要功能:
初始化环境,使目标机硬件到已知的状态
初始化芯片的引脚初始化系统外部控制寄存器初始化基本输入输出设备初始化,包括片选控制寄存器等执行数据拷贝
嵌入式软件开发工具发展趋势
向着开放的、集成化的方向发展具有系统设计、可视化建模、仿真和验证功能自动生成代码和文档具有更高的灵活性
第二节嵌入式系统开发模式
概述处理器及硬件开发平台的选定操作系统选定开发环境选定
嵌入式系统开发模式概述
最大特点:
软硬件综合开发。
最大特点:
软硬件综合开发。
原因:
原因:
1)嵌入式产品是软硬件的结合体软件针对硬件开发、固化,2)软件针对硬件开发、固化,不能进行任意修改
系统定义时期系统总体设计硬件设计制作
软件设计实现
软硬件集成功能性能测试符合要求
嵌入式系统开发过程
产品
系统总体设计
系统总体框架
软硬件划分
处理器选定
操作系统选定
开发环境选定
硬件设计制作
功能模块图设计硬件概要设计逻辑电路图设计硬件详细设计
设计与制作
硬件制作
测试
硬件测试
软件设计实现
软件概要设计软件详细设计软件实现软件测试
软硬件协同开发
通常的嵌入式系统开发
嵌入式软件开发嵌入式系统集成、测试、集成、测试、验证
嵌入式硬件开发
软/硬件协同开发
嵌入式软件开发
嵌入式系统协同设计、测试、协同设计、测试、验证
嵌入式硬件开发
处理器及硬件开发平台的选定
选择依据:
应用的类型及接口主频及功耗对不同类型存储器的支持封装产品生命力和厂家实力、技术支持及第三方软件的支持硬件开发平台的选择
操作系统选定
选择依据:
选择嵌入式的必要性自建、购买或使用开源软件对嵌入式操作系统的功能、性能要求与硬件平台和开发工具的关系行业标准技术支持版税或服务费
操作系统与硬件平台的关系
操作系统应支持选定的硬件平台如果不支持,需考虑移植工作
不同类型嵌入式微处理器之间的移植:
任务上下文切换、时钟、中断等同类型微处理器但不同类型硬件板之间的移植:
硬件接口及设备驱动程序
操作系统与开发工具的关系
工具是否能为基于特定操作系统的应用开发提供最大支持:
运行库与相结合提供应用工程创建和管理功能,构建基于特定操作系统的应用框架对操作系统的剪裁与配置提供高级调试功能提供配套的应用逻辑分析工具、覆盖测试工具等
开发环境及工具选定
对硬件平台的支持所使用的编程语言
汇编语言……
与嵌入式操作系统的关系
第三节实时软件分析设计方法
分析设计方法分析设计方法
分析设计方法
嵌入式实时软件系统的生存周期需求分析与说明系统设计-设计方法
数据流分析划分任务定义任务接口
任务设计模块构筑任务与系统集成
嵌入式实时软件系统的生命周期
需求分析与详细说明系统设计
任务分解,任务分解,定义任务间接口关系
任务设计
按模块方式设计每个任务,定义模块间接口按模块方式设计每个任务,
模块构筑
完成每个模块的详细设计、完成每个模块的详细设计、编码和单元测试
任务与系统集成系统测试
实例说明——机器人控制器系统机器人控制器系统
控制设备由内部控制器和外部控制面板组成控制器控制六个转并与数字轴,并与数字传感器交互作用。
传感器交互作用。
转轴和由程序转轴和由程序控制该程序由控制面板操作启动执行
手动上电运行停止断电结束
程序选择
控制面板
控制执行过程
按下“上电”按钮,系统进入了上电状态。
按下“上电”按钮,系统进入了上电状态。
上电成功后,系统进入了手动状态。
此时,上电成功后,系统进入了手动状态。
此时,操作者可以通过程序选择开关程序选择开关选择程序作者可以通过程序选择开关选择程序按下“运行”按钮,则选定的程序开始运行,按下“运行”按钮,则选定的程序开始运行,系统转为运行态。
系统转为运行态。
程序运行中如果按下“停止”程序运行中如果按下“停止”键,程序被挂起。
程序被挂起。
之后,操作者可以按下“运行”之后,操作者可以按下“运行”键,使程序恢复执行,也可按下“结束”结束程序。
复执行,也可按下“结束”键,结束程序。
按下“结束”键后,系统进入终止态。
按下“结束”键后,系统进入终止态。
当程序最终终止执行时,系统返回手动状态。
最终终止执行时,系统返回手动状态。
需求分析与说明
断电态上电通电态上电成功断电程序选择程序终止终止态手动态启动结束启动停止运行态
挂起态
状态变迁图
系统设计
系统设计说明该系统如何被分解成多个任务,如何定义任务间的关系任务划分方法——设计方法
设计方法设计方法
数据流分析:
每个数据流图都包含:
变换圈,表示系统完成的功能箭头,表示变换间的数据流动数据存储区,表示数据的存储场所数据字典,定义了数据流和数据存储区所包含的数据项
按下按钮
程序读面板输入解释程序各语句运行开始结束有效的面板输入处理面板输入动作