本站小编为你精心准备了集成环境设计的要点探析参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
可重定目标的硬件设计
为了使硬件环境尽可能对GNUTools开发工具所支持的系列MCU通用,在设计时,采取核心板和扩展板的方式实现在硬件上尽可能的通用。把每种芯片的最小支撑电路单独设计在一块核心板上,把所有的模块及I/O引脚引出来,以便把相应的模块接口移到扩展板上,由于同一系列芯片的基本模块的功能引脚数是相同的,只是引脚所处的位置不同而已,所以,每种MCU基本模块完全可以移到扩展板上,在扩展板上设计这些模块的支撑电路。考虑到嵌入式产品需要高端软件和低端软件进行通信,通信接口有RS-232串口和USB口两种。因而,设计编程器时,既保留了串行接口,也加上了USB接口,这样就更进一步地提高了系统在硬件上的可重定性。
可重定目标的软件设计
SdIDE在软件上的可重定性设计思路体现在如下两个方面。
(1)SdIDE模块的可重定性设计
为了使该开发环境适用于多种MCU型号,在模块设计和编译器设计方面做了深入的研究,因为这两方面是SdIDE具有可重定性的关键点。首先,在模块设计方面分为与MCU有关的部分(相关模块)和与MCU无关的部分(独立模块),独立模块主要包括编辑、编译出错处理、makefile文件编写,工程管理、函数及全局变量列表,界面设计等;相关模块主要包括程序下载模块,这些模块也可以通过软件的方法使其对某一系列MCU通用。
(2)编程器的可重定性设计
编程器主要是实现程序下载功能,编程器的通用一般只针对某一系列或某一芯片而言的,不可能做到完全通用。例如对FreescaleHCS12系列芯片,都有BKGD引脚,因而可以用BDM方式下载;C*CORE和M*CORE系列芯片由串口通过监控的方式下载;ARM和COLDFIRE系列芯片通过JTAG下载。下面以FreescaleHCS12系列芯片的程序下载模块设计为例,来说明编程器的可重定性设计。
编程器可重定性设计的关键技术在于如何处理HCS12系列MCU的Flash参数。要对不同芯片的Flash参数进行深入理解、比较和总结之后,才能对程序下载模块进行设计。找出这些芯片有差异的Flash参数后,将其放在数据库中,以便下载程序时,从该数据库中读取相关参数。设计好参数数据库之后,PC方下载界面可以根据所选择的芯片型号从配置文件和数据库中获取相应芯片的擦写操作所需的参数值。表1给出了HCS12系列MCU中的几款芯片的参数,这些参数针对不同的MCU,其值可能不同。
用户数据起始地址:将一页用户数据写入相应空白芯片之前,要先将这一页数据通过BDM头写入到RAM区,然后运行写入程序,实现数据从RAM区写入到ROM区。但由于不同芯片的RAM区大小和起始地址有可能不同,把一页用户数据写入到RAM区时,其起始地址也会有所不同,所以将其设置为可变参数,使用时,从数据库中读取。
标志位首地址:该参数是RAM区的一个地址,用于存放擦写成功或出错的标志信息,占两个字节。每写完一页面用户数据之后,PC方可从该地址处读出一个字的内容,判断Flash写入操作是否成功,只有成功后,才写下一页用户数据。
写入文件路径和擦除文件路径:由于每个芯片的Flash参数和空间不尽相同,因而每种芯片的擦除和写入子程序也会有差异,因而,PC方要根据当前所选的MCU型号以及当前是擦除还是写入操作来决定调用哪个MCU的写入程序代码文件(*Write.s19)或擦除程序代码文件(*Erase.s19),以实现写入或擦除操作。
SdIDE软件架构的可重定性设计
本文设计的可重定目标集成开发环境SdIDE包含工程管理、编辑、编译、链接、程序下载等功能,启动的主界面如图1所示。为了使SdIDE的软件架构具有可重定目标的特性,因而在功能模块上将其划分为公共模块和相关模块。下面简要阐述这些模块的功能及其软件架构的设计思想。
1SdIDE独立模块
SdIDE独立模块是指与编译器和目标MCU无关的模块,主要是完成工程管理与编辑功能。
(1)编辑模块
该模块可以实现对源文件编辑,使用MFC界面库进行二次开发,支持剪切、复制、所有工程中查找、替换等常用功能,同时作者也在该环境中实现了完全支持中文和语法高亮显示(SyntaxHighlight)功能,此部分主要的技术难点在于语法高亮显示和解决半个汉字问题。使用MFC的RichEdit控件可以解决半个汉字此问题,但无法解决语法高亮功能,因而,笔者在RichEdit的基础上重新编写了语法高亮类,在实际测试中效果较好。
(2)工程模块
在SdIDE集成开发环境中,文件的组织和调用都以工程的方式来进行操作。工程是一个非常重要的概念,它是用户组织一个应用的所有源文件、设置编译链接选项、生成调试信息文件和最终的目标文件的一个基本结构。提供对源文件、库文件及其他输入文件的管理,并含有编译与链接等设置。
2SdIDE的相关模块
SdIDE相关模块是指与编译器和目标MCU相关的模块,完成编译、链接、程序下载等功能。为了满足可移植性,采用数据偶合的方式设计。
(1)交叉编译模块
包括C/C++编译器、汇编器、链接器、目标文件格式转换工具等。编译模块可根据选用的MCU型号调用GNU移植过来的m68hc11、m68k、arm、mcore或ccore等编译器,源文件编译成功后,在相应的工程目录下生成标准的MotorolaS-record文件或Bin文件等;链接器根据链接定位信息,将可重定位的目标模块链接成一个单一的、绝对定位的目标程序,链接后的目标程序中包含可裁剪的调试信息。
(2)程序下载模块
程序下载模块包括PC方模块和MCU方模块。PC方模块主要是负责获取MCU的环境变量及公用参数,分析重组S格式文件,最后通过调用TBDML动态链接库函数把擦写程序和用户程序写入RAM区,然后再运行存放于RAM区的擦除和写入程序实现程序下载操作。MCU方模块主要是编写不同微处理器的Flash的擦除和写入程序,存放在工程模板目录中,供PC方下载数据时调用。
SdIDE编译模块的可重定性设计
SdIDE开发环境使用的是由GNU移植的GCC编译器,GCC是由美国自由软件基金(FSF)开发和维护的软件,它是一个跨环境的C语言编译器。GCC所支持的所有编译器目录都放在SdIDE开发环境的安装目录下,SdIDE根据所选定的MCU型号,决定调用相应的编译器工具集。
1更换编译器的设计
如何编写较通用的makefile脚本文件是实现SdIDE可重定目标特性的关键点。makefile是编程人员和make之间的接口,本设计中各模块的依赖关系主要体现在编写的makefile文件中,makefile文件中的代码内容设计成宏定义区和基于依赖关系的指令区两大部分。前者主要是定义一些全局变量,可以在makefile的任何地方被引用。为了增加可移植性,与编译器有关的路径和编译器名都用一个全局变量来定义,这样,在更换编译器时,只需要把GCC支持的编译器目录全部放在开发环境的安装目录下,以便程序调用,同时把当前所需的编译器名赋给全局变量CompilerName,makefile脚本文件中的编译器名就可用宏$(Compiler-Name)来编写。
2更换编译参数的设计
若编译命令需要定义一组编译参数,且这组编译参数会被多个规则(或编译器命令)引用,那么可把这组参数赋值给一个变量,把这个变量放在所有引用它的地方。当需要改变参数时,只需要在变量赋值的地方改变一下就可以了。变量可在makefile文件的宏定义区定义。
编程器的可重定性设计
编程器主要是完成系列MCU的程序下载功能,编程器的可重定性体现在根据所选的MCU型号不同,决定调用不同的程序下载模块。例如对AT91RM9200T和MCF5271微控制器进行程序下载,则使用JTAG头,因而要调用JTAG下载模块。下面以FreescaleHCS12系列微控制器的下载为例,来阐述BDM方式下载,该方式对HCS12系列MCU都是可行的,它们都有BKGD引脚,支持BDM下载。
1编程器PC方软件设计
编程器的PC方软件功能包括S19文件分析模块和Flash存储器的擦除和写入模块。但采用BDM头下载时还要包括TBDML通信模块,该模块负责通过USB接口将PC方的S-record机器码写入到空白的Flash存储器的指定区域。S19文件分析模块则负责对S-Record标准的S19文件进行分析,将文件的内容转换成方便传输的格式,以及判断文件中的程序的起始地址、页数、是否越界等。下载程序先将Flash擦写程序数据和用户程序数据写入到RAM的指定区域,当一页的用户程序数据写入到事先分配的RAM区后,则可通过调用tbdml动态链接库函数来实现擦除和写入操作。BDM头下载程序的工作流程如图2所示。
2编程器MCU方软件设计
编程器的MCU方的软件功能主要包括Flash的擦除和写入程序。由于在Flash的擦除和写入过程中,Flash是不能读的,故擦除和写入Flash的程序要放在RAM中,擦除操作时,首先初始化相应Flash寄存器,然后调用整体擦除子程序开始对Flash进行整体擦除。写入操作时,首先初始化相应Flash寄存器,然后读取RAM区相应地址处的一页用户数据包,即分别读出PPAGE寄存器的分页值、起始地址、一次写入的数据字个数,最后调用块写入子程序开始写入数据。Flash擦除/写入子程序流程图如图3所示。
结语
一套方便、稳定、适用范围较广的嵌入式集成开发环境肯定要有较好的可扩充性和可移植性,因而研制可重定目标IDE的难点在于软件架构的可重定性设计。经过两年的努力,本文在SdIDE的结构设计上运用“调用/返回、数据流、数据仓库”等设计风格,初步实现了IDE的可重定性和通用性,目前SdIDE已投入到教学和实验中进行测试,结果表明该系统运行较稳定,且扩展性较好。但是,完善、升级以及对新出品芯片的适应还需进一步去扩充,系统的功能和稳定性还有待去加强。嵌入式集成开发环境的开发在我国还基本处于一个刚起步的阶段,道路还很漫长,但意义重大。
作者:朱越奇聂章龙单位:常州信息职业技术学院