为了缩短开发周期,软硬件设计开发往往是并行的。
嵌入式开发流程当前主要包括系统需求分析(要求有严格规范的技术要求)、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最终得到最终产品。
- 系统需求分析。确定设计任务和设计目标,并提炼出设计规格说明书,作为正式设计指导和验收的标准。系统的需求一般分功能性需求和非功能性需求两方面。功能性需求是系统的基本功能,如输入输出信号、操作方式等;非功能需求包括系统性能、成本、功耗、体积、重量等因素。
- 体系结构设计。描述系统如何实现所述的功能和非功能需求,包括对硬件、软件和执行装置的功能划分,以及系统的软件、硬件选型等。一个好的体系结构是设计成功与否的关键。在这一步往往需要选定主要的芯片、确定RTOS、确定编程语言、选择开发环境(编程语言和开发环境在确定RTOS时也就跟着确定了)、确定测试工具和其他辅助设备。
- 硬件/软件协同设计。基于体系结构,对系统的软件、硬件进行详细设计。为了缩短产品开发周期,设计往往是并行的。嵌入式系统设计的工作大部分都集中在软件设计上,采用面向对象技术、软件组件技术、模块化设计是现代软件工程经常采用的方法。
- 系统集成。把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进单元设计过程中的错误。
- 系统测试。对设计好的系统进行测试,看其是否满足规格说明书中给定的功能要求。嵌入式系统开发模式最大特点是软件、硬件综合开发。这是因为嵌入式产品是软硬件的结合体,软件针对硬件开发、固化、不可修改。
嵌入式系统的设计与开发大部分工作都集中在软件方面。嵌入式系统在开发过程一般都
采用 “宿主机/目标板”开发模式,即利用宿主机(PC机)上丰富的软硬件资源及良好的开发环境和调试工具来开发目标板上的软件,然后通过交叉编译环境生成目标代码和可执行文件,通过串口/USB/以太网等方式下载到目标板上,利用交叉调试器在监控程序运行,实时分析,最后,将程序下载固化到目标机上,完成整个开发过程。
整个软件开发过程基本包括以下几个步骤:
- 源代码编写:编写源C/C++及汇编程序;
- 程序编译:通过专用编译器编译程序;
- 软件仿真调试:在SDK中仿真软件运行情况;
- 程序下载:通过JTAG、USB、UART方式下载到目标板上;
- 软硬件测试、调试:通过JTAG等方式联合调试程序;
- 下载固化:程序无误,下载到产品上生产。
嵌入式系统的调试有四种基本方法:
- 模拟调试(Simulator):直接在主机上进行调试,使用软件模拟目标运行环境,主要进行语法和逻辑上的调试。
- 软件调试(Debugger):主机和目标板通过某种接口(通常是串口)连接,主机上提供调试界面,待调试软件下载到目标板上运行。这种方式的先决条件是要在主机和目标板之间建立通信联系。
- BDM/JTAG调试(BDM/JTAG Debugger):这种方式调试除了主机和目标板之外,还需要一个额外的调试装置,该装置与目标板通过BDM/JTAG等调试接口相连,与主机通过串口、并口、网口或USB相连。待调试的软件通过该调试装置下载到目标板上运行。
- 全仿真调试(Emulator):仿真器完全或部分取代目标板上的部件(例如机械部分或MCU),因而目标系统对开发者来说完全是透明的、可控的。由于仿真器自成体系,调试时既可以连接也可以不连接(stand alone)目标板。