嵌入式系统概述
嵌入式系统和嵌入式技术
嵌入式系统:以应用为中心,以计算机技术为基础,软件、硬件可裁剪,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
嵌入式系统(IEEE定义):用于控制、监视或者辅助操作机器和设备的装置。
嵌入式系统的核心是嵌入式硬件及与之配套的嵌入式软件,硬件是支撑,软件是灵魂。嵌入式系统与计算机系统类似,也遵循冯·诺依曼体系结构,是计算机系统的拓展,用于处理一些专用任务,其采用“量体裁衣”的方式把需要的功能嵌入到各种应用系统中。
嵌入式系统应用广泛,包括工业控制、军事国防、网络通信、消费电子等。
嵌入式系统的发展是软件和硬件交替双螺旋式发展的。
嵌入式技术的发展趋势:小型化、可靠性、稳定性、高速度、实时性、智能性、实用性。
支持开发工具和操作系统:操作系统和软件包、交叉开发工具、实时多任务编程技术等。
网络化成为必然趋势:通常配备一种或多种网络通信接口,包括IEEE1394、CAN、USB、RS232/422/485、BlueTooth、IrDA、Ethernet、802.11x、Zigbee等。
高效的操作系统和算法:设备实现小尺寸、低功耗和低成本,系统内核和算法精简。
提供精巧的多媒体人机交互界面:友好的人机交互界面、人体行为感知、多元输入方式、多维触点等。
嵌入式技术的七个优先发展方向:信息物理系统、物联网拓扑结构基础研究、计算动态系统理论、传感网与嵌入式技术、物联网与智能交通、物联网信息支撑与决策、多源信息融合技术。
嵌入式系统的基本要素:硬件层面包括嵌入式处理器、各种类型存储器、模拟电路及电源、接口控制器及插接件;软件层面包括引导程序Bootloader、实时操作系统RTOS、板级支持包BSP、设备驱动Device Driver、协议栈Protocol Stack、应用程序Application。
嵌入式硬件概述
嵌入式系统的硬件系统是以嵌入式处理器为核心,配置必要的外围接口部件,其基本架构为处理器、外围电路及接口和外部设备,其中,处理器和外围电路被称为核心控制模块。
外围电路中一般应有电源模块、时钟、复位、Flash、RAM和ROM,常见的外设有USB设备、LCD、键盘等。
嵌入式处理器的特点:对实时多任务有很强的支持能力、具有功能很强的存储区保护功能、可扩展的处理器结构、功耗很低。
嵌入式处理器的分类:
嵌入式微控制器(MCU):嵌入式MCU的代表是单片机,一般用在工业和智能家电中,适合控制,其主要特点为单片化、体积小、集成度高、功耗低、成本小、稳定性高。
嵌入式DSP处理器(DSP):DSP即数字信号处理器,针对数字信号处理设计,一般用于对视频、音频和高频信号的处理,应用十分广泛,作为一种领域特定处理器,DSP拥有较完善的软硬件开发工具,结构开放,允许用户拓展模块,DSP主要的三大供货商是TI、ADI、AT&T。
嵌入式微处理器(MPU):嵌入式MPU由CPU演变而来,一般采用RISC指令集,MPU在工作温度、抗电磁干扰、可靠性上都做了增强,其主流架构有ARM、Power PC、MIPS等。
嵌入式片上系统(SoC):SoC是一种高度集成化、固件化的系统集成技术,其核心思想是要把应用电子系统集成到一个芯片上,追求包容集成器件的最大化,其典型代表是FPGA。
嵌入式软件概述
嵌入式系统的软件系统由嵌入式操作系统、支撑软件、引导程序、驱动层软件、嵌入式应用软件组成。其中,支撑软件安装于PC机上,其他软件部署在嵌入式硬件系统上。
嵌入式系统的特点:系统内核小、专用性强、系统精简和高实时性OS、高效率的设计、较长的生命周期、嵌入式软件开发的非标准化、嵌入式系统开发的交叉编译。
嵌入式操作系统主要包括嵌入式内核、嵌入式TCP/IP网络系统、嵌入式文件系统、嵌入式GUI系统和电源管理。其中嵌入式内核是基础和必备的部分
嵌入式操作系统的分类(根据应用对象):
基于窗口操作类:具有良好的人机交互接口,包括Windows CE、嵌入式Linux等。
工业和通信类:支持众多的工业通讯协议,包括VxWorks、RTLinux等。
单片机类:功能简单,包括μC/OS、CMS、iRMX等。
面向IntelNet类:支持多种联网方式和协议,包括Plam、Windows Mobile、Windows CE、ucLinux等。
实时性是与时间相关的特性。实时嵌入式操作系统是为执行特定功能而设计的,可以严格按时序执行功能,其最大特点就是程序的执行具有确定性。嵌入式操作系统根据实时性可以分为非实时操作系统和实时操作系统,实时操作系统又分为硬实时操作系统和软实时操作系统。
硬实时操作系统中如果系统在指定时间内未能实现某个确定的任务,会导致系统的全面失败,其相应时间是毫秒级或微秒级,其典型代表是VxWorks。硬实时系统的硬件需要添加专门用于时间和优先级管理的控制芯片。
软实时操作系统响应超时不会发生致命的错误,其相应时间一般是秒级或毫秒级,软实时系统的调度主要通过软件编程实现。
嵌入式操作系统按照成本也可以分为商用版本和免费版本,硬实时操作系统一般都是商用系统。商用系统的稳定性、可靠性、技术支持和售后服务都很良好,免费系统一般缺少技术支持、存在较大的不可靠因素。
嵌入式操作系统按照按软件结构可以分为循环轮询系统和事件驱动系统。
嵌入式应用层软件主要是由多个相对独立的应用任务组成,每个应用任务完成特定的工作,如I/O、计算和通信等,一般由操作系统调度各个任务。
使用任何外设都需要有驱动程序的支持。驱动层软件将系统软件和底层硬件部分进行了隔离,使底层设备舞动层序与硬件无关。驱动为上层软件提供了操作接口,上层程序只需调用驱动程序的接口,而不需理会具体的内部操作。驱动层软件一般可以分为两个部分:
硬件抽象层HAL位于操作系统内核与硬件电路之间的接口层,贴近操作系统,其目的是将硬件抽象化,提高系统可移植性。
板级支持包BSP是为上层驱动程序提供访问硬件设备寄存器的函数包,从而实现对操作系统的支持,贴近硬件设备。
嵌入式系统的开发模式
嵌入式系统开发的代码生成在PC机上完成,交叉编译、链接到目标平台上,然后将程序的代码下载到目标机指定的位置,并进行交叉调试。
交叉编译器(Cross-compiler):是一种运行在通用计算机上的、但是能够生成在另一种处理器上运行的目标代码的编译器。
交叉开发:在一台通用计算机上进行软件的编辑、编译,然后下载到嵌入式系统中运行调试。
基于ARM的嵌入式系统开发
基于ARM的嵌入式硬件开发
ARM架构由英国的ARM公司设计,ARM公司全称Advance RISC Machines Limited,该公司的业务是一个纯粹的知识产权的贩卖者,没有硬件,只有软件,只有图纸上的知识产权。
ARM微处理器的特点:
大量使用寄存器,使内部的代码和实时内核执行时间减少到最低限度,结构上采用RISC结构形式。
具有功能很强的存储区保护功能。
支持ARM(32位)和Thumb(16位)双指令集,兼容8位和16位器件。
可拓展的处理器结构,支持协处理器。
小体积、低功耗、成本低、高性能。
ARM微处理器的技术指标包括功能、字宽、处理速度、工作温度、功耗、寻址能力、工艺和电磁兼容性指标等。
ARM微处理器包括32位处理器、数十个32位通用寄存器和状态寄存器、32位桶形移位寄存器、协处理器、指令译码和控制逻辑、指令流水线。
ARM处理器的流水线技术:ARM7架构采用3级流水线,即取址-译码-执行;ARM9采用5级流水线,即取址-译码-执行-缓冲-写回;Cortex A9采用推测型8级流水线,并引入了分支预测处理。
基于ARM的嵌入式软件基础
嵌入式操作系统
ARM处理器上的操作系统的特点:
隐藏硬件细节,只提供给应用程序开发人员提供抽象的接口。
相应的应用程序具有较强的兼容性。
嵌入式内核是基础和必备的部分,不可被裁减,只能进行优化。内核通常必需的基本部件包括进程管理、进程间通信、内存管理,其他部件诸如文件系统、驱动程序、网络协议等都可以根据用户要求进行配置,进行部分内部资源的裁剪、更新。
应用程序请求操作系统服务是通过系统调用。
API(Application Programming Interface,应用程序编程接口)是一系列复杂的函数、消息和结构的结合体。
基于API的调用指在系统中有很多可以通过很多硬件或外部设备去执行的功能,这些功能的执行可以通过对操作系统或硬件预留的标准指令去执行。
基于API的开发可加快用户应用程序的开发效率,统一应用程序的开发标准,也为操作系统版本的升级带来了方便。
操作系统实现了以下功能:
为应用程序管理提供运行环境
管理系统资源
提供各种硬件终端服务所需的软件
驱动系统中存在的外设驱动程序
嵌入式中间件
- 中间件(Middleware)处于操作系统和应用程序之间,屏蔽了底层操作系统的复杂性,是程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性。目前,在一些复杂的嵌入式系统中常用的中间件有嵌入式CORBA、嵌入式JAVA和嵌入式DCOM等。
引导程序
引导程序Boot Loader是系统加电之后首先运行的一段代码,其功能是将系统的软硬件环境带到一个合适的状态,为调用操作系统的内核准备好正确的环境。它的执行过程中,主要任务是对目标机硬件初始化、建立内存空间的映射图的程序,还要对系统的个操作系统和应用程序从Flash加载到SDRAM存储器中,使系统的软硬件为运行程序做好准备。
每种嵌入式微处理器体系结构有不同的Boot Loader,即使是基于相同的体系结构的不同目标板,Boot Loader也会不同。Boot Loader通常只有几十KB的大小,其作用相当于PC机上的BIOS。
ARM处理器引入了”垫脚石“技术,它的Boot Loader分为两个阶段,它的微处理器中有一个4K的RAM,上电之后Flash的前4K内容会自动动态加载到片内的RAM中,这4K内容通常用汇编语言实现,短小精悍,这一部分引导程序会初始化硬件结构,之后进入第二阶段,将其他的引导程序从片外Flash加载到片外RAM,继续初始化其他部分,后续的引导程序长度没有限制,可以实现一些复杂功能,一般用C语言实现。
Boot Loader第一阶段完成的功能:
基本的硬件初始化:包括屏蔽所有终端、设置CPU的速度和时钟频率、RAM初始化、关闭CPU内部指令Cache和数据Cache。
为加载阶段2准备RAM空间:一般要为第二阶段准备1M的RAM空间。
拷贝阶段2到RAM中,拷贝时要确定其在Flash中的起始地址和终止地址,还有在RAM中的起始地址。
设置堆栈指针SP,一般安排在所预留RAM空间的最顶端。
跳转到阶段2的C程序入口点。
Boot Loader第二阶段完成的功能:
初始化本阶段要使用的硬件设备
检测系统内核映射
加载内核映像和根文件系统映像
设置内核的启动参数
跳转到内核映像入口并执行内核程序
系统的软件设置
更新系统(system.bin)
Boot Loader的执行过程:
Boot Loader也不是必须的,在极端的情况下,若程序可以压缩到4K以内,可以通过”垫脚石“技术直接运行。
Boot Loader在Flash中默认要从0x0000开始。(实际上Boot Loader需要从处理其初始化之后默认的PC指针处开始,ARM将PC指针初始化为0x0000。)
Boot Loader的操作模式:
下载模式:目标机中的Boot Loader通过串口或网络连接等通信手段从宿主机上下载文件,如操作系统的内核映像和根文件的映像。一般在首次安装操作系统内核和根文件系统或更新时使用下载模式,工作于这种模式下的Boot Loader会像其终端用户提供一个简单的命令行接口。
启动加载模式:这种模式是BootLoader的正常工作模式,从目标机的固体存储设备中将操作系统加载到RAM中运行,整个过程中并没有用户的介入。从最终用户实用的角度来看,Boot Loader的作用就是加载操作系统,因此在嵌入式产品发布的时候,Boot Loader必须工作在这种模式下。
现在的Boot Loader也支持调试的模式,在Boot Loader下可以进行USB端口的开启、系统文件的更新、LCD显示测试、演示程序的装载测试、键盘测试、触摸屏校准和测试、以太网地址的设置等。
NorFlash可以一阶段完成引导,NorFlash既可以固化程序也可以直接运行,可以不用RAM直接和ARM处理器后成一个系统,大大缩短了启动时间,不过NorFlash容量小,在军工领域有应用。
集成开发环境
ARM的集成开发环境有ADS/SDT、RealView MDK等ARM公司推出的开发工具和GNU ARM等开源开发工具。
嵌入式软件的测试方法:
利用指令集仿真测试:利用开发环境自带的调试程序在宿主机处理器上执行,并支持单步执行、设置断点等。在调试过程中,检查者可以查看各存储器的值和寄存器的值。
利用硬件仿真测试:使用硬件仿真器调试时间要稍长一些,程序必须要下载到仿真器的硬件中才可以进行仿真调试,反枕崎可以与系统的其他部分实时交互,其测试更准确。
将程序直接下载到目标处理器做现场测试:利用JTAG下载器将程序下载到目标处理器,周期是三种调试方式中最长的。调试时将经编译和链接好的目标代码程序下载到应用系统中后,启动系统进行实时观察,如发现错误,返回宿主机进行重新县级修改和编译下载,反复多次直到运行无误。
嵌入式操作系统
嵌入式操作系统的特点
ARM上运行的操作系统一般是实时多任务操作系统(RTOS)。
RTOS最关键的部分是实时多任务内核,它的基本功能包括任务管理、定时器管理、存储器管理、资源管理、时间管理、系统管理、消息管理、队列管理
RTOS是针对不同的处理器优化设计的高效实时多任务内核,其大部分程序由C开发,具有极大的可移植性,目前可以面向几十个系列的嵌入式处理器提供类似的API接口。
RTOS的特点:多任务、任务的事件驱动、中断与中断优先级、容错和安全。
RTOS的评价指标一般有三个:响应时间、生存时间和吞吐量。
响应时间是计算机识别一个外部事件到做出相应的时间。
生存时间是数据的有效等待时间。
吞吐量是给定时间内系统可以处理的事件总数。
任务可分为实时任务和非实时任务,实时任务可以分为事件驱动和时间驱动,事件驱动分为內部事件和外部事件,时间驱动分为绝对时间驱动和相对时间驱动。与系列时间相关时间称为同步事件,驱动的任务为同步任务;随即发生的事件称为异步事件,驱动的任务为异步任务。
ARM处理器中的异常中断优先级由高而低依次为复位、数据异常、FIQ、IRQ、预取指令异常中止、SWI或未定义指令。
ARM处理器响应中断的过程:
将程序状态寄存器CPSR的内容保存到将要执行的异常中断对应的备用程序状态寄存器SPSR。
设置CPSR中的相应位。
将引起异常指令的下一条指令地址保存到新的异常
程序进行时可使用的软硬件环境称为资源,两个以上任务同时访问的共享资源称为临界资源。
嵌入式操作系统的体系结构
嵌入式操作系统的体系结构可以分为单块结构、层次结构和客户/服务器(微内核)结构。
微内核结构的优点是提供一致的接口、可拓展性、灵活性(可伸缩)、可移植性、分布式系统支持、适用于面向对象操作系统环境。
目前的嵌入式操作系统主要采用分层和模块化相结合的DeltaCore结构。
嵌入式操作系统的功能
内核提供的基本服务是任务切换,内核的核心部分是任务管理,包括任务调度、创建任务、删除任务、挂起任务、解挂任务和设置任务优先级等。
嵌入式系统上的内存管理一般比较简单,通常不采用虚拟存储管理,而采用静态内存分配和动态内存分配相结合的管理方式。有些内核会借助MMU机制提供内存保护功能。
通信、同步和互斥机制:一般包括信号量、消息、事件、管道、异步信号和共享内存等功能,此外,嵌入式操作系统在处理这类问题时还要解决使用中出现的优先级反转问题。
中断管理一般要提供安装中断服务程序、保存中断现场、恢复中断现场、中断栈切换、终端退出时的任务调度等。
时间管理提供高精度、应用可设置的系统时钟和日历时间,系统时钟是嵌入式系统的时基,日历时间负责为与时间相关的管理工作提供参考。
任务拓展功能是在内核中设置一些Hook的调用点,在这些调用点上内核调用应用设置的、应用自己编写的扩展处理程序以扩展内核有关功能。
嵌入式TCP/IP
TCP/IP协议广泛的应用于嵌入式系统之中,嵌入式TCP/IP网络系统提供符合标准的协议栈,提供Socket编程接口。
嵌入式TCP/IP具有可裁剪、零拷贝、静态分配的特点。
嵌入式文件系统
通用文件系统应具有以下功能:
提供用户对文件操作的命令;
提供用户共享文件的机制;
管理文件的存储介质;
提供文件的存取控制机制,保障文件及文件系统的安全性;
提供文件及文件系统的备份和恢复功能;
提供对文件的加密和解密功能。
嵌入式文件系统相对比较简单,主要具有文件的存储、检索、更新等功能,一般不提供保护和加密机制。
嵌入式操作系统中的任务调度
操作系统的调度往往是基于任务的优先级(priority),CPU总是让处于就绪态的优先级最高的任务先运行。
任务优先级分为静态优先级和动态优先级。
根据何时让高优先级任务运行可以将调度分为抢占式调度机制(preemptive)和非抢占式调度机制(non-preemptive)。
非抢占式调度机制也称合作型多任务,各任务间彼此合作共享一个CPU,中断服务可以是一个高优先级的任务由挂起态变为就绪态,但中断服务程序运行之后,控制权还给原先被中断了的那个任务,知道该任务放弃了CPU的使用权时,高优先级的任务才能获得CPU的使用权。
在抢占式调度机制中,高优先级的任务一旦就绪,总能得到CPU的控制权。使用抢占式内核时,应用程序应使用可重入型函数。
可重入型函数:在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会在函数中断的时候被其他的任务重新调用,影响函数中的数据。
可重入型函数使用的是局部变量,在通常的C编译器中把局部变量分配在栈中。
嵌入式操作系统的案例
C/OS-II
C/OS全称Micro Controller Operating System,是由美国人J.Labrosse开发的实时操作系统,其成果与1992年在《Embedding System Programming》杂志上发表。
C/OS-II是一个开源的抢占式实时多任务内核,使用ANSI C编写,包含一小部分汇编语言代码。它支持从8位到64位的处理器,已移植到40余种不同架构的处理器上。
C/OS-II的特点:抢占、多任务、静态优先级、体积小(基本代码尺寸仅8.3KB)、可移植、可固化、可裁剪。
C/OS-II将进程分为5个状态:就绪Ready、运行Running、等待Wait、休眠Dormant和中断ISR。
C/OS-II内核的基本功能包括:任务管理、定时器管理、事件管理、系统管理、消息管理、信号量管理等。没有I/O管理、文件系统和网络协议。
C/OS-II的源代码文件结构:
对函数和环境的定义:PC.C
与处理器无关的部分:OS_CORE.C、OS_FLAG.C、OS_MBOX.C、OS_MEM.C、OS_MUTEX.C、OS_Q.C、OS_SEM.C、OS_TASK.C、OS_TIME.C、COS-II.C、COS-II.h
与处理器相关的部分:OS_CPU_A.S、OS_CPU_C.C、OS_CPU.H
内核库支持文件:INCLUDE.H
配置文件:OS_CFG.H
COS-II的启动函数如下
1
2
3
4
5void main(void) {
OSInit(); // 初始化系统
OSTaskCreate(); // 创建至少一个任务
OSStart(); // 开始多任务调度,永不返回
}COS-II的不足之处:
只有多任务调度的简单内核;
内存管理过于简单,几乎没有动态内存管理功能;
文件系统和图形界面需要外挂;
对于设备驱动程序没有专门统一的接口。
嵌入式Linux
嵌入式Linux的特点:
自由软件;
支持数十种芯片,具有一定稳定性,各种性能的升级能力,开发更容易;
提供标准API,能够与第三方软硬件沟通;
开放源代码,不存在黑箱技术;
内核小、功能强大、运行稳定、效率高;
模块化设计,易于定制裁剪;
有大量且不断增加的开发工具和开发环境;
沿用UNIX的发展方式,遵循国际标准;
拥有完整的网络支持;
提供了诸多图像处理、文件管理及多任务支持的功能。
一个可用的Linux系统包括内核和应用程序两个部分。应用程序包括系统的部分初始化、基本的人机界面和必要的命令。内核为应用程序提供了一个虚拟的硬件平台,已统一的方式对资源进行访问,并且透明的支持多任务,它包括6个部分:进程调度、内存管理、文件管理、进程间通信、网络和驱动程序。、
硬实时的嵌入式Linux有RT-Linux、KURT-Linux;软实时的嵌入式Linux有uCLinux、Mizi Linux。
RT-Linux采用双内核机构,将Linux的任务优先级设为实时内核中最低的一个,而所有的实时任务优先级均高于Linux内核任务。即存在实时任务时必须先运行实时任务,之后才会运行Linux内核中的任务。其原理图如下:
Mizi Linux由韩国MIZI公司开发,是一款开放源代码的免费嵌入式操作系统,其主要特点是支持MMU。
uCLinux是针对没有MMU的处理器设计的,能够固化在容量只有几百KB或几MB的处理器芯片上,uCLinux不支持虚存,对内存的访问是直接的,所有程序中的地址都是实际的物理地址。
uCLinux包含Linux常用的API,内核小于512KB,保留了Linux原有的高稳定性、强大的网络功能和卓越的文件系统等特点,支持众多架构的芯片,并可以通过RT-Linux的补丁增强系统的实时性。
Windows系列EOS
Windows Mobile针对移动手持设备开发,继承了Windows良好的操作界面,并拓展了移动设备上的特定服务。支持该系统的智能手机多采用英特尔嵌入式处理器,主频、硬件资源要求较高。
Windows CE是微软开发的嵌入式软实时操作系统,其核心全部由C语言开发,小巧精简,提供内存管理、抢占多任务和中断处理等功能。
Windows CE高度模块化,适合作为可裁剪的32位嵌入式操作系统,其内核至少需要200KB的ROM。
Windows CE支持256个任务优先级,提供了Windows程序员熟悉的各种开发环境,例如,Microsoft Win32 API、ActiveX控件、消息队列、COM接口、ATL和MFC,极大的方便了开发人员从其他Windows平台移植各种应用程序。
VxWorks
VxWorks是美国WindRiver公司与1983年提出的一种面向无MMU设备的商用嵌入式硬实时操作系统,具有良好的持续发展能力、高性能的内核和有好的用户开发环境。
VxWorks采用了模块化的设计,由400多个相对独立的目标模块组成。其架构如图:
附:关于Android开发
Android系统的开发工具
- Android系统上的开发一般需要Android SDK、IDE和Android模拟器和其他辅助开发的工具。
- Android SDK:Android SDK为开发者提供了开发安卓程序所必需的API库和构建、测试和调试Android程序所必需的开发工具。Android SDK中包括SDK Tools、SDK Platforms-tools、Build-tools等公共的平台工具和构建工具、Android兼容库、相关驱动以及Android各API版本的下的SDK Platform、在各个平台(智能手机、电视和可穿戴设备)下的模拟器镜像、API源码、文档及示例等。
- IDE的选择可以有很多种,一般比较常用的有Android Studio、Eclipse和JetBrains IDEA等,这些IDE在经过适当的配置并安装一些插件后可以极大地提升开发效率。
- 开发语言的选择也是比较多样的,经典的Android开发语言是Java,近年来Kotlin成为了另一种比较主流的开发语言。同时,随着“大前端”的发展,各种基于JavaScript语言的跨平台开发框架也提供了生成Android原生App的方式,典型代表为基于React的React Native。在这一趋势的基础上,Google推出了Dart语言及开发框架Flutter也是近两年备受关注的Android开发语言。
- 模拟器的选择可以使用IDE集成的模拟器或Genymotion等第三方模拟器,Android模拟器可以在进行真机验证之前进行在开发环境上的模拟验证。
- 辅助的开发工具包括版本控制工具、分析工具、生成工具、UI设计工具等,这些工具可以方便开发者的开发过程。
Android App的开发流程
- Android App的开发流程可以划分为四个阶段:配置、开发、调试和测试、发布。配置阶段的主要工作是准备开发环境、虚拟测试环境和真机测试环境;开发阶段的工作是创建工程、编写源程序和资源文件;调试阶段通过Gradle打包成APK合适的文件,在虚拟机和真机中不断调试并优化程序;当程序无误之后可以将程序的release版本发布到互联网上。