嵌入式系统开发环境概述

系统开发

系统架构设计


浏览:956 次

嵌入式系统开发环境主要包括:

集成开发工具

交叉编译器

批处理文件

生成文件

链接脚本

调试工具

下载工具

其他工具(脱机工具)

模拟器

版本控制工具

接下来,我们将解释上述工具:

1.集成开发工具

通常,CPU制造商会为这种CPU提供集成开发环境(IDE),但在实际应用中,大多数嵌入式项目开发公司仍会使用自己的开发环境。一个是项目某些功能的特殊要求,另一个是并非所有CPU模型都有相应的IDE。

2、 交叉工具

交叉工具包括:

交叉装配器

交叉编译器

跨图书馆

交叉链接器

转储工具(有关将可执行文件转换为汇编语言代码的信息)

调试工具(GNU gdb)

以GNU工具链中的C编译器gcc为例,以下是一些编译时选项:

-错误:将所有警告消息更改为错误消息。一旦生成警告消息,将不会生成目标文件。

-S: 在编译时输出汇编语言代码。

-C: 编译时仅生成对象文件

-E: 仅执行预处理,不生成目标文件

-D: 在编译时定义宏常量

-O、 -O2,-O3:优化水平。

-g: 在编译时添加模式信息,以便GDB可以用于调试

以GNU工具链中的C链接器链接器为例,以下是一些选项:

-T: 开发链接脚本文件

-地图:连接时生成地图文件,其中包含程序中所有符号的地址信息。

GNU工具链可以支持许多不同的CPU,用户可以根据需要设置配置。例如,arm elf gcc是一个生成elf格式的arm机器代码的C编译器,而68K coff ld是一个以coff格式生成68000机器代码的链接器。

3、 制造商

Make是用于自动编译的程序工具。只要makefile详细说明了哪些工具(如交叉编译器)用于处理哪些文件(.c,.obj,…)(生成未优化的目标文件),make还会检查这些文件是否过期,如果过期,它只会自动重新编译需要编译的文件(make会比较文件之间的依赖关系和日期,以确定是否需要重新编译文件)。对于普通的批处理程序(如Windows下的.bat程序),在更新一些文件后,需要重新编译所有文件。

用GNU软件/GNU程序设计编程

使用Make/Make管理项目

以上两本书详细说明了make的用法。

(1) makefile中的重要概念

目标:要生成的文件的名称。

依赖关系:定义两个文件是否相互依赖。

前提条件:可以创建目标的一些文件。目标通常由多个文件创建。

最新:如果文件比它所依赖的文件更新,则意味着该文件具有新版本。

makefile的基本语法:

#文件名:sample.mak

目标:依赖项列表

命令1

命令2

执行上述makefile的命令是:make-f sample make。如果-f未用于指定makefile,make将在当前目录中查找名为“makefile”的文件。此外,如果未指定目标,make将使用makefile中的第一个目标文件名作为目标名。

(2) makefile示例

以下是makefile中宏定义的示例:

#文件名:DEFINE.MAK

#

#定义将在其他生成文件中使用的宏。其思想与C语言中的#define相同

#

! IFNDEF_定义_标记

_DEFINE_MAK=已定义

#

#定义项目相关文件所在的磁盘驱动器号

#

PRJ_驱动器=Y:

#

#定义项目工具所在的目录

#

PRJ_工具_根=$(PRJ_DRIVER)\工具

#

#定义编译器所在的目录

#

GNU_ CC=$(GNU33_ROOT)\kcc33

GNU_ LK=$(GNU33_ROOT)\ld

GNU_AR=$(GNU33_ROOT)\AR

#

#定义项目程序所在的目录

#

SRC_根=$(PRJ_DRIVER)\Project2020

SRC_ INC=$(SRC_ROOT)\include

#

#当在编译期间传入-DXXX参数时,效果就像在程序中写入#define XXX

#

PRJ_配置=-DPRJ_ 2020-DCPU_ ARM9-DLCD_ 160X160

#

#执行C编译器时定义参数

#

? CFLAGS=-c-gstabs-mlong调用-fno内置-mgda=0-mdp=1-O3

-I$(包括GNU)

-I$(SRC_INC)

-I$(PRJ_CONFIG)

#

#执行链接器时定义参数

#

LDFLAGS=-T主。lds-映射$(目标)。地图-N

#

#

! 结束

以下是一个更复杂的示例:

#

#在makefile中,还可以包括其他makefile,就像include一样

#

! 如果“$(_DEFINE_MAK)”==“”

! 包括DEFINE.MAK

! 结束

#

#定义每个模块中包含的对象文件。每个对象都是目标

#

模式1 _ OBJS=m1_001.obj m1_002.obj m1-003.obj

MODEL2_OBJS=m2_001.obj m2_002.ob