当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式软件集成开发环境的设计与实现

摘要:文章设计了嵌入式集成开发环境的层次结构;给出GCC重定向的一般方法并设计了通用交叉编译接口;给出GDB移植的一般方法并设计了通用调试接口。在此基础上,实现了PLAEmbeddedIDE v1.0嵌入式软件集成开发环境原型系统。

1 引言

日益成熟的硬件技术以及更加复杂化的应用需求,使得软件逐步取代硬件成为嵌入式系 统系统的主要组成部分[7]。嵌入式软件系统的开发是否能跟上市场需求的变化成为制约嵌入 式产品能否占据市场的关键因素。因此,设计一种较为通用的,高度集成的,同时具备良好 扩展性的嵌入式软件集成开发环境对于提高嵌入式软件开发效率非常重要[1][4]。

本文中设计并实现的嵌入式软件开发环境 PLAEmbeddedIDE v1.0,是基于Windows 环 境的,集编辑器、交叉编译器、交叉调试器等工具为一体的,具备扩展性的嵌入式软件集成 开发环境。

2 PLAEmbeddedIDE 的层次结构

PLAEmbeddedIDE 采用分层的模块化结构,其结构如图1 所示,从上至下分别是用户 界面层、配置实体层、接口层、功能层。其中,功能层又分为两大部分:工具集和可重用组 件库。用户界面接收用户的输入对系统进行配置,通过配置实体设定相应的参数,接口层通 过传递过来的配置参数,对工具进行必要的配置,并加载恰当的工具完成用户动作。

 

 

3 PLAEmbeddedIDE 的交叉编译器模块

3.1 交叉编译器后端重定向机制

可重定向编译器是快速开发交叉编译器的平台[2],以最常用的可重定向编译器GCC 为 例,图2 是GCC 后端重定向的原理图。

GCC 后端与目标相关部分的源码insn-*,是由后端代码生成器gen*(文件名以gen 开 头的c 源程序)读入3 个目标描述文件自动产生的,如图2 中右侧所示。这些生成器gen* 相当于目标描述文件的解释程序,对目标描述文件进行分析和处理。目标描述文件由 machine.md、machine.h、和machine.c 构成,是insn-*文件描述内容的抽象形式,与insn-* 文件相比,目标描述文件更容易书写和理解。

 

 

gen*程序实现了从目标机描述文件到GCC 后 端的自动生成。 重定向交叉编译器时,gen*读入目标描述文件生成相应的insn-*,然后将这些insn-*与 GCC 的其它源程序(与目标不相关的代码)共同编译链接,生成最终的交叉编译器。用户 在基于GCC 构建新的交叉编译器时,需要做的工作就是编写或改写三个目标描述文件,修 改相关编译选项即可[5]。

3.2 交叉编译器的接口设计

基于 GCC 构建的交叉编译器是一个独立的应用程序,当用户调用的时候,GCC 作为后 台程序运行[5],完成编译功能之后,将返回结果传送给用户界面。因此,还需要向上层用户 界面提供通用的编译接口,PLAEmbeddedIDE 通过调用这些接口来完成各项编译工作。 根据集成开发环境对交叉编译器的功能要求,本文设计了通用的编译接口函数 InvokeComplier( )供上层GUI 调用。部分代码如下:

 

 

 

 

4 PLAEmbeddedIDE 交叉调试器模块

4.1 GDB 的移植

GDB 的移植工作主要集中在与目标相关的代码编写[3][6],下面将分别就GDB 源码中与 目标相关的文件,讲述如何进行移植代码的编写。

(1)GDB-6.3/gdb/ARCH-tdep.c 该文件的主要作用是初始化gdbarch 结构,ARCH 代表目标体系结构的名称。gdbarch 结构是在gdbarch.c 文件中定义的,用于存放与目标体系结构相关的信息。mcore-tedp.c 文件 的初始化函数是_initialize_mcore_tdep(void),这个函数在GDB 启动的时候被调用。当GDB 读入类型为bfd_arch_ARCH 的可执行文件时,将调用类型bfd_arch_ARCH 指向的函数: ARCH_gdbarch_init(),ARCH_dump_tdep()。其中,函数ARCH_gdbarch_init()主要负责完成 gdbarch 结构的部分初始化工作,ARCH_dump_tdep()负责显示有关目标信息(可以省略)。

(2)GDB-6.3/gdb/ARCH-TOS-tdep.c 该文件主要对上面(1)中建立的gdbarch 结构根据操作系统的特性进一步初始化。其 中ARCH 代表的意义与(1)中相同,TOS 代表目标平台采用的操作系统名称。该文件的初 始化函数void _initialize_more_uclinux_tdep (void) 也是在GDB初始化的时候被调用执行的。

该初始化函数通过调用gdbarch_regiSTer_osabi ()向全局链表gdb_osabi_handler_list 上注册函 数mcore_uclinux_init_abi()。注册过的函数将被初始化函数ARCH_gdbarch_init()中的 gdbarch_init_osabi()调用执行。

(3)GDB-6.3/gdb/ARCH-NAT.c 和GDB-6.3/gdb/ARCH-TOS-NAT.c

这两个文件是与操作系统相关的,其中文件ARCH-NAT.c 中的函数侧重于目标体系结 构,支持多种操作系统,文件ARCH-TOS-NAT.c 中的函数则针对某种目标体系结构上的某 种操作系统,实际编写时可以灵活掌握。

(4)GDB-6.3/gdb/config/ARCH/ARCH.mt

这个文件是设置一些生成目标GDB 时,需要跟目标操作系统有关的文件。

(5)GDB-6.3/gdb/config/ARCH/tm-ARCH.h 和GDB-6.3/gdb/config/ARCH/tm-TOS.h

这两个文件是分别与体系结构相关和与操作系统相关的头文件,这些头文件将被很多相 关文件所包含。通过在这些头文件中设置相应的宏或其他的定义,起到对其他相关文件设置 的作用。

(6)GDB-6.3/config.sub 和GDB-6.3/gdb/configure.tgt

修改config.sub 和configure.tgt 文件,在config.sub 中添加相应目标体系结构的处理脚本, 同时在configure.tgt 中指定交叉调试器的名称等信息。修改完成后,就可以利用make 工具, 运行“./configure –target=ARCH”命令生成可以直接运行的新的交叉调试器了。[!--empirenews.page--]

4.2 交叉调试器的接口设计

为了向上层 PLAEmbeddedIDE 隐藏调试器实现的细节,与交叉编译器类似,需要设计 通用的调试接口。

根据集成开发环境对交叉调试器的功能要求,部分设计的接口函数如下:

??SEttarget(BSTR TargetType, unsigned long baudRate, BSTR comPort)

功能描述:设置目标板类型、通信波特率、串口号、并连接目标板;

??InvokeDebugger( unsigned long hWnd, BSTR Path, BSTR filename, BSTR TargetType)

功能描述:调用针对当前目标类型的GDB,并打开被调试文件; ??

DownloadFile() 功能描述:将被调试程序下载到目标板上;

??SendExecCmd(unsigned long cmd) 功能描述:向GDB发送跟踪调试的命令,比如继续、跳过、跳入等等; ??DumpRegisters(BSTR *pReg) 功能描述:获取当前所有寄存器的值; ??

ReadMemory (unsigned long startAddress, unsigned longend Address, BSTR * pMemData ) 功能描述:取得指定地址区间的内存值;

5 结束语

本文通过对开放源码的工具集 GNU 的重定向,实现了开放式、可扩展的嵌入式软件集 成开发环境的设计。设计并实现的嵌入式软件集成开发环境原型系统PLAEmbeddedIDE v1.0,包括了编码、编译、调试等嵌入式软件开发中所需要的各项服务。用户通过用户界面调用通用的编译接口和调试接口,可以方便地调用与目标相对应的交叉编译器和交叉调试 器,能够大大简化嵌入式软件开发的过程、提高开发效率。

该系统已经成功运用于 Mcore 和ARM 两个系列目标处理器的嵌入式软件开发中。但在 以后的开发过程中,需要不断扩展所支持的处理器类型,增加相应的驱动程序库,还需要不 断丰富集成开发环境的模版等进一步完善工作。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

【2024年5月8日,德国慕尼黑讯】Rust编程语言凭借其独特的内存安全特性,已经成为汽车软件开发中C/C++的有效补充和潜在替代品。全球功率系统和物联网领域的半导体领导者英飞凌科技股份公司(FSE代码:IFX / OT...

关键字: 编译器 微控制器

随着嵌入式计算设备基础硬件性能的提升,在通信、工业制造、交通运输等领域,嵌入式系统逐渐承担起更加综合化和关键的任务,这也导致嵌入式软件在结构愈加复杂的同时,其安全性问题也越来越受到重视。堆栈是嵌入式软件中的重要存储结构,...

关键字: 嵌入式软件 堆栈

嵌入式开发是一种专门针对特定硬件平台设计和实现软件系统的工程实践,它涵盖了从需求分析、系统设计、编程实现、调试测试直到产品部署及维护的全过程。本文将深入探讨嵌入式开发的主要阶段,分解其流程并阐述每个步骤的关键要点,以便于...

关键字: 嵌入式开发 嵌入式软件

MIKROE增加了图形功能,CLANG支持ARM和RISC-V以及许多其他功能

关键字: 编译器 RISC-V架构 工业自动化

如今,汽车已经不再是一个简单的交通工具,而是一种智能化的移动终端。通过集成各种先进的传感器、控制器和执行器,汽车可以实现对环境的感知、分析和决策,实现自动驾驶、智能导航、车辆间通信、互联网连接等功能。这些功能不仅提高了驾...

关键字: HMI 驾驶舱 嵌入式软件

为增进大家对嵌入式的认识,本文将对嵌入式软件方向的分类以及嵌入式的应用予以介绍。

关键字: 嵌入式 指数 嵌入式软件

IAR Embedded Workbench for Arm已全面支持恩智浦最新的S32系列,可加速软件定义汽车的车身和舒适性应用的开发

关键字: 电机控制 电动汽车 编译器

这款新编译器专为dsPIC®数字信号控制器 (DSC)优化设计,可为实时应用定制许可选项

关键字: 编译器 数字信号控制器 自动驾驶

在这篇文章中,小编将为大家带来嵌入式软件及其作用的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 嵌入式 嵌入式软件

嵌入式软件测试是针对嵌入式系统中的软件进行验证和验证的过程。嵌入式系统是集成在其他设备或系统中的计算机系统,例如汽车、医疗设备、家电等。为确保嵌入式软件的质量和可靠性,进行适当的测试是至关重要的。嵌入式软件测试是确保嵌入...

关键字: 嵌入式软件 计算机 硬件
关闭
关闭