当前位置:文档之家› 第六章 嵌入式软件系统设计

第六章 嵌入式软件系统设计

第六章 嵌入式软件系统设计
第六章 嵌入式软件系统设计

第六章嵌入式软件系统设计

嵌入式系统开发包括软件开发和硬件开发,在嵌入式系统总体方案设计之后,嵌入式系统软件开发与硬件开发可以并行实施。

嵌入式软件设计

1.结构与方法

2.设计范型与编程

3.嵌入式操作系统

4.异常与中断

●嵌入式软件开发过程

●ARM软件开发工具-ADS IDE简介

●ARM软件设计与代码分析

§6.1 嵌入式系统软件开发概述

嵌入式系统软件的开发与传统软件开发有许多共同点,它继承了许多传统软件开发的习惯,由于嵌入式软件运行于特定的目标应用环境,因此嵌入式软件的开发亦有其特殊的要求,即需要有交叉的开发环境,程序需要固化,同时开发的嵌入式软件对实时性、稳定性、可靠性有苛刻的要求。Array 1、嵌入式系统软件开发流程

需求分析阶段:确定设计任务和目标,并提炼出设计规格说明书,

作为正式设计指导和验收的标准;确定嵌入式软件开发工具、嵌入式软

件运行环境。

设计阶段:包括概要设计和详细设计。概要设计描述系统如何实现

所述的需求,包括数据流分析、功能模块的划分、系统的软件开发工具

选择以及关键问题的论证等。

详细设计是描述各个模块的实现方法与过程,确定任务的结构及给

出任务模块间接口定义等问题,给出每个任务模块的程序流程图,以作

为编码人员的编码准则。

编码实现阶段:包括代码编程、交叉编译和交叉链接/定位、交叉

调试。代码编程是依据详细设计形成的流程图、接口参数传递规则,分

层次、分模块编制相应的源程序代码。

交叉编译和交叉链接是指在编码完成后,要进行编译和链接一生成

可执行代码的工作,所谓交叉编译就是指在一个平台上生成另一个

平台上的可执行代码,即在宿主机(PC)上生成目标机(嵌入式系统)上的可执行代码。

交叉调试是指编码编译完成后进行调试阶段。嵌入式软件开发需要交叉开发环境,调试采用的是包括目标机和宿主机的调试方法。调试器运行在宿主机的通用操作系统上,而被调试程序则运行在基于特定硬件平台的嵌入式系统上,调试器与被调试程序间可以进行通信,调试器可以控制、访问被调试程序,读取其当前状态和改变其运行状态。

软件调试分为单元调试和集成调试。单元调试是指编码完成后,对各个模块进行单元调试(单独调试),以保证单模块正常工作。集成调试是指将各分离的模块按照功能层次逐级连接调试。其关键在于解决个功能模块的互连和互操作性问题。

软件固化与测试:在上述的交叉调试过程中,被调试程序的运行是在目标机的RAM中被执行的。嵌入式软件大多是要驻留在目标环境的非易失性存储器中或在其中运行,因此目标程序要烧写到目标机的Flash中固化,保证每次运行后下一次运行无误。

嵌入式应用软件调试完成后,编译器要对源代码重新编译一次,以产生固化到目标机的可执行代码,再烧写到目标机的Flash中。固化的可执行代码与用于调试的可执行代码有些不同,固化的代码在目标文件中把调试的信息都屏蔽掉了。

测试是指在可执行代码烧写到目标机中固化后,还要进行运行的测试,以保证程序的运行正确无误。一般是对开发的软件进行系统的功能测试和性能测试。通过功能测试来发现软件存在功能上的不足,给出完善的解决办法;通过性能测试(负载测试和压力测试)来检验软件在稳定性和健壮性等性能指标上是否达到要求,发现问题并给出解决方案。

2、ARM主流开发工具

嵌入式系统开发涉及多种软/硬件开发工具。选择合适的开发工具可以加快开发进度,降低开发成本。从软件开发角度来讲,一套含有交叉编译器、汇编器、连接器、调试器和工程管理工具的开发套件是必不可少的,当然开发者也可以根据实际情况和开发需要来选用嵌入式操作系统(移植、定制)、函数库、评估板、JTAG仿真器、在线仿真器等工具。这样的开发套件运行在宿主机(PC)上,在Windows环境下,有ARM公司的软件开发工具包(SDT)、ADS和RVDS。在Linux环境下,主要有GNU开发工具。

ARM RealView Developer Suite 2.2(RVDS)

ARM_RVDS(RealView Developer Suite)是ARM公司推出的新一代开发工具包,它由RealView编译器(RVCT)、汇编器(armasm)、连接器(armlinker)、调试器(RVDebugger)

组成。它含有先进的代码生成工具并根据Cortex-A8处理器的特性进行了增进,从而能够提供杰出的性能和无以伦比的代码密度。

ARM RealView开发工具包是一套完整的、高性价比开发调试工具,用于半导体通用32位微控制器(MCU)产品。RVDS 4.0标准版适用于所有的ARM7、ARM9、ARM10、ARM11、MP-Core、SCx00、Cortex-M3、Cortex-M1、Cortex-R4F和Cortex-A8处理器,08年10月新推出的RVDS 4.0专业版除了延伸支持到Cortex-A9以外,还具有独特的运行时优化功能、ARM向量化NEON 编译器、ARM Profiler和ARM超快速模块(ARM926EJ-S、ARM1136J(F)-S、ARM1176JZ(F)-S、Cortex-R4、Cortex-A8和单核Cortex-A9)。RVDS 4.0专业版的演示版从2008年10月15日开始就已经可以从亿道电子公司的网站上免费下载。

厂商、ARM针对采用Intel XScale(技术的网络基础设施、无线和存储设备,推出ARM Real View开发工具组。该工具组提供最佳编码生成功能,同时可降低开发成本。作为唯一支持所有顺应ARM结构的Intel Xscale处理器的工具组,RealView能帮助开发人员增强应用功能。

ARM Developer Suite(ADS)

ADS全称为ARM Developer Suite,是ARM公司提供的专门用于ARM相关应用开发和综合调试的综合性软件。ADS由命令行开发工具、ARM运行时库、GUI开发工具(Code Warrior 和AXD)、实用程序和支持软件组成。它支持所有ARM系列处理器,除了可以安装在 Windows NT4, Windows2000操作系统下,还支持 Windows XP 操作系统和RedHat Linux。

在Windows操作系统环境下,通常选用ARM_RVDS、ARM ADS/SDT + 调试器来开发嵌入式软件。在Linux操作系统环境下,主要使用GNU(GNU's Not Unix)开发工具,因为这些工具相互兼容、前后贯穿、彼此配合,因此又称为GNU/Linux ARM 工具链或GNU/Linux ARM 交叉工具链.

3、常用调试方法

开发ARM应用程序时,程序编辑、编译、汇编、链接等都可以在宿主机上完成,但是调试工作则需要其它的硬件模块或工具配合。目前常用的调试方法和工具有指令集模拟器、驻留监控软件、JTAG仿真器和在线仿真器等。

软件仿真(指令模拟器):指令模拟器是完全基于PC宿主机的软件仿真,可以模拟目标中的处理器的功能和指令。指令模拟器一般与编译器集成在同一环境中,可以方便用户在宿主机上调试应用程序和代码,但因指令模拟器与实际的硬件环境有一定差异,所以只能用于进行初步的调试。ARMulator就是一个指令模拟器,在Windows和Linux系统都有实现。

驻留监控调试:驻留监控软件是一段运行在目标板上的可执行程序,它主要负责监控目

标机上的被调试程序的运行情况,与宿主机端的调试器一起完成对应用程序的调试。PC宿主机上的调试器通过网口、并行端口、串行端口或USB口等通信端口与驻留监控软件交互。调试器发送命令给驻留监控软件,由驻留监控软件控制程序执行、读写寄存器和存储器、设置断点等,从而实现调试。这种方法对硬件要求高,一般在硬件稳定之后进行,需要占用目标板上的一部分资源,不能对程序的全速运行进行完全仿真。

ARM公司的Angel就是一种常驻在目标机Flash中的驻留监控软件,只需通过RS_232C 串口与PC宿主机相连,就可以在PC宿主机对使用ARM处理器的目标机进行开发与调试。被调试程序通过监控程序下载到目标机上后,就可开始进行调试。

Angel的主要功能:

具有Debug调试功能。

支持Angel调试协议(ADP),能够实现PC宿主机与目标机的串行或并行通信。

具有多任务调度和处理器模式管理功能。

支持中断功能

JTAG仿真器:JTAG仿真器又称为JTAG调试器,通过ARM芯片的内嵌JTAG边界扫描接口和CPU核通信,进行调试。开发套件配合JTAG仿真器是目前使用最多的调试方式。

在线仿真器(ICE)使用仿真头完全取代目标板上的CPU,从而完全仿真ARM芯片的行为,提供更深入的调试能力。这种完全非插入式调试,不使用片上资源,无需目标存储器,不占用目标系统的任何端口,仿真效果更加接近于目标硬件,但成本高。

4、ARM映像文件格式

映像文件(image)是计算机上的一个可执行文件,在执行之前被加载到计算机存储器中,通常一个映像文件中包含多个线程。

ARM集成开发环境中的各种源文件(汇编程序、C程序以及C++)经过ARM编译器编译之后,生成ELF格式的目标文件。这些目标文件和相应的C/C++运行时库经过ARM连接器连接后,生成.axf映像文件。.axf映像文件也是ELF格式,只是包含特定格式的调试信息,可以在开发板上调试运行。映像文件调试结束后,可以使用fromelf工具将映像文件中的调试信息和注释过滤掉,生成二进制的可加载映像文件(通常带后缀.bin)。可加载映像文件可以烧写到目标机的Flash中,在加电启动过程中被执行。

ELF文件格式:ELF(Executable and Linking Format)格式是可执行连接文件格式,是UNIX系统实验室(USL)作为一种应用程序二进制文件接口而开发和发布的。工具接口委员会选择了正在发展中的ELF标准作为工作在32位Intel体系结构上不同操作系统之间可

移植的二进制文件格式。ELF 文件是x86 Linux 下的一种常用目标文件格式,也是ARM 处理器的常用目标文件格式。

ELF 文件主要有3种类型:

● 适用于连接的可重定位文件:可与其它目标文件一起创建可执行文件和共享目标文件。 ● 适用于执行的可执行文件:规定了如何创建一个程序的进程映像,加载到内存执行。 ● 共享目标文件:连接器可以把它与其它可重定位文件和目标文件连接成其它的目标文

件。

ELF 文件有双重特性(可重定位,可执行),ARM 连接器把ELF 文件当作由节头部表(section header table )描述的一组逻辑节,而系统加载器则把ELF 文件当作由程序头部表(Program header table )描述的一组代码段,一个代码段通常由几个节组成。

由于ELF 文件既可以是可重定位的目标文件,又可以是可执行文件。因此可以用下面两个视图来观察ELF 文件的主体结构。

ELF 文件格式的两种视图

ARM 映像文件的组成:ARM 处理器的映射文件是.axf 文件或者.bin 文件。 .axf 文件和.bin 文件的区别是前者包含了调试信息和注释信息,后者没有。编译器输出的

ARM 映像文件以.axf 文件为主,通过fromelf 工具,可以把.axf 文件转换成.bin 文件。实际下载到目标系统板的映像文件多数是.bin 文件格式。

1. ARM 的ELF 文件的内部结构(表):

a )连接视图

可重定位

文件格式视图

b )执行视图

共享目标文件和可执行文件视图

表中只有ELF头部信息是国定的,其余部分实际顺序可能有所不同。ELF文件其余部分的位置由ELF头部信息、程序头部表和节头部表定义。

2.ARM的ELF文件的段结构:有3个段

ARM的ELF文件有三种段结构。

Text段包含可执行的代码。

Data段包含经过初始化的可读可写的数据。

Bss(Block Started by Symbol)段用来存放程序中未初始化的全局变量的一块内存区域。Bss段属于静态内存分配,存放未初始化的全局C变量。

3.ARM的ELF文件的节结构:

在ELF文件规范中,一个可执行目标文件能够包含一个节头表,由节头表对文件中的节进行定义。在ARM的ELF文件中,所有的可执行代码至少具有两个节,除非激活连接器附带了“nodebug”参数。这两个节分别是:

符号表节(Symbol table section)

字符串表节(string table section)

节名称字符串表(section name string table),它保存了所有节的文字名称。

调试节:ARM的ELF文件支持三种类型的调试信息,这三种调试信息都存放在调试节里。可执行ELF文件的连接器通过检查该目标代码的节表就能够分辨出这三种调试信息。

4.目标文件和映像文件的内部结构块:

ARM映像文件的内部组织有层次结构的性质,映像文件含有3种成分:域(region),输出段(output section),输入段(input section)。各输入段包含了目标文件中的代码

和数据。连接器读入并处理若干个由程序员指定的输入段,而后输出一个映像文件。一个映像文件由一个或多个域组成,每个域包含1~3个输出段,每个输出段包含了一个或多个输入段。图示给出了映像文件的生成过程。输入段的属性有:

段属性:RO,RW,ZI(Zero-Initialized)

ARM映像文件生成:目标文件_输入段->ARM Link->输出段_映像文件

图示:ARM映像文件生成P187

5.映像文件的加载视图和执行视图:

映像文件域在加载时被映射存放到系统存储区。在执行映像时,往往需要移动一些域到执行地址并产生ZI输出段。譬如,初始化的RW数据也许要被迫从ROM区的加载地址拷贝到RAM区的执行地址。

加载视图:根据映像文件装载到存储器时的地址描述每一个域和段,该视图是映像文件开始执行前,它的域和段的位置视图。

执行视图:该视图是根据映像文件在执行时每一个域和段的地址描述,映像的各个组成部分。

图示:1P188

a)加载时的地址映像 b)执行时的地址映像

6.使用配置文件定义映像文件的的地址映像:

分组信息定位信息

图示:2P189

ADT for ARM集成开发系统

§6.2 ARM_ADS集成开发环境介绍

ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。现在ADS的最新版本是1.2,它取代了早期ARM SDT。它支持所有ARM系列处理器,除了可以安装在Windows NT4,Windows2000操作系统下,还支持Windows XP 操作系统和RedHat Linux。

ADS由命令行开发工具、ARM运行时库、GUI开发工具(Code Warrior和AXD)、实用程序和ARM支持软件组成。有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的应用开发程序了。

§6.2.1ARM_ ADS GUI开发工具

ARM_ ADS GUI 开发工具主要包括两个独立的工具:ARM Code Warrior IDE(代码斗士集成开发环境)和AXD((ARM eXtended Debugger ARM扩展调试器)

1.ARM Code Warrior IDE

ARM Code Warrior IDE集成了ADS的命令工具(包括编辑器,ARM汇编器,ARM和Thumb 的C/C++编译器,链接器,符号调试器,运行库等),用户可以在Code Warrior IDE (Integrated Development Environment)为ARM配置各种命令工具,实现对工程代码的编辑、编译、汇编和链接。

ARM Code Warrior IDE为管理和开发项目提供了简单多样化的图形用户界面,可以加快并简化嵌入式系统开发过程的每个环节,缩短了用户开发项目代码的周期。

可以使用ADS的Code Warrior IDE为ARM和Thumb处理器开发用C、C++或ARM汇编语言的程序代码,为开发者提供全面的项目管理功能和子函数的代码导航能力,使得用户迅速找到程序中的子函数。

Code Warrior IDE能够让用户将源代码文件、库文件还有其他相关的文件以及配置设置等放在一个工程中。每个工程可以创建和管理生成目标设置的多个配置。例如,要编译一个包含调试信息的生成目标和一个基于ARM920T的硬件优化声称目标,生成目标可以在同一个工程中共享文件,同时使用各自的设置。

Code Warrior IDE 为用户主要提供了下面的功能:

●按照工程项目(project)的方式来组织源代码文件、库文件和其他文件。

●设置各种生成选项(build options),以生成不同配置的映像文件。

●集成在Code Warrior IDE 的浏览器中源代码编辑器,能够为用户提供源代码编辑、

字符串的搜索和替换、文本文件比较等功能。浏览器能使用户在源代码中快速方便

地跳转。

●ARM汇编器能够对ARM和Thumb汇编语言的源代码进行汇编

●编译器能够把ARM和Thumb的C/C++程序编译成相应的指令代码。

●ARM连接器可以将汇编、编译得到的一个或多个目标文件和和相关的一个或多个

库文件进行连接,生成一个ELF格式的可执行映像文件。

尽管大多数的ARM工具链已经集成在Code Warrior IDE,但是仍有许多功能在该集成环境中没有实现,这些功能大多数是和调试相关的,因为ARM的调试器(AXD)没有集成到Code Warrior IDE中,这就意味着用户不能在Code Warrior IDE中进行断点调试和查看变量。对于熟悉Code Warrior IDE的用户会发现,有许多的功能已经从Code Warrior IDE For ARM中移走。在Code Warrior IDE For ARM中有很多的菜单或子菜单不能使用的,下面介绍一下这些不能使用的选项。

1.View菜单下不能使用的菜单选项有:

Processes,Expression,Globl V ariable,Breakpoints,Registers。

2.Project菜单不能使用的菜单选项:

Precompile子菜单。因为ARM编译器不支持预先编译的头文件。

3.Debug菜单中没有一个子菜单是可以使用的。

4.Browser菜单中不能使用的菜单有:

New Property,New Method和New Event Set.

5.Help menu 中不能用于ADS的菜单有:

Code Warrior Help,Index,Search和Online Manuals

下面ARM Code Warrior IDE所涉及到的一些术语做一个简单介绍。

●目标系统(target system):目标系统是指应用程序运行的环境,可以是基于arm

的硬件系统(目标板),也可以是ARM仿真运行环境。譬如,当应用程序运行在

ARM评估板上时,目标系统就是该评估板。

●生成目标(build target):生成目标是指生成特定目标文件的选项设置(包括汇编选

项、编译选项、连接选项以及连接后的预处理选项等)和所用的所有文件的集合。

通常一个生成目标对应一个目标映像文件。当使用ADS的工程项目类型生成新工

程项目时,在对话框中,工程项目生成目标需要用户自行选择,新工程项目工程包

括3种生成目标类型:

DebugRel:使用该目标(默认选择),生成目标对应的映射文件包含基本的调试信息;

Debug:使用该目标,生成目标对应的映像文件包含最完全的调试信息,在开发过程中使用;

Release:使用该目标,生成目标对应的映像文件不包含任何调试信息。

如果当前生成目标是Debug,ARM Code Warrior有Debug Settin g…菜单项或工具栏按钮,通过它可以设置该生成目标对应的选项,这些选项对其他的生成目标是无效。

用户可以通过以ARM Code Warrior为目标平台创建工程向导,快速创建ARM和Thumb 工程。ADS提供了7种可选的工程项目类型。

(1).ARM Executabl Image:ARM可执行映像文件类型

(2).ARM Object Library:ARM目标文件库类型

(3).Empty Project:空工程类型

(4).Makefile Importer Wizard:Makefile导入向导类型

(5).Thumb RM Executabl Image:Thumb /ARM混合使用的映像文件类型

(6).Thumb Executabl Image:Thumb可执行映像文件类型

(7).Thumb Object Library:Thumb目标文件库类型

有关Code Warrior IDE中一些常用菜单的使用,将在后面的举例中具体说明的,在此不再赘述。

2.ADS调试器AXD

AXD是ADS的图形化调试工具,为嵌入式系统开发者提供了多种辅助调试手段来对程序进行调试,用户通过调试器使用debug agent(调试代理)可以对包含有调试信息的、正在运行的可执行代码,进行变量的查勘、断点的控制等调试操作。

ADS中包含有3个调试器:

●AXD(ARM eXtended Debugger):ARM扩展调试器;

●Armsd(ARM Symbolic Debuger):ARM符号调试器(集成在Code Warrior ID

中);

●与老版本兼容的Windows和UNIX下的ARM调试工具,ADW/ADU

(Application Debugger Windows/Unix)。

下面对在调试映像文件中所涉及到的一些术语作一个简单介绍。

Debug target(调试目标文件):在软件开发的最初阶段,没有硬件的情况下,可以通过软件仿真来测试是否达到预期效果,调试器能够发送以下命令:

(1)装载映像文件到目标内存;

(2)启动或停止程序的执行;

(3)显示内存、寄存器或变量的值;

(4)允许用户改变存储的变量值。

Debug agent(调试代理):Debug agent执行调试器发出的命令动作,譬如,设置断点、从存储器中读数据、把数据写到存储器等。在ARM体系中有三种调试代理:

●ARMulator,打开AXD软件时默认打开的目标是ARMulator(ARM模拟器)

●基于JTAG的ICE类型的调试代理。

●Angel调试监控程序(全面)。

AXD可以在Windows和UNIX下,进行程序的调试。它为C、C++和汇编语言编写的源代码提供了一个全面的Windows和UNIX环境。

§6.2.2 ADS运行时库与实用程序

1.ARM运行时库

运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。

运行时库类型和建立选项:

ADS提供ANSI-C的运行时库和C++运行时库,可以支持被编译的C和C++代码:ANSI C库函数:这个C函数库是由以下几部分组成。

a).在ISO-C标准中定义的函数;

b).在semihosted(半主机)环境下(semihosting是针对ARM目标机的一种机制,它能够根据应用程序代码的输入/输出请求,与运行有调试功能的主机通信,这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源)用来实现C库函数的与目标相关的函数。

c).被C和C++编译器所支持的函数库

ARM C库提供了额外的一些部件支持C++,并为不同的结构体系和处理器编译代码。

ISO-C++库函数:……

2.实用程序

FromELF :这是ARM映像文件转换工具。该命令将ELF格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括plain binary(BIN格式映像文件),Motorola 32-bit S-record format(Motorola 32位D映像文件),Intel Hex 32 format(Intel 32位格式映像文件)等。FromELF命令也能够为输入映像文件产生文本信息。

armar:ARM库函数生成器将一系列ELF格式的目标文件以库函数的形式集合在一起,用户可以把一个库传递给一个连接器以代替几个ELF文件。

Flash downloader:用于把二进制映像文件下载到ARM开发板上的Flash存储器的工具。3.支持的软件

ADS为用户提供下面的软件,使用户可以在软件仿真的环境下或者在基于ARM的硬件环境调试用户应用程序。

ARMulator:这是一个ARM指令仿真器,集成在ARM的调试器AXD中,它提供对ARM 处理器的指令集的仿真,为ARM和Thumb提供精确的模拟。用户可以在硬件尚未做好的情况下,开发程序代码。

§6.3 使用ADS创建工程

本节通过一个具体实例,为读者介绍如何使用ADS GUI集成环境,利用Code Warrior IDE提供的建立工程的模版来建立自己的工程,并学会如何进行编译连接,生成包含调试信息的映像文件(.axf)和可以直接烧写的Flash中的二进制可执行文件(.bin)。

§6.3.1 建立一个工程

一个工程是将所有的源代码文件组织在一起,并能够决定最终生成文件存放的路径、输出格式等。在开始的“所有程序”下拉菜单中,启动ADS_Code Warrior IDE后的初始界面如下:

图6.1 ADS Code Warrior IDE主窗口

工具栏中有

File :主要用于建立新工程、打开一个工程,

Edit:主要用于文本的编辑,目标设置。

View:

Search:

Project:

Debug:

Window:

1.建立工程:

在Code Warrior IDE中新建立一个工程的方法有两种,可以在工具栏中单击“New”按钮,也可以在“File”菜单中选择“New…”菜单。这样就会打开一个如下所示的对话框。

图6.2 New 对话窗口

在这个对话框中为用户提供了7种可选择的工程类型。

ARM Executable Image:用于由ARM指令的代码生成一个ELF格式的可执行映像文件;ARM Object Library:用于有ARM指令的代码生成一个armar格式的目标文件库;

Empty Project:用于创建一个不包含任何库或源文件的工程;

Makefile Importer Wizard:用于将Visual C的nmake或GUN make文件转入到Code Warrior IDE 工程文件。

Thumb ARM Interworking Image:用于由ARM指令和Thumb指令的混合代码生成一个ELF 格式的可执行映像文件;

Thumb Executable Image:用于由Thumb指令创建一个ELF格式的可执行映像文件;Thumb Object Library:用于有Thumb指令的代码生成一个armar格式的目标文件库;

在这里选择ARM Executable Image,在“Project name”中输入工程文件名,本例为

“wang20080413”,点击“Location”文本框的“set...”按钮,浏览选择想要将该工程保存的路径,将这些设置好后,点击“确定,即可建立一个新的名为wang20080413的工程。2.在工程中添加源代码文件

建立工程工作完成后,会出现wang20080423.Mcp的窗口,如下图所示。有三个标签页,分别是Files,Link order和Target,默认的是显示第一个标签页Files。通过在该标签页点击鼠标右键,选中“Add Files…”可以把要用到的源程序添加到工程中。

图6.3 工程窗口

对于本例,由于所有的源文件都还没有建立,所以首先需要建立源文件。

标签页Target可以用来选择生成目标类型。

(1)建立源文件

在工具栏的“File”菜单中选择“New”,在出现的如图6.2的New 对话框中,选择标签页File,在File name中输入要创建的文件名,输入“Init..s”,点击“确定”关闭窗口。在出现的文件编辑框中输入如下的汇编代码:

//************************************************************************ // File Name : Init.s

//Description:

//Author:

//Data:2010.4

//************************************************************************

IMPORT Main

AREA Init, CODE,READONLY

ENTRY

Start

LDR R0,=0x3ff0000

LDR R1,=0xe7ffff80 ;配置SYSCFG,片内4K Cache,4K SRAM

STR R1,[R0]

LDR SP,=0x3fe1000 ;SP指向4K SRAM的尾地址,堆栈向下生成

BL Main

END

在这段代码中,伪操作IMPORT告诉编译器符号Main不是在该文件中定义的,而是在

其它源文件中定义的符号,但是本源文件中可能要用到该符号。接下来用伪指令AREA定义段名为Iint的段是只读的代码段,伪指令ENTRY指出了程序的入口点。下面就是用汇编指令实现配置SYACFG特殊功能寄存器,将S3C2410片内的8K一体化的SRAM配置为4K Cache,4K SRAM,并将用户堆栈设置在片内的SRAM中。

4K SRAM的地址为0x03FE0000~0x03FE1000-1,由于S3C2410B的堆栈由高地址向低地址生成,将SP初始化为0x03FE1000。

完成上述操作后,程序转到Main函数执行。

保存Init.s汇编程序。

用同样的方法,再建立一个名为main.c的C源代码的文件。具体代码内容如下:

//************************************************************************ // File Name : main.c

// Description:

// Author:

// Data:2010.4

//************************************************************************

#define IOPMOD (*(volatile unsigned*)0x03ff5000)//IO port mode register #define IOPDATA (*(volatile unsigned*)0x03ff5008)//IO port mode register void Delay(unsigned int);

int Main()

{

unsigned long LED;

IOPMOD=0xffffffff; //将IO口置为输出模式

IOPDATA=0x01;

for (;;){

LED =IOPDATA;

LED =(LED<<1);

Delay (10);

if ( ! (IOPDATA&0x0f))

IOPDATA=0x01;

}

return (0);

}

void Delay( unsigned int x)

{

unsigned int I,j,k;

for(i=0;i<=x;i++)

for(j=0;j<0xff;j++)

for(k=0;k<0xff;k++);

}

该段代码首先将I/O模式寄存器设置为输出模式,为I/O数据寄存器赋初值为0x1,通过将I/O数据寄存器的数值进行周期性的左移,实现连接在P0~P3口的LED显示器轮流被点亮的功能。(注意这里的if语句,时为了保证当I/O数据寄存器中的数在移位过程中,第4位为数字“1”时,使得数字1通过和0xFF相与,又重新回到I/O数据寄存器的第0位,从而保证了数字1一直在I/O数据寄存器的低四位之间移位)。

在这里还有一个细节要注意。在建立好一个工程时,默认的target是DebugRel,还有另外两个可用的target,分别是Release和Debug。

现在已经建立了两个源文件,要把这两个源文件添加到工程中去。

(2).将源代码文件添加到工程中

为工程添加源代码常用的方法有两种,一种是使用图 6.3所示方法,另一种是可以在“Project”菜单项中,选择“Add Files…”,这两种方法都会打开文件浏览框,用户可以把已经存在的源代码文件添加到工程中来。当选中要添加的文件时,会出现一个对话框,如下图所示,询问用户把文件添加到何类目标中,在这里,选择DebugRel目标。把刚才创建的两个源文件文件添加到工程来。

图6.4 生成目标类型选DebugRel

到目前为止,一个完整的工程已经建立。下面是对工程进行编译和连接。

§6.3.2 编译和链接工程

在进行编译和链接前,首先讲述生成目标的相关配置。

点击工具栏的Edit菜单,选择“DebugRel Settings…”(注意,这个选项会因用户选择的不同目标而有所不同),出现如图6.5所示的对话框。

图6.5 DebugRel目标设置对话框

DebugRel Setting对话框中左侧的树形目录可以看出,DebugRel Setting的设置内容有很多,在这里只介绍一些最常用的设置选项,读者若对其它未涉及到的选项感兴趣,可以查阅相应的帮助文件。

1.Target设置选项

目标设置的作用是告诉编译器和链接器,生成哪种类型的目标文件。其中target Setting 选项有:

Target Name文本框显示了当前设置的生成目标类型。

Linker选项供用户选择要使用的链接器,在这里默认选择的是ARM Linker,使用该连接器,将使用armlink链接编译器生成的工程中的文件相应的目标文件。Linker设置中还有

两个可选项,None不是指不用任何连接器,如果使用它,则工程中的所有文件都不会被编译器或汇编器处理。ARM Librarian 表示将编译或汇编得到的目标文件转换为ARM库文件。对于本例,使用默认的连接器ARM Linker。

Pre-linker:目前Code Warrior IDE 不支持该选项。

Post-linker:选择在链接完成后,还要对输出文件进行的操作。因为在本例中,希望生成一个可烧写到Flash中去二进制代码,所以在这里选择ARM fromELF ,表示在链接生成映像文件后,再调用fromELF命令将含有调试信息的ELF格式的映像文件转换成其它格式的文件。

2.Language Settings

Language Settings主要设置汇编和编译器的参数。因为本例中包含有汇编源代码,所以要用到汇编器。首先看ARM Assembler,这个汇编器实际就是命令行工具中的armasm,在Target标签选项中,默认的ARM体系结构(处理器)是ARM7TDMI,不符合实际目标板S3C2410处理器核的,需要改为ARM920T;字节顺序默认就是小端格式,程序运行初始工作状态为ARM状态。在A TPCS标签选项中,选择ARM/Thumb interworking,其它设置,就用默认值即可。图示6.6

图 6.6 ARM Assembler参数设置

还有一个需要注意的就是ARM C编译器,它实际就是调用的命令行工具armcc,在

Target标签选项中,ARM体系结构改为ARM920T;在ATPCS标签选项中,选择ARM/Thumb interworking,其它设置使用默认的设置就可以了。

细心的读者可能会注意到,在设置框的右下角,当对某项设置进行了修改,该项中的某个选项就会发生相应的改动,如图6.5所示。实际上,这行文字就显示的是在前面介绍的相应的编译或连接选项,由于有了Code Warrior,开发人员可以不用再去查看繁多的命令行选项,只要在界面中选中或撤销某个选项,软件就会自动生成相应的代码,为不习惯在DOS 下键入命令行的用户提供了极大的方便。

图 6.7 ARM C编译器设置

3.Linker设置

Linker设置有ARM Linker和ARM fromELF两项,前者是指ARM链接器,后者是指希望编译后生成其它形式的二进制文件,需要对ARM fromELF进行设置。

(1).ARM Linker选项

鼠标选中ARM Linker,出现图6.6所示对话框。这里详细介绍该对话框的主要标签页选项,因为这些选项对最终生成的文件有着直接的影响。

嵌入式系统软件嵌入式系统软件

嵌入式系统软件 杨剑锋 1. 嵌入式操作系统 嵌入式操作系统是个集合,而且是个无限集合 –监控程序?常规操作系统 (红外线?紫外线) –一维和多维 嵌入式操作系统常常有实时要求–早期:嵌入式操作系统= 实时操作系统 –近期: ?1)手持计算机和掌上计算机的出现; ?2)CPU速度的提高; ?3)常规操作系统增加实时进程调度的支持,如 POSIX.4 ?嵌入式操作系统<>实时操作系统 许多嵌入式操作系统的内核是微内核结构 许多嵌入式操作系统都不带磁盘 –根本不支持文件系统 –结构上为了设备驱动而支持文件系统,但不 支持文件系统的文件存储功能 许多嵌入式操作系统不采用存储管理技术,即不支持虚拟存储技术 许多嵌入式操作系统不划分“系统空间”和“用户空间” –操作系统的“内核”与外围应用程序之间不再 有物理的边界; –系统中所谓“进程”实际上全都是内核线程?静态连接、系统调用、进程调度/切换–对任何一个应用程序做细微的修改,都得重新生成整个系统,并且“下载”之; –系统调用的界面太庞大; –共享变量的访问,需要谨慎对待; –把通用操作系统上的应用移植过来需考虑“可重入”的问题;

不分系统空间和用户空间<>必须静态连接–如DOS、CP/M的INT21 不分系统空间和用户空间<>不能用页面映射技术 –但只用于不同进程之间,而非不同空间之间 即使采用了存储管理,基本上都不采用页面交换技术 重启动技术(watch dog) 2. RTOS 是否实时 –一方面是多大程度上充分发挥硬件潜力,即综合速度快慢的问题; –另一方面同时也是反映的速度在多大的程度上得到保证的问题 中断延迟(Interrupt Latency)–中断不可嵌套 –LINUX的Bottom Half –中断可嵌套:优先级中断 ?大多微处理器不支持; ?LINUX不支持; ?UNIX支持 –与指令集有关 –DMA操作有关 –保证系统调用的原子性有关 调度延迟(Scheduling Latency)–中断处理程序进程处理 –一般调度算法(Round Robin)不能及时选 中 –基于优先级调度算法,一般能及时选中?如果目标进程优先级低呢? –可剥夺调度和不可剥夺调度 ?LINUX是属于什么调度? ????????????→ 事件或软中断 Linux 既不是完全的可剥夺,也不是完全的不可剥夺 上下文切换延迟(Context Switch Latency)–大小取决于CPU和操作系统 –采用MMU > 不采用MMU 只要发生调度,就能选中目标进程吗? –根据时间片的耗用调整优先级 –拉开距离,分等级 对实时进程而言,“应该没有问题”不够。 是否可以不用中断、也不用调度,回到 最简单的“监控程序”?

嵌入式系统设计与应用

嵌入式系统设计与应用第五章程序设计与分析(1) 西安交通大学电信学院 任鹏举

本章主要内容 Software Design Cycle ●嵌入式软件中的组件(状态机 、循环缓存器、队列) ●编程模型,如数据流和控制图●编译方法介绍 ●根据性能、大小和功耗来分析 和优化程序 ●如何测试程序以验证其正确性

1 嵌入式程序组件 ●状态机(State machine) 用变量来表示内部的状态,根据输入完成状态的转移交通灯控制、CPU design controller ●循环缓冲区(Circular buffer) I/O input buffer ●队列(Queue)

状态机(1) ● 反应系统(reactive system ):响应外部事件的系统。 ●外部输入是间歇到达● 适合使用状态机描述 ● 有限状态机是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 ●Moore 机:● Mealy 机:输出只由当前状态确定 输出依赖于当前状态和输入

状态机(2) 例子:一个简单的座位安全带控制器 idle buzzer seated belted 未入座/-入座/定时器启动 未系安全带且定时器未超时/- 未系安全带/定时器启动系好安全带/-系好安全带/蜂鸣器关闭 定时器超时/蜂鸣器启动 未入座/-未入座/蜂鸣器关闭输入/输出-= 无动作

状态机(3) #define IDLE 0#define SEATED 1#define BELTED 2#define BUZZER 3switch (state) { case IDLE: if (seat) { state = SEATED; timer_on = TRUE; } break; case SEATED: if (belt) state = BELTED; else if (timer) state = BUZZER; break; case BELTED: if (!seat) state = IDLE; else if (!belt) state = SEATED; break; case BUZZER: if (belt) state = BELTED; else if (!seat) state = IDLE; break; } Inputs :seat, belt, timer Outputs: buzzer

嵌入式软件平台系统设计说明书

面向行业手持设备的嵌入式Linux软件平台项目嵌入式Linux软件平台系统设计说明书 编写者:CY

版本说明

目录

1引言 1.1编写目的 本文档是为保证“面向行业手持设备的嵌入式linux软件平台”项目在整个开发过程中的完整性、可追溯性,并保证软件产品与《面向行业手持设备的嵌入式Linux软件平台项目系统需求规格说明书》保持一致性而编写的。 预期读者为项目相关开发人员、项目管理人员和SCM、SQA人员、客户代表。 1.2背景 项目名称:面向行业手持设备的嵌入式Linux软件平台 用户:无线手持通信设备厂商 1.3基线 《面向行业手持设备的嵌入式Linux软件平台项目系统需求规格说明书》 1.4范围 本软件结构设计说明书所涉及的内容范围包括总体的结构设计,系统单元的结构设计,系统主要数据结构说明,接口设计,运行设计,系统出错处理设计和维护设计。 1.5定义 无。 1.6参考资料 1)《面向行业手持设备的嵌入式Linux软件平台项目系统需求规格说明书》 《面向行业手持设备的嵌入式Linux开发平台项目总体开发计划》 2)本文件中引用的其他文献、资料以及软件开发标准。 2总体设计 2.1概述 2.1.1功能描述 本产品要实现的功能包括: ●嵌入式Linux系统 ●目标系统的软件开发环境 ●对运行平台提供的各种接口,提供稳定的驱动程序 ●基于QT/embedded的图形用户界面 ●中文图形界面 ●中英文手写输入、键盘输入

●多媒体播放器 ●个人助理套件 ●英汉词典 ●浏览器 ●面向交通、物流行业的应用编程接口 本参考平台包括开发包和运行包。要求参考平台具备高度的可配置性,方便开发人员根据其需要在参考平台的基础上进行添加、裁减和上层开发,快速形成产品。 2.1.2运行环境 开发平台的运行环境:推荐采用PIII650以上CPU,内存大于128M,硬盘空间大于4G;推荐完全安装普华Linux 3.0,并安装开发包和目标系统源代码。 运行包硬件环境: 硬件采用PXA250开发板,规格如下: ●socketed processor for easy upgrades ●64 MBytes SDRAM ●32 MBytes Boot ROM ●32 MBytes Flash Memory ● 1 MByte SRAM ●one Intel? SA-1111? Companion Chip, which provides: — one PCMCIA slot — one Compact Flash slot — one USB Host port — PS/2 keyboard and mouse support ●Standard Microsystems LAN91C96* Ethernet controller ●touch-screen panel controllers: — Philips UCB 1400* — Burr Brown ADS7846* ●audio CODECs with MIC, LINE IN, and HEADPHONE connectors: — Philips UCB 1400 — Cirrus CS4201* ●Sharp LM8V31 LCD panel, with support for other LCD types

嵌入式软件开发流程图

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

嵌入式系统设计与应用复习资料.docx

嵌入式系统设计与应用复习资料 (一)?单项选择题: 1. 下面哪个系统属于嵌入式系统。 ( 八、“天河一号”计算机系统 C 、联想S10±网木 D ) B 、联想T400笔记本计算机 D 、联想OPhone 手机 2. 软硕件协同设计方法与传统设计方法的最大不同Z 处在于(B )。 A 、软硬件分开描述 C 、协同测试 3. 卜?面关于哈佛结构描述正确的是(A A 、程序存储空间与数据存储空间分离 C 、程序存储空间与数据存储空间合并 4. 下面哪一种工作模式不属于ARM 特权模式 A 、用户模式 B 、系统模式 C 、 5. ARM7TDM1的工作状态包括(D )。 A 、测试状态和运行状态 C 、就绪状态和运行状态 6. USB 接口移动硬盘最合适的传输类型为( A 、控制传输 B 、批量传输 C 、 7. 下而哪一种功能单元不属于I/O 接口电路。(D ) A 、USB 控制器 B 、UART 控制器 C 、以太网控制器 &下面哪个操作系统是恢入式操作系统。(B ) As Red-hat Linux B 、 PCLinux C 、 Ubuntu Linux D 、 SUSE Linux 9. 使用Host-Target 联合开发嵌入式应用,(B )不是必须的。 A 、宿主机 B 、银河麒麟操作系统 C 、目标机 D 、交叉编译器 10. 下面哪个系统不属于嵌入式系统(D )。 A 、MP3播放器 B 、GPS 接收机 C 、“银河玉衡”核心路由器 D 、“犬河一号”计算机系统 11. 在嵌入式系统设计中,嵌入式处理器选型是在进行(C )吋完成。 A 、需求分析 B 、系统集成 C 、体系结构设计 D 、软便件设计 12. 下面哪一类嵌入式处理器最适合于用于工业控制(B )。 A 、嵌入式微处理器 B 、微控制器 C 、DSP D 、以上都不合适 13. 关于ARM 了程序和Thumb 了程序互相调用描述正确的是(B )。 A 、 系统初始化Z 后,ARM 处理器只能工作在一种状态,不存在互相调用。 B 、 只要遵循一定调用的规则,Thumb 子程序和ARM 子程序就可以互相调用。 C 、 只要遵循一定调用的规则,仅能Thumb 子程序调用ARM 子程序。 D 、 只耍遵循一定调用的规则,仅能ARM 子程序调用Thumb 子程序。 14. 关于ARM 处理器的异常的描述不正确的是(C )。 A 、复位属于异常 B 、除数为零会引起异常 B 、软硬件统一描述 D 、协同验证 B 、存储空间与10空间分离 D 、存储空间与10空间合并 (A )0 软中断模式 D 、FTQ 模式 B 、挂起状态和就绪状态 D 、ARM 状态和Thumb 状态 B )0 中断传输 D 、等时传输 D 、LED

嵌入式Linux应用软件开发流程

从软件工程的角度来说,嵌入式应用软件也有一定的生命周期,如要进行需求分析、系统设计、代码编写、调试和维护等工作,软件工程的许多理论对它也是适用的。 但和其他通用软件相比,它的开发有许多独特之处: ·在需求分析时,必须考虑硬件性能的影响,具体功能必须考虑由何种硬件实现。 ·在系统设计阶段,重点考虑的是任务的划分及其接口,而不是模块的划分。模块划分则放在了任务的设计阶段。 ·在调试时采用交叉调试方式。 ·软件调试完毕固化到嵌入式系统中后,它的后期维护工作较少。 下面主要介绍分析和设计阶段的步骤与原则: 1、需求分析 对需求加以分析产生需求说明,需求说明过程给出系统功能需求,它包括:·系统所有实现的功能 ·系统的输入、输出 ·系统的外部接口需求(如用户界面) ·它的性能以及诸如文件/数据库安全等其他要求 在实时系统中,常用状态变迁图来描述系统。在设计状态图时,应对系统运行过程进行详细考虑,尽量在状态图中列出所有系统状态,包括许多用户无需知道的内部状态,对许多异常也应有相应处理。 此外,应清楚地说明人机接口,即操作员与系统间地相互作用。对于比较复杂地系统,形成一本操作手册是必要的,为用户提供使用该系统的操作步骤。为使系统说明更清楚,可以将状态变迁图与操作手册脚本结合起来。

在对需求进行分析,了解系统所要实现的功能的基础上,系统开发选用何种硬件、软件平台就可以确定了。 对于硬件平台,要考虑的是微处理器的处理速度、内存空间的大小、外部扩展设备是否满足功能要求等。如微处理器对外部事件的响应速度是否满足系统的实时性要求,它的稳定性如何,内存空间是否满足操作系统及应用软件的运行要求,对于要求网络功能的系统,是否扩展有以太网接口等。 对于软件平台而言,操作系统是否支持实时性及支持的程度、对多任务的管理能力是否支持前面选中的微处理器、网络功能是否满足系统要求以及开发环境是否完善等都是必须考虑的。 当然,不管选用何种软硬件平台,成本因素都是要考虑的,嵌入式Linux 正是在这方面具有突出的优势。 2、任务和模块划分 在进行需求分析和明确系统功能后,就可以对系统进行任务划分。任务是代码运行的一个映象,是无限循环的一段代码。从系统的角度来看,任务是嵌入式系统中竞争系统资源的最小运行单元,任务可以使用或等待CPU、I/O设备和内存空间等系统资源。 在设计一个较为复杂的多任务应用系统时,进行合理的任务划分对系统的运行效率、实时性和吞吐量影响都极大。任务分解过细会不断地在各任务之间切换,而任务之间的通信量也会很大,这样将会大大地增加系统的开销,影响系统的效率。而任务分解过粗、不够彻底又会造成原本可以并行的操作只能按顺序串行执行,从而影响系统的吞吐量。为了达到系统效率和吞吐量之间的平衡折中,在划分任务时应在数据流图的基础上,遵循下列步骤和原则:

嵌入式软件系统设计方案案例

待定颜色 修改颜色 疑问颜色 采集器软件系统设计方案 版本历史

目录 1.引言 (5) 1.1 目的 (5) 1.2 背景和范围 (5) 1.3 定义 (5) 1.4 参考资料 (5) 2.系统结构 (5) 2.1 系统功能 (5) 2.2硬件系统框架 (6) 2.2 软件系统框架 (7) 3.上行规约解析模块设计说明 (9) 3.1描述 (9) 3.2功能 (9) 3.3设计思路(算法、流程) (9) 3.4接口 (10) 3.5资源分配、性能 (12) 3.6测试方法 (12) 4.读写参数模块设计说明 (12) 4.1描述 (12) 4.2功能 (12) 4.3设计思路(算法、流程) (13) 4.4接口 (13) 4.5资源分配、性能 (14) 4.6测试方法 (14) 5.周期抄表任务管理 (14) 5.1描述 (14) 5.2功能 (14) 5.3设计思路(算法、流程) (14) 5.4接口 (14) 5.5资源分配、性能 (14) 5.6测试方法 (15) 6.读历史电量数据模块设计说明 (15) 6.1描述 (15) 6.2功能 (15) 6.3设计思路(算法、流程) (15) 6.4接口 (15)

6.5资源分配、性能 (15) 6.6测试方法 (15) 7.数据存储和电表信息存储管理 (15) 7.1描述 (15) 7.2功能 (16) 7.3设计思路(算法、流程) (16) 7.4接口 (20) 7.5资源分配、性能 (20) 7.6测试方法 (20) 8.数据交换模块设计说明 (21) 8.1描述 (21) 8.2功能 (21) 8.3设计思路(算法、流程) (21) 8.4接口 (21) 8.5资源分配、性能 (21) 8.6测试方法 (21) 9.广播校时任务模块设计说明 (21) 9.1描述 (21) 9.2功能 (22) 9.3设计思路(算法、流程) (22) 9.4接口 (22) 9.5资源分配、性能 (22) 9.6测试方法 (22) 10.更改RS485通讯速率设计说明 (23) 10.1描述 (23) 10.2功能 (23) 10.3设计思路(算法、流程) (23) 10.4接口 (23) 10.5资源分配、性能 (23) 10.6测试方法 (23) 11.抄表记录周期任务设计说明 (23) 11.1描述 (23) 11.2功能 (23) 11.3设计思路(算法、流程) (23) 11.4接口 (23) 11.5资源分配、性能 (24)

(完整word版)嵌入式系统设计与应用

嵌入式系统设计与应用 本文由kenneth67贡献 ppt文档可能在W AP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 课程名称:课程名称:嵌入式系统设计与应用 总学时:其中讲课36学时,上机实践环节12 36学时12学时总学时:其中讲课36学时,上机实践环节12学时教材:嵌入式系统设计教程》教材:《嵌入式系统设计教程》电子工业出版社马洪连参考书:参考书:1、《嵌入式系统开发与应用》北航出版社、田泽编著. 嵌入式系统开发与应用》北航出版社、田泽编著. 2、《ARM体系结构与编程》清华大学出版社杜春雷编著ARM体系结构与编程体系结构与编程》嵌入式系统设计与实例开发—ARM ARM与C/OS3、《嵌入式系统设计与实例开发ARM与μC/OS-Ⅱ》清华大学出版社王田苗、魏洪兴编著清华大学出版社王田苗、ARM嵌入式微处理器体系结构嵌入式微处理器体系结构》4、《ARM嵌入式微处理器体系结构》北航出版社、马忠梅等著. 北航出版社、马忠梅等著. 张石.ARM嵌入式系统教程嵌入式系统教程》5、张石.《ARM嵌入式系统教程》.机械工业出版2008年社.2008年9月 1 课程内容 绪论:绪论: 1)学习嵌入式系统的意义2)高校人才嵌入式培养情况嵌入式系统设计(实验课)3)嵌入式系统设计(实验课)内容安排 第1章嵌入式系统概况 1.1 嵌入式系统的定义1.2 嵌入式系统的应用领域及发展趋势1.3 嵌入式系统组成简介 第2章嵌入式系统的基本知识 2.1 2.2 2.3 嵌入式系统的硬件基础嵌入式系统的软件基础ARM微处理器的指令系统和程序设计ARM微处理器的指令系统和程序设计 2 第3章 3.1 3.2 3.3 基于ARM架构的嵌入式微处理器基于ARM架构的嵌入式微处理器ARM 概述嵌入式微处理器的组成常用的三种ARM ARM微处理器介绍常用的三种ARM 微处理器介绍 第4章 4.1 4.2 4.3 4.4 4.5 4.6 嵌入式系统设计 概述嵌入式系统的硬件设计嵌入式系统接口设计嵌入式系统人机交互设备接口嵌入式系统的总线接口和网络接口设计嵌入式系统中常用的无线通信技术 3 第5章嵌入式系统开发环境与相关开发技术 5.1 5.2 5.3 5.4 5.5 6.1 6.2 6.3 6.4 概述嵌入式系统的开发工具嵌入式系统调试技术嵌入式系统开发经验嵌入式系统的Bootloader Bootloader技术嵌入式系统的Bootloader技术μC/OS-II操作系统概述C/OS-II操作系统概述ADS开发环境ARM ADS开发环境C/OS-II操作系统在ARM系统中的移植操作系统在ARM μC/OS-II操作系统在ARM系统

嵌入式系统设计与应用-西安交通大学教师个人主页

嵌入式系统设计与应用第六章进程和操作系统(3)西安交通大学电信学院孙宏滨 i n S u n i 'a n J i a o t o n g U i v e r s i t y I n t e r n a l T e a c h i n g U s e O n l y

● 我们该如何评估调度策略?● 能满足所有截止时限 ● CPU 利用率---CPU 执行有用工作所占的时间比例● 调度开销---做调度决策所需的时间 i n S u n i 'a n J i a o t o n g U i v e r s i t y I n t e r n a l T e a c h i n g U s e O n l y

● 分配优先级主要有两种方法:● 静态优先级:在整个执行过程中优先级始终不变● 动态优先级:在执行过程中优先级发生变化 i n S u n i 'a n J i a o t o n g U i v e r s i t y I n t e r n a l T e a c h i n g U s e O n l y

● 单调速率调度(Rate-Monotonic Scheduling, RMS ):首先为实时操作系统开发的调度策略之一,直至现在仍然被广泛使用。● RMS 属于静态调度策略。事实证明,固定优 先级的做法在许多情况下都足以有效地调度进程。● RMS 的理论基础是单调速率分析(Rate Monotonic Analysis, RMA )。i n S u n i 'a n J i a o t o n g U i v e r s i t y I n t e r n a l T e a c h i n g U s e O n l y

软件设计说明书嵌入式软件范例

一、XXXXX-XXX 热压机自动控制系统软件的设计 LCD—液晶显示器,因其具有微功耗、平板化等一系列显著特点而广泛应用于仪器仪表、计算机显示终端、各类电子显示装置等各个方面。LCD的后工序生产工艺包括COG、COF、FOG、FOB,XXX-XXX 热压机正是为FOG段工艺而开发设计的。 XXXXX-XXX热压机自动控制动系统软件(以下简称XXX系统)是由PLC、气动元件和电动元件组成,其特点是通过传感器采集外部信号,输入到PLC内部进行计算处理,以控制外部执行元件,使之完成一系统的机构动作,达到生产所需的工艺要求。 ㈠ XXX 系统的性能和结构 XXX 系统主要由PLC、GOT(触摸屏)、伺服电机、气缸电磁阀、电磁继电器、光电传感器、磁性传感器、温度处理器、温度传感器以及各种按钮组成。 1、XXX 系统的主要性能和技术参数 ●主机电源:Vac-----220VAC/50HZ ●传感器电源:Vdd-----+24V ● PLC接口:40位输入、32位输出、1个RS232通信串口 ●工作温度:-10℃~+55℃ ●存储温度:-20℃~+60℃ 2、XXX 系统的内部地址 XXX 系统的内部地址及主要功能部件: ●输入继电器— X ●输出继电器— Y ●辅助继电器— M ●定时器— T ●计数器— C ●数据寄存器— D ●变址寄存器— Z 3、XXX 系统的外部引线功能定义 XXX 系统共有82根引脚,具体定义如下: ㈡指令描述 XXX 系统主要有如下指令: ㈢人机界面(GOT) 1、参数设置

人机界面(GOT)可用于参数设置和数据的显示(如图所示) 2、手动操作 人机界面亦可制作手动调试所需的各种按键,以替代繁琐的按钮(如图) 3、生产信息 人机界面还可用于显示生产时的各种数据以及PLC内部的信息,比如外部引脚的通断 信息、生产时产生的报警信息等(如下图) ㈣ XXX 系统的接口及编程 1、硬件接口 XXX系统与电脑的接口可以有两种方式:直接控制方式和间接控制方式。直接控制方式就是将PLC的RS232接口直接与电脑的RS232接口对接(如图1-1);间接控制方式就是将PLC的RS232接口与触摸屏的RS232接口对接,然后将电脑的RS232接口与触摸屏的RS422接口对接,然后对该外设进行间接操作而实现控制(如图1-2)。 2、程式流程方框图 A、系统回原点流程图 B

江苏科技大学通信专业嵌入式系统设计及应用_复习大纲

嵌入式系统设计复习 题型: 1、填空,15分左右 2、选择,30分左右 3、简答题40分左右 4、综述15分左右 第一章嵌入式系统概述 提纲: 1、掌握嵌入式系统的定义 2、了解嵌入式系统的一般组成 嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序 (嵌入式系统一般由嵌入式计算机和执行部件组成。其中嵌入式计算机是整个嵌入式系统的核心,主要包括硬件层、中间层、系统软件层以及应用软件层) 知识点: 1、嵌入式系统的定义与特点 定义:是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统 特点:软件硬件可裁剪 ①专用性:嵌入式系统具有特定的功能,用于特定的任务; ②低成本:嵌入式系统极其关注成本; ③低功耗:嵌入式系统大都有功耗的要求; ④高实时性OS; ⑤嵌入式系统的运行环境广泛; ⑥嵌入式系统的软件通常要求固态化存储; ⑦嵌入式系统的软件、硬件可靠性要求更高; 2.RISC指令系统的特点 答:指令系统:RISC设计者把上要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不常用的功能,常通过组合指令来实现。因此,在RISC机器上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。 存储器操作:RISC对存储器操作有限制,使控制简单化 程序:RISC汇编语言程序一般需要较大的内存空间,实现特殊功能时程序复杂,不易设计 中断:RISC机器在一条指令执行的适当地方可以响应中断 CPU:由于RISC CPU包含少的单元电路,因而面积小、功耗低 设计周期:RISC微处理器结构简单,布局紧凑,设计周期短,且易于采用最新技术易用性:RISC微处理器结构简单,指令规整,性能容易把握,易学易用 应用范围:由于RISC指令系统的确定与特定的应用领域有关,所以RISC机器更适合于嵌入式应用 3、嵌入式系统由硬件与软件组成,其中软件的组成 答:由实时多任务操作系统、文件系统、图形用户界面接口、网络系统及通用组件模块组成 4、嵌入式系统的运行可靠性指标

2019嵌入式课程设计-嵌入式系统设计与应用(第2版)-王剑-清华大学出版社

嵌入式系统课程设计计划 具体内容、进度安排及要求 (附课表,包含指导、答疑、上机的时间、地点,指导教师,学生班级,分组情况等)一、内容及要求: 通过本次课设,使学生了解嵌入式系统的特点,进一步理解和巩固课堂所学的嵌入式系统的基本理论和知识。掌握嵌入式系统的基本设计与分析方法,从而达到理论与实际相结合,并为今后从事嵌入式系统设计及其相关领域的各项工作打下坚实的基础。具体要求如下: 1、掌握嵌入式系统的硬件设计原理。 2、掌握嵌入式linux操作系统下的C语言应用程序设计技术 3、掌握嵌入式linux操作系统驱动程序设计技术 4、掌握嵌入式linux操作系统的移植技术 5、掌握嵌入式linux操作系统的交叉编译与动态调试技术 具体内容如下: (1)熟悉嵌入式硬件系统基础知识及基于Linux的应用开发环境的建立和程序设计方法 熟悉嵌入式硬件系统基础知识,熟悉嵌入式操作系统Linux的特点,了解Linux的主要模块及各自的功能。掌握虚拟机VMW ARE的使用方法,掌握通过交互式的环境来设计和定制内核、选择系统特性,然后进行编译和调试的全过程。了解BSP在嵌入式系统中位置及其作用。掌握在嵌入式操作系统Linux上搭建嵌入式应用开发环境的方法,熟悉Bootloader的使用方法。 (2)嵌入式操作系统Linux平台的编译移植搭建 安装嵌入式实验开发平台的BSP。根据嵌入式实验开发平台的特点和系统需求,利用VMARE环境配置Linux操作系统的特性和功能, 熟悉Bootloader的使用方法,使用TOOLCHAIN进行交叉编译、链接生成操作系统内核,生成系统映像文件ZImage。下载并运行编译好的Linux系统内核。对文件系统同样进行相关编译移植下载至嵌入式开发平台上。 (3)嵌入式数据库SQLITE与UI开发工具QT的掌握。 (4)根据所学理论知识和嵌入式硬件开发平台的具体情况,设计一个具有一定规模较复杂功能的嵌入式系统(如嵌入式系统设备驱动程序),一般来讲需要2个学生共同完成. (5)编写课设报告。课设报告要求: 1.要求使用A4纸打印,必须有封面和目录。封面内容有课设题目、班级、序号(两位)、姓名、指导教师、日期等内容。 2.课设内容一般应包含如下部分: ①课设名称、目的、要求、内容。 ②嵌入式系统a8开发硬件平台的基本概述。 ③嵌入式操作系统Linux配置、编译、移植的基本原理和过程及测试程序设计。 ④嵌入式数据库sqlite的移植过程及程序设计。 ⑤基于QT的数据库应用程序设计。 ⑥目标系统如嵌入式设备驱动程序的设计。 ⑦课设结果及分析。 ⑧收获、体会和建议。 二、进度安排: 1.嵌入式开发平台的熟悉(硬件设计环境和软件开发环境)(1天) 2.嵌入式操作系统Linux平台的编译移植搭建(1天) 3.嵌入式linux操作系统的交叉编译与动态调试(1天) 4.嵌入式数据库SQLITE的熟悉(1天)

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

* 本文由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 ]

嵌入式软件开发流程

嵌入式软件的开发流程 嵌入式系统是指用于执行独立功能的专用计算机系统。它由包括微处理器、定时器、微控制器、存储器、传感器等一系列微电子芯片与器件,和嵌入在存储器中的微型操作系统、控制应用软件组成,共同实现诸如实时控制、监视、管理、移动计算、数据处理等各种自动化处理任务。嵌入式系统以应用为中心,以微电子技术、控制技术、计算机技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件与硬件可剪裁,以此满足系统对功能、成本、体积和功耗等要求。最简单的嵌入式系统仅有执行单一功能的控制能力,比如说单片机的应用,在唯一的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所示。

嵌入式操作系统软件平台

嵌入式操作系统软件平台 1、嵌入式系统 嵌入式系统的定义是以应用为中心,以计算机技术为基础,软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。其在工业制造、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类电子产品等方面具有广泛的应用。其组成结构如下图所示: 图1-1 嵌入式系统 2、嵌入式软件的分类 嵌入式操作系统:嵌入式操作系统EOS(Embedded Operating System)是一种用途广泛的系统软件,过去它主要用于工业控制和国防系统领域。 EOS负责嵌入式系统的全部软、硬件资源的分配、调度工作,控制协调 并发活动,它必须体现其所在系统的特征,能够通过装卸某些模来达到 系统所要求的功能。目前国际上著名的嵌入式操作系统有Windows CE、 Palm OS、Linux、VxWorks、pSOS、QNX、OS-9、LynxxOS等。我国嵌入 式操作系统起步较晚,国内类似产品主要是基于自主版权的Linux操作 系统,其中以中软Linux、红旗Linux、东方Linux为代表。 嵌入式支撑软件:支撑软件是帮助和支持软件开发的软件,通常包括数据库和开发工具,期中以数据库最为重要。嵌入式移动数据库(简称移 动数据库EMDBS)是支持移动计算或某种特定计算模式的数据库管理系 统,数据库系统与操作系统、具体应用集成在一起,运行在各种智能性 嵌入设备或移动设备上。国际上主要的嵌入式移动数据库系统有Sybase、

Oracle等。我国嵌入式移动数据库系统以东软集团研究开发出的嵌入式 数据库系统OpenBASE Mini为代表。 嵌入式应用软件:嵌入式应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用户预期目标的计算机软件。由于用户任务可能 有时间和精度上的要求,因此有些嵌入式应用软件需要特定的嵌入式操 作系统的支持。嵌入式应用软件和普通应用软件有一定的区别,它不仅 要求其准确性、安全性和稳定性等方面能够满足实际应用需要,而且要 尽可能的进行优化,以减少对系统资源的消耗,降低硬件成本。目前我 国市场上出现了格式各样的嵌入式应用软件,包括浏览器、Email软件、 文字处理软件、通讯软件、多媒体软件、个人信息处理软件、智能人机 交互软件、各种行业应用软件等。 本文中主要针对嵌入式操作系统。 3、嵌入式操作系统的特征 嵌入式操作系统复杂嵌入式系统的全部软、硬件资源的分配、调度工作,控制协调并发,因此它必须体现所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。嵌入式操作系统具有如下一些特征: 小巧:嵌入式系统所能提供的资源有限,所以嵌入式操作系统必须做到小巧以满足嵌入式系统硬件的限制。 实时性:大多数嵌入式系统工作在实时性要求较高的环境中,因此嵌入式操作系统必须将实时性作为一个重要指标来考虑。 可装卸:由于嵌入式系统需要根据应用的要求进行装卸,所以iqianrushi 操作系统也必须能够跟用应用的要求进行装卸,去掉多余的部分或简化 相应模块。 固话代码:在嵌入式系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。 弱交互性:大多数嵌入式系统的工作过程不需要人的干预。嵌入式操作系统的用户接口一般不提供操作命令,它通过系统调用命令向用户程序 提供服务。 强稳定性:嵌入式系统一旦开始运行,就不需要过多的干预。在这种条

嵌入式系统设计与应用课程设计报告

《嵌入式系统设计与应用》课程设计报告 专业: 班级: 姓名: 学号: 指导教师:

目录 一、设计目的 (3) 二、开发环境 (3) 三、设计任务及要求 (3) 四、实现过程 (3) 用户应用程序设计 (3) 服务器端程序 (3) 五、总结 (4)

一、设计目的 (1)、熟悉并掌握在Linux开发环境下C语言程序设计及编译方法、嵌入式系统;(2)、掌握嵌入式linux下基础网络编程:socket编程 (3)、独立编写客户机/服务器通信程序; 二、开发环境 (1) 编程环境:在Linux开发环境下设计及编译C语言程序。 (2) 硬件设备:PXA270开发板,PC机。 三、设计任务及要求 设计一套可远程调用求和函数并返回客户端的程序。 四、实现过程 用户应用程序设计 1.程序 int sum(); 2.程序 #include <> int sum(){ int i=1,sum=0; while(i<=100){ sum=sum+i; i++; } return sum; } 服务器端程序 /******************************* * 服务器端程序*

********************************/ #include #include #include <> #include <> #include <> #include <> #include <> #include #include “” main() { int sockfd,new_fd,numbytes; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int sin_size,sum; char buff[100] ,temp[100]; sum=sum(); itoa(sum, temp, 10); ..\n"); ,100,0)==-1) { perror("send"); exit(1); } socket success! Sockfd=3; bind success; Listening... Hello!I am Client. (5)、在PC机上运行客户端程序 # ./ result:5050 五、总结 通过本次课程设计,让我熟悉并掌握在Linux开发环境下C语言程序设计及编译方法、嵌入式系统、明白了嵌套字的使用方法、嵌入式linux下基础网络编

相关主题
文本预览
相关文档 最新文档