嵌入式Linux应用软件开发流程
- 格式:docx
- 大小:25.37 KB
- 文档页数:8
嵌入式Linux系统开发与应用实践嵌入式Linux系统是指将Linux操作系统嵌入到应用程序中,使其静态化运行。
嵌入式Linux系统可以在嵌入式设备中进行应用开发和应用实践。
随着人工智能技术的快速发展,嵌入式Linux 系统为嵌入式设备的应用带来了新的可能性。
本文将深入探讨嵌入式Linux系统的开发与应用实践。
一、嵌入式Linux系统的优点嵌入式Linux系统的优点主要有如下几个方面:1. 开放性:Linux是开放源代码的操作系统,用户可以通过自由软件协议获取开放源代码,进行修改和自定义。
这意味着随着Linux的发展,用户可以让其应用于更多应用场景,定制化程度更高。
2. 稳定性:Linux操作系统稳定性高,能够长时间稳定运行且系统崩溃的概率非常小。
3. 灵活性:嵌入式Linux系统灵活性非常高,用户可以根据具体设备进行开发和部署。
同时,也能够为设备提供更高的安全和性能支持。
4. 海量资源:Linux作为走在开源世界前沿的操作系统,具有海量的资源和社区支持。
用户可以通过社区开放的技术和资源,为设备提供更多的功能。
二、嵌入式Linux系统的应用实践嵌入式Linux系统包括了从裸机应用到成型系统的全过程,对于嵌入式应用开发来说是非常有益的。
嵌入式Linux系统的应用实践主要有以下几个步骤:1. 内核的选择和构建:嵌入式设备的内核和框架选择很重要,需要仔细考虑选用哪一种内核或框架,需要根据具体的应用进行选择。
然后需要构建一个内核。
2. 驱动的集成和调试:驱动是嵌入式设备重要的组成部分,需要根据之前构建的内核进行驱动的集成和调试。
3. 应用程序编写:应用层开发是系统开发的最终目的,需要根据应用的场景进行编写,对于嵌入式Linux系统的应用编写,需要进行编译和交叉编程等步骤。
4. 应用部署:最后一步是将应用部署到嵌入式设备中,进行运行和测试。
需要注意的是在遇到问题时,需要快速定位问题,分析原因,并解决问题。
嵌入式linux串口应用程序编写流程嵌入式Linux系统提供了丰富的串口接口,可以通过串口与其他设备进行通信,这为开发嵌入式系统提供了很多可能性。
下面是编写嵌入式Linux串口应用程序的流程:1. 确定串口设备:首先要确定要使用的串口设备,可以使用命令`ls /dev/tty*`来查看系统中可用的串口设备列表。
根据需要选择合适的串口设备。
2. 打开串口设备:在Linux系统中,使用文件的方式来操作串口设备。
可以使用C语言中的open函数来打开串口设备文件,并返回串口设备的文件描述符。
例如:`int serial_fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);`。
其中,`O_RDWR`表示以读写模式打开串口设备,`O_NOCTTY`表示打开设备后不会成为该进程的控制终端,`O_NDELAY`表示非阻塞模式。
3. 配置串口参数:打开串口设备后,需要配置串口参数,包括波特率、数据位、停止位、校验位等。
可以使用C语言中的termios库来进行串口参数的配置。
例如:```cstruct termios serial_config;tcgetattr(serial_fd, &serial_config);cfsetispeed(&serial_config, B115200);cfsetospeed(&serial_config, B115200);serial_config.c_cflag |= CS8;serial_config.c_cflag &= ~PARENB;serial_config.c_cflag &= ~CSTOPB;tcsetattr(serial_fd, TCSANOW, &serial_config);```上述代码将波特率设置为115200,数据位设置为8位,无校验位,一个停止位。
嵌入式linux系统开发标准教程嵌入式Linux系统开发是一门非常重要的技术,它在嵌入式设备、物联网和智能家居等领域中得到广泛应用。
本文将介绍嵌入式Linux系统开发的标准教程,帮助读者了解该技术的基本原理和常用的开发工具。
一、嵌入式Linux系统开发的基本原理嵌入式Linux系统开发是指将Linux操作系统移植到嵌入式设备中,并针对特定的应用领域进行定制开发。
它与传统的桌面Linux系统有很大的区别,主要体现在以下几个方面:1. 硬件平台的选择:嵌入式设备通常采用ARM架构或者其他低功耗的处理器架构,而不是传统的x86架构。
因此,在进行嵌入式Linux系统开发时,需要根据具体的处理器架构进行相应的移植和优化。
2. 精简的内核:由于嵌入式设备的资源有限,为了提高系统性能和节省资源,嵌入式Linux系统通常会精简内核。
这需要对Linux内核的源代码进行裁剪和优化,以去除不必要的模块和功能,并保留对应用需求的必要功能。
3. 定制化的驱动程序和应用程序:嵌入式设备通常需要与各种外设进行交互,因此需要编写相应的驱动程序。
此外,根据具体的应用需求,还需要定制相关的应用程序和用户界面。
二、嵌入式Linux系统开发的工具嵌入式Linux系统开发需要使用一些常用的工具,下面是一些常用的工具和其功能的介绍:1. 交叉编译工具链:由于嵌入式设备和开发主机的处理器架构不同,无法直接在开发主机上编译和运行目标代码。
因此,需要使用交叉编译工具链,在开发主机上生成适用于目标设备的可执行文件。
2. 调试工具:在嵌入式Linux系统开发过程中,调试是非常重要的一环。
常用的调试工具包括GDB(GNU调试器)和strace(系统调用跟踪工具),它们可以帮助开发人员追踪程序的执行过程和定位错误。
3. 文件系统工具:嵌入式设备的存储资源有限,需要使用文件系统来组织和管理存储的数据。
常用的文件系统工具包括mkfs(创建文件系统)、mount(挂载文件系统)以及文件传输工具(如scp和rsync)等。
petalinux-build -c u-boot的编译流程概述说明1. 引言1.1 概述本文旨在介绍petalinux-build -c u-boot命令的编译流程。
Petalinux是一款面向嵌入式Linux开发的工具,而U-Boot是一款应用于嵌入式系统的开源引导加载程序。
通过深入了解这两个工具,并对petalinux-build -c u-boot命令进行详细分析,我们可以更好地理解和掌握其编译流程。
1.2 文章结构本文主要分为五个部分:引言、编译流程概述、编译流程详解、注意事项和常见问题解答以及结论。
在引言中,我们将简要介绍文章的内容和目的。
接下来,在第二部分中,我们将概述Petalinux和U-Boot,并重点介绍petalinux-build -c u-boot命令的作用。
第三部分将详细解释编译流程,并包括准备工作、设置环境变量和构建U-Boot镜像等步骤。
在第四部分,我们将讨论常见错误和解决方法,提供编译优化技巧和建议,并指出其他注意事项。
最后,在结论部分,我们将对编译流程进行总结,并展望未来发展。
1.3 目的本文旨在帮助读者全面了解petalinux-build -c u-boot命令的编译流程。
通过讲解Petalinux和U-Boot的基本知识以及具体的编译步骤,读者可以深入了解如何正确地使用该命令,并解决在编译过程中可能遇到的问题。
同时,本文还将提供一些实用的编译优化技巧和建议,以帮助读者提高工作效率。
希望通过本文的阅读,读者能够更好地掌握petalinux-build -c u-boot命令的使用技巧,并在嵌入式Linux开发中取得更好的成果。
2. 编译流程概述:2.1 Petalinux简介:Petalinux是由Xilinx开发的一种嵌入式Linux开发工具套件,用于构建、定制和部署基于Xilinx处理器系统的嵌入式Linux系统。
它提供了一系列工具和文档,方便开发人员进行Linux镜像的配置、编译和调试。
Tina Linux系统软件开发指南版本号:1.5发布日期:2021.04.17版本号日期制/修订人内容描述0.12019.02.20AWA1225创建1.02019.02.27AWA1225正式发布1.12019.06.16AWA1046补充软件包安装,烧录工具及分区说明1.22019.06.19AWA1046更新文档说明和目录结构说明,补充细节1.32020.12.31AWA1610增加arisc代码编译描述1.42021.02.06AWA1610arisc代码编译策略变更1.52021.04.17AWA0985完善部分章节描述1概述11.1编写目的 (1)1.2适用范围 (1)1.3相关人员 (1)2Tina系统资料22.1概述 (2)2.2文档列表 (2)3Tina系统概述33.1概述 (3)3.2系统框图 (3)3.3开发流程 (4)4Tina开发环境64.1概述 (6)4.2编译环境搭建 (6)4.2.1开发主机配置 (6)4.2.2软件包配置 (6)5Tina系统获取85.1概述 (8)5.2SDK获取 (8)5.3SDK结构 (8)5.3.1build目录 (8)5.3.2config目录 (9)5.3.3devices目录 (9)5.3.4docs目录 (10)5.3.5lichee目录 (10)5.3.6package目录 (10)5.3.7prebuilt目录 (11)5.3.8scripts目录 (11)5.3.9target目录 (11)5.3.10toolchain目录 (12)5.3.11tools目录 (12)5.3.12out目录 (12)5.4SDK更新 (13)5.5问题反馈 (13)6Tina编译打包156.1概述 (15)6.2编译系统 (15)6.3编译boot (15)6.4编译内核 (15)6.5编译arisc (16)6.6重编应用 (17)6.6.1方法一 (17)6.6.2方法二 (17)6.7其他命令 (18)7Tina系统烧写197.1概述 (19)7.2烧录工具 (19)7.3进入烧录模式 (19)8Tina uboot定制开发218.1概述 (21)8.2代码路径 (21)8.3uboot功能 (21)8.4uboot配置 (22)8.4.1defconfig方式 (22)8.4.1.1defconfig配置步骤 (22)8.4.1.2defconfig配置宏介绍 (22)8.4.2menuconfig方式 (23)8.5uboot编译 (24)8.5.1方法一 (24)8.5.2方法二 (25)8.6uboot的配置 (25)8.6.1sys_config配置 (25)8.6.1.1sys_config.fex结构介绍 (25)8.6.1.2sys_config.fex配置实例 (25)8.6.1.3sys_config.fex解析流程 (26)8.6.2环境变量配置 (26)8.6.2.1环境变量作用 (27)8.6.2.2环境变量配置示例介绍 (27)8.6.3sys_partition.fex分区配置 (28)8.6.3.1sys_partition.fex分区配置介绍 (28)9Tina kernel定制开发299.1概述 (29)9.2代码路径 (29)9.3模块开发文档 (29)9.4内核配置 (29)10Tina系统定制开发3110.1应用移植 (31)10.1.1Makefile范例 (31)10.1.2自启动设置 (33)10.1.2.1调用自启动脚本 (33)10.1.2.2sysV格式脚本 (33)10.1.2.3procd格式脚本 (34)10.2应用调试 (35)10.3应用编译 (36)10.4应用安装 (36)10.5分区与挂载 (37)3-1Tina Linux系统框图 (3)3-2Tina Linux系统开发流程 (4)8-1defconfig配置图 (22)8-2defconfig基本宏定义介绍图 (23)8-3menuconfig配置菜单图 (24)8-4sysconfig.fex基本结构图 (25)8-5platform配置图 (26)8-6target配置图 (26)8-7uart_para配置图 (26)8-8uboot启动调用环境变量方式图 (27)8-9kernel cmdline图 (28)9-1TinaLinux内核配置菜单 (30)10-1应用配置主界面 (35)10-2软件包所在界面 (36)1.1编写目的本文档作为Allwinner Tina Linux系统平台开发指南,旨在帮助软件开发工程师、技术支持工程师快速上手,熟悉Tina Linux系统的开发及调试流程。
嵌入式产品开发流程嵌入式产品是指集成了微处理器、存储器、外设接口等硬件及其应用软件的小型电器和设备,它们的应用范围非常广泛,如智能家居、物联网、智能医疗、智能交通等。
嵌入式产品的开发流程一般包括需求分析、硬件设计、软件设计、样机制作、测试和量产等步骤。
下面将对每个步骤进行详细介绍。
1. 需求分析需求分析是嵌入式产品开发流程中的第一步。
开发者需要对产品的功能、性能、外观、成本、用户需求等进行分析,明确产品的目标和定位。
在这个过程中,需求工程师需要与客户、市场营销人员、产品经理等进行充分的沟通和交流,收集各方面的要求和意见,明确产品的功能和性能指标,确定产品的基本框架。
2. 硬件设计硬件设计是嵌入式产品开发流程中的第二步。
在需求分析的基础上,硬件工程师需要进行电路设计、PCB设计、原理图绘制等工作,选择合适的芯片、器件和材料,完成电路板和外设的设计,保证产品的稳定性和可靠性。
此外,硬件工程师还需要与软件工程师密切合作,完成硬件和软件的接口设计,确保两者的兼容性和协同工作。
3. 软件设计软件设计是嵌入式产品开发流程中的第三步。
在硬件设计的基础上,软件工程师需要进行嵌入式软件的设计和开发,包括系统架构设计、功能模块设计、算法设计、代码编写等。
软件工程师需要熟悉各种嵌入式操作系统和编程语言,如uC/OS、Linux、C、C++等,根据产品的需求和硬件的特性,选用合适的开发工具和编程方法,保证软件的稳定性和可靠性。
4. 样机制作样机制作是嵌入式产品开发流程中的第四步。
在硬件和软件设计完成后,需要进行样机的制作和调试。
样机是产品开发的重要里程碑,它可以验证产品的功能和性能,检测产品的稳定性和可靠性。
在样机制作过程中,需要进行电路板的组装、软件的烧录、外设的接口调试等工作,确保产品的整体质量和性能指标。
5. 测试测试是嵌入式产品开发流程中的第五步。
在样机制作完成后,需要进行各种测试和验证,包括功能测试、性能测试、可靠性测试、环境测试等。
嵌入式linux应用开发完全手册
嵌入式Linux应用开发完全手册
一、前期准备
1. 分析终端设备环境—定制Linux发行版
要统计终端设备的处理性能、运行时可用资源和可用设备,以此确定可用的执行环境和硬件需求,确定适合终端设备构建Linux内核固件形式的Linux发行版本。
2. 开发环境搭建—构建buildroot环境
为了能从源码构建出符合终端设备和应用程序需求的Linux系统,需要构建出环境,可以编译内核以及外围软件在Linux下构建程序,以此为开发软件准备编译运行环境,可以使用Busybox和Buildroot等。
二、应用软件开发
1. 软件框架设计—工程预处理
软件框架设计是应用软件的基础,根据软件的功能和硬件构建环境,进行容量分析和形态化,分析设计软件工程框架,优化框架,将多个软件模块编译联编成一个完整的整体,构建业务功能交互流程,提高软件的执行效率和体验度。
2. 软件编译—工程链接编译
针对开发语言环境,例如Java或C、C+。
1、课程简介信盈达Linux开发课程从零基础起步,由浅入深,全面系统的介绍了Linux系统从应用开发、系统移植、再到Linux驱动开发的全过程。
同时,融合了国内Linux培训和嵌入式培训的精华课程,并加入最新的Linux 4.x驱动开发,是国内首创的全套Linux驱动开发课程,成为国内大学生学习Linux嵌入式开发的入门首选!2018信盈达嵌入式课程全新升级,采用六核A53/A72(RK3399)全新平台进行教学。
通过全套课程的学习,完全可以从入门到精通,进入到“钱途”无限的Linux嵌入式开发。
2、上课方式理论20%+实践40%+项目40%3、课程大纲第一阶段:Linux基础C程序结构、编译原理、基本数据类型、输入、输出函数、linux程序设计,编译器、Makefile 学习、Shell编程第二阶段: C程序设计C程序结构、编译原理、基本数据类型、运算符、表达式、流程控制、关键字、函数、数组,排序算法、精讲指针、预处理、结构体、共用体、枚举型、线性结构(链表)、堆栈应用和举例、栈与递归的实现、阶段项目实战第三阶段:Linux 高级系统编程创建和使用库、文件和目录的维护、扫描目录、基于文件描述符的文件操作(非缓冲)、多进程、多进程,进程间通信、多线程编程、Socket网络编程、阶段项目实战、IO多路复用第四阶段:Cortex-M4/7 驱动开发Cortex-M4 介绍,开发环境搭建,GPIO模块实战、STM32F407 UART模块实战、STM32F407 中断模块实战、STM32F10X DMA模块、基本&通用定时器定时功能软件设计、ADC模数转换模块、STM32F407 RTC和系统定时器模块实战、STM32F407 IIC模块实战、STM32F407 SPI模块实战、TFTLCD模块实战、触摸屏模块实训、GUI、UCOS-II、环境检测项目实战、Cortex-M4高级进阶模块实训(CanBus总线、DAC数模转换、高级定时器、看门狗定时器、FSMC文件系统等)、热门项目模块实战(Zigbee、IP程序远程升级、TCP/IP和USB 模块、心跳传感器、433M模块、通信协议、蓝牙wifi、温湿度检测、语音等)、产品项目实战(智能机械手臂、可穿戴设备、四轴无人机、人体健康检测、驾校语音模拟等)第五阶段:嵌入式Linux驱动开发阶段(A9/A72双平台教学,采用最新的RK-3399) u-boot介绍,u-boot常用命令学习、Linux内核移植编译,裁剪、内核顶层Makefile 交叉编译器修改、根文件系统制作,挂接、驱动理论,字符设备驱动、设备驱动:Linux驱动中断编程、平台总线驱动模型、LCD驱动程序移植,LCD应用程序编程、Linux输入子系统,触摸屏驱动、Linux I2C子系统、Exynos4412产品发布、Linux驱动项目实战第六阶段:嵌入式Android驱动开发阶段Android设备驱动概述、Android设备驱动概述、JNI开发、NDK开发、SystemServer、ServiceManager、Android Binder通讯机制、Android电源管理、Android调试方法、Android 设备驱动开发实例:LED、Android设备驱动开发实例:按键、Android设备驱动开发实例:蜂鸣器、Android设备驱动开发实例:串口、Android设备驱动项目实战第七阶段:C++、QT开发C++新特性,类和对象基本知识、类和对象基本思想,构造函数,析构函数、类中特殊数据成员和函数成员的初始化等类的其它基本知识、类域,友元,运算符重载、深入运算符重载、派生与继承、多态、模版思想、名称空间,string类,智能指针,typeid操作符、Qt入门知识、Qt信号与槽函数机制、基于Qt的图片浏览器的制作、基于Qt的MP3音乐播放器的制作、基。
嵌入式软件开发流程一、嵌入式软件开发流程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等。
嵌入式linux应用开发完全手册 v51.嵌入式linux应用开发需要深入了解linux系统的特性和架构。
Embedded Linux application development requires a deep understanding of the features and architecture of the Linux system.2.开发人员应该掌握linux内核和驱动程序的基本知识。
Developers should have a good understanding of the basics of Linux kernel and drivers.3.需要熟悉linux的命令行工具和脚本语言。
Familiarity with Linux command-line tools and scripting languages is essential.4.理解嵌入式系统中的资源管理和优化是至关重要的。
Understanding resource management and optimization in embedded systems is crucial.5.了解嵌入式系统中的实时性能和响应是必不可少的。
Understanding real-time performance and responsiveness in embedded systems is essential.6.理解Linux系统的安全机制和措施对于开发安全的嵌入式应用至关重要。
Understanding the security mechanisms and measures in the Linux system is crucial for developing secure embedded applications.7.开发人员需要熟悉linux开发工具链和调试技术。
Developers need to be familiar with the Linux development toolchain and debugging techniques.8.对linux应用的交叉编译和交叉调试有一定的了解是必要的。
《《嵌入式Linux开发》》一、嵌入式Linux开发的历程Linux操作系统是由Linus Torvalds在1991年开发的,从最初的个人项目到现在的开源操作系统它的发展历程充满着波折和机遇。
随着Linux操作系统的普及和应用场景的增多,人们发现Linux操作系统在嵌入式系统领域也有着广泛的应用。
在过去,嵌入式系统采用的是实时操作系统(Real-Time Operating System,RTOS)进行开发,它的硬实时性和精实时性需求比较高,但是应对不了复杂的嵌入式应用场景,而Linux操作系统因为有着资源丰富、标准化、安全稳定等优点,迎合了嵌入式应用领域的要求,成为了主流的嵌入式开发操作系统。
经过了多年的发展,如今的嵌入式Linux操作系统已经可以在全球各种各样的嵌入式设备中运行,如智能手机、平板电脑、智能电视、汽车导航、智能家居、工业控制和医疗设备等。
二、嵌入式Linux系统的应用现状目前,嵌入式Linux系统广泛应用在各领域,如智能家居、工业自动化、智能医疗、智能交通等领域,这些领域的需求为嵌入式Linux系统的发展和创新提供了契机。
下面,我们以智能家居为例进行探讨。
在智能家居领域中,嵌入式Linux系统能够控制家庭设备,例如:门禁系统、安全系统、灯光控制、温度控制、智能音响、智能电视等。
随着智能家居对嵌入式Linux系统硬件性能的要求越来越高,当前的开发者也必须面对越来越多的智能家居相关的技术挑战。
基于嵌入式Linux操作系统的智能家居应用必须考虑网络安全、性能稳定、实时性、硬件兼容性等方面的问题。
由于各种设备和厂商之间的差异,嵌入式Linux的代码库、驱动等需要满足这样一种通用和可定制的状态,开发人员必须根据智能家居中的特定需求进行适配和优化。
除了智能家居之外,嵌入式Linux还可以应用于医疗设备、消费电子、家电、军事、工业自动化、智能交通等领域,应用范围广泛,未来的嵌入式Linux发展可期。
从软件工程的角度来说,嵌入式应用软件也有一定的生命周期,如要进行需求分析、系统设计、代码编写、调试和维护等工作,软件工程的许多理论对它也是适用的。
但和其他通用软件相比,它的开发有许多独特之处:
·在需求分析时,必须考虑硬件性能的影响,具体功能必须考虑由何种硬件实现。
·在系统设计阶段,重点考虑的是任务的划分及其接口,而不是模块的划分。
模块划分则放在了任务的设计阶段。
·在调试时采用交叉调试方式。
·软件调试完毕固化到嵌入式系统中后,它的后期维护工作较少。
下面主要介绍分析和设计阶段的步骤与原则:
1、需求分析
对需求加以分析产生需求说明,需求说明过程给出系统功能需求,它包括:·系统所有实现的功能
·系统的输入、输出
·系统的外部接口需求(如用户界面)
·它的性能以及诸如文件/数据库安全等其他要求
在实时系统中,常用状态变迁图来描述系统。
在设计状态图时,应对系统运行过程进行详细考虑,尽量在状态图中列出所有系统状态,包括许多用户无需知道的内部状态,对许多异常也应有相应处理。
此外,应清楚地说明人机接口,即操作员与系统间地相互作用。
对于比较复杂地系统,形成一本操作手册是必要的,为用户提供使用该系统的操作步骤。
为使系统说明更清楚,可以将状态变迁图与操作手册脚本结合起来。
在对需求进行分析,了解系统所要实现的功能的基础上,系统开发选用何种硬件、软件平台就可以确定了。
对于硬件平台,要考虑的是微处理器的处理速度、内存空间的大小、外部扩展设备是否满足功能要求等。
如微处理器对外部事件的响应速度是否满足系统的实时性要求,它的稳定性如何,内存空间是否满足操作系统及应用软件的运行要求,对于要求网络功能的系统,是否扩展有以太网接口等。
对于软件平台而言,操作系统是否支持实时性及支持的程度、对多任务的管理能力是否支持前面选中的微处理器、网络功能是否满足系统要求以及开发环境是否完善等都是必须考虑的。
当然,不管选用何种软硬件平台,成本因素都是要考虑的,嵌入式Linux 正是在这方面具有突出的优势。
2、任务和模块划分
在进行需求分析和明确系统功能后,就可以对系统进行任务划分。
任务是代码运行的一个映象,是无限循环的一段代码。
从系统的角度来看,任务是嵌入式系统中竞争系统资源的最小运行单元,任务可以使用或等待CPU、I/O设备和内存空间等系统资源。
在设计一个较为复杂的多任务应用系统时,进行合理的任务划分对系统的运行效率、实时性和吞吐量影响都极大。
任务分解过细会不断地在各任务之间切换,而任务之间的通信量也会很大,这样将会大大地增加系统的开销,影响系统的效率。
而任务分解过粗、不够彻底又会造成原本可以并行的操作只能按顺序串行执行,从而影响系统的吞吐量。
为了达到系统效率和吞吐量之间的平衡折中,在划分任务时应在数据流图的基础上,遵循下列步骤和原则:
·进行数据流分析
在系统需求分析的基础上,以数据流图作为分析工具。
首先,从系统的功能需求开始分析系统中的数据流,分析数据在各状态转换之间的作用。
然后,扩展数据流图,并分解到足够的深度,识别出主要的子系统和每个子系统的主要成分。
·划分任务
识别出系统的所有功能和它们之间的数据流后,下一步是要判断哪些操作是并行,哪些是串行,以划分任务。
在将一个软件系统分解为并行任务时,主要考虑的是系统内功能的异步性。
这需要分析数据流图中的各功能变换,确定哪些变换可以并行,而哪些在本质上又是顺序的。
一般并行的功能变换应属于不同的任务,而串行的可以属于同一任务。
任务的划分包括确定哪些变换属于哪个任务,及确定各任务的优先级。
它们的划分原则如下:
1)I/O依赖性
如果功能变换依赖I/O,那么它的运行速度常常受限于它的互操作的I/O 设备的速度。
在这种条件下,功能变换应单独成为一个任务。
2)功能的时间关键性
具有时间关键性的功能需求以高优先级运行,因此不能把它加到其他任务中运行,应成为一个独立的高优先级任务。
3)计算需求
需要进行大量计算但又不具有时间紧迫性的功能或功能集合,可以作为较低优先级的任务运行,以消耗CPU的剩余时间。
4)功能内聚
完成功能紧密相关的变换可以组成一个任务,因为这些功能间的数据通信较多,把它们作为一个个独立的任务反而会增加系统开销。
反之,把每个变换作为同一任务中的一个独立模块,不仅保证了模块级的功能内聚,而且保证了任务的功能内聚。
5)周期执行
一个需要周期执行的变换可以作为一个独立的任务,按一定的时间间隔被激活。
·定义任务接口
在划分好任务之后,要确定任务间的接口。
在数据流图中,接口是以数据流或数据存储的形式存在,在这里要把它们具体化下来,确定采用何种格式的接口。
通常由两种任务接口模块来处理接口问题,即任务间通信模块和任务同步互斥模块,这些模块对调用它的任务来说一般是操作系统级的任务调用。
任务通信模块处理任务间的所有通信情况。
一般它会定义一个数据结构,并定义对该数据结构的访问过程,如对消息队列、管道等结构的访问。
任务通信模块总是运行在调用它的任务中,因而,它有可能在两个任务中并发执行,所有在访问过程中必须提供必要的同步和互斥条件来确保数据的一致性和正确性。
任务同步互斥模块是当任务之间不需要传送真正的信息时使用的,它用事件来实现同步目的。
目标任务等待一个或几个事件的发生,源任务发送事件信号激活目标任务。
上述的划分原则仅能作为一个初步参考,真正的设计还需要详细分析,才能使系统达到预定的效率和吞吐率
软件开发流程分为:需求确认——概要设计——详细设计——编码——单元测试——集成测试——系统测试——维护
需求确认:需求规格说明书
概要设计:系统用例图,用例场景
详细设计:系统设计报告,数据库设计报告
测试:测试用例报告
详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。
详细设计的目标有两个:实现模块功能的算法要逻辑上正确和算法描述要简明易懂。
传统软件开发方法的详细设计主要是用结构化程序设计法。
详细设计的表示工具有图形工具和语言工具。
图形工具有程序流程图、PAD(Problem Analysis Diagram)图、NS(由Nassi和Shneidermen开发,简称NS)图。
语言工具有伪码和PDL (Program Design Language)等。
主要任务
1.为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块的详细过程性描述;
2.确定每一模块使用的数据结构;
3.确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其它模块的接口,以及模块输入数据、输出数据及局部数据的全部细节。
在详细设计结束时,应该把上述结果写入详细设计说明书,并且通过复审形成正式文档。
交付给下一阶段(编码阶段)的工作依据。
4.要为每一个模块设计出一组测试用例,以便在编码阶段对模块代码(即程序)进行预定的测试,模块的测试用例是软件测试计划的重要组成部分,通常应包括输入数据,期望输出等内容。
详细设计的工具
1.图形工具
利用图形工具可以把过程的细节用图形描述出来。
2.表格工具
可以用一张表来描述过程的细节,在这张表中列出了各种可能的操作和相应的条件。
3.语言工具
用某种高级语言(称之为伪码)来描述过程的细节
嵌入式开发学习步骤。