一种嵌入式系统集成开发环境的实现方法
一种嵌入式系统集成开发环境的实现方法
何斌
(南大傲拓科技江苏有限公司 江苏南京)
摘要:为了适应嵌入式系统发展,缩短基嵌入式系统开发工具研发周期,开发一种低成本的嵌入式软件开发工具。 本文设计了一种基于ARM7及Cortex-M3系列处理器的集成开发软件。该软件基于gcc内核模式,运行在window系统环境,实现项目管理、代码编辑、程序编译、编译信息输出、程序程序下载等功能。该软件极大地方便了用户的使用,为嵌入式系统的深入发展提供了有利的支撑平台。
关键词:嵌入式系统;编译器移植;gcc;IDE;
Abstract: For embedded system development and cutting down the research time of the embedded software IDE, the paper develops low cost embedded system IDE, which is based on ARM7 and Cortex-M3 series processor. The software is based on gcc kernel, run on the window system environment ,has been achieved project management, code editing,compling,compiling
information output and program download . The software greatly facilitates the use of the user, provide favorable support platform for in-depth development of embedded systems.
Key words: embedded system; complier porting; gcc; IDE;
1 引言
随着嵌入式系统的发展,在向用户提供以为微处理器为核心的软硬件开发平台时,需要开发出相应的编译工具链、可执行程序串口下载工具,由于编译器的原理复杂,开发周期长,成本高,开发全新编译器需要付出高昂的代价,另一方面编译生成的可执行程序,还需要用户通过相应的工具手动配置下载到嵌入式系统中,对用户使用带来了极大的不便。
因此,嵌入式软件集成开发环境是不可或缺的开发工具。目前,我国公司用的绝大多数集成开发环境都来自国外,不仅为企业带来了一定的经济负担,增加成本,同时也为嵌入式系统产品的定制化开发带来了极大的不便。因此,开发具有自主知识产权的嵌入式集成开发软件对于提升企业核心竞争力就变得非常重要。
本文针对市场上通用的ARM7及Cortex-M3系列处理器,开发了一套运行在windows平台下的基于GCC内核的嵌入式系统集成开发软件,实现了对项目管理、代码编辑、C语言代码编译、编译信息输出、程序下载等功能。
2 总体设计
该系统基于VC6.0工具开发,主要组成部分包括:项目管理、文件管理、代码编辑、程序编译、下载操作、界面显示等,实现了从工程建立,代码文件编辑,代码编译、编译信息输出以及程序下载等一系列功能,图1为模块总体架构设计。
该系统主界面基于MFC多文档架构,可视化操作,主要包括菜单栏、工具栏、项目栏、信息栏,以及文档编辑显示区域。文档编辑功能基于CRichEditView类开发,可以根据C语言关键字、变量、函数不同显示不同的颜色,并识别注释符号,可以屏蔽相应的代码,并用绿色标记, 极大提高代码的可读性。提供了操作菜单用来执行编译,下载功能。通过上述功能,将代码编辑器、编译器、编译信息查看器和图形用户界面工具有机地统一到一起。其中,核心功能包括:代码编译和串口下载。
图1 总体架构设计框图
3 基于gcc内核的编译器开发原理
3.1 gcc编译器
要把基于Linux平台的GCC工具链集成到基于windows的嵌入式IDE中,首先要解决从Linux到windows的移植问题。目前,可以通过Sourcery G++ Lite 实现gcc编译器在windows平台下的移植操作。Sourcery G++是一个基于GNU工具链的完整的软件开发环境。Sourcery G++包括GNU C/C++ 编译器、GNU汇编程序和连接器、运行时间库、源码级和汇编级调试器、支持微处理器调试接口(Microprocessor Debug Interface,MDI)与 MIPS 系统 Navigator探针和 MIPSsim仿真器的连接,另外还有可选的Eclipse-based IDE。Sourcery G++可以在Windows和Linux主机上运行,可用于采用Lite、个人和专业版的bare-iron和GNU/Linux的开发。
3.2 gcc编译器windows平台下移植工作原理
可执行程序从源码到可执行的二进制程序主要步骤如下:
1) 预编译(Pre-Processing):完成对预编译代码的处理;
2) 编译(Compiling):将源代码编译成汇编代码;
3) 汇编(Assembling):将汇编代码会变成目标文件;
4) 链接(Linking):将目标代码和所需要库链成一个完整的应用程序。
本文通过IDE环境实现gcc的上述各个功能的自动链接执行。首先,下载安装Sourcery G++ Lite for ARM装程序,获取相应的编译器、连接器、以及运行库文件等文件信息。然后,将这些文件打包到开发环境安装包中,通过IDE应用程序 NaBuild.exe调用相应的gcc 命令,执行当前程序的编译,以及编译信息的输出等工作。Gcc工具链的各个执行文件都是基于控制台的执行程序,而IDE是图形用户界面(GUI)程序,通过VC6.0编程软件编程实现将他们执行的各种输出信息收集并放到IDE的输出窗口中显示。实现IDE的输出窗口中编译信息的方法如下:
1) 用户点击菜单-编译后,建立一个后台线程OperateBuildThread;
2) 后台线程创建一个匿名管道,发起一个命令子进程以执行编译整个工程的make命令,并将该命令子进程的标准输出和错误输出均定向到由父进程创建的匿名管道的写端,IDE后台线程通过该匿名管道读取编译信息;
3) 后台线程再将所有通过管道获取的编译信息,传送给界面线程显示输出。
伪代码信息表示如下:
//创建匿名管道,用来获取编译信息
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox( "Error On CreatePipe() ");
return “create error”;
}
//建立子进程用来,调用执行相应的gcc程序,发送执行命令
if (!CreateProcess(NULL, strCommand.GetBuffer(0)
,NULL,NULL,TRUE,NULL,NULL,makefilefileaddr,&si,&pi)) {
m_Edit1="Error On CreateProcess() ";
MessageBox( "Error on CreateProcess() ");
return m_Edit1;
}
CloseHandle(hWrite); //关闭写句柄
//循环从匿名管道读取编译信息,如果出错直接退出循环
while (true)
{
if (ReadFile(hRead,buffer,1023,&bytesRead,NULL) == NULL)
break;
strBuf = buffer;
if (strBuf.Find("reserved") != -1)
{
strBuf = strBuf.M id(strBuf.Find("reserved") +8);
strcpy(buffer, strBuf.GetBuffer(0));
strBuf.ReleaseBuffer();
}
m_Edit1 += buffer;
Sleep(200);
}
return m_Edit1;
4 hex程序下载
该系统通过基于FlashMagic所提供的Command Line方法,将.hex程序通过串口线下载到嵌入式系统中。首先将FlashMagic库文件以及Command Line命令文件打包到集成环境目录下,通过IDE应用程序 NaBuile.exe调用相应的命令信息,实现程序的烧写功能。
例如:FM DEVICE(LPC1758,11.0592) COM(3,19200) HARDWARE(BOOTEXEC,25,250) ERASE(DEVICE, PROTECTISP) HEXFILE(TEST.HEX, NOCHECKSUMS, NOFILL, NOPROTECTISP) VERIFY(TEST.HEX, NOCHECKSUMS),表示以擦除程序的方式将hex程序TEST.HEX执行下载。
通过VC6.0编程实现了hex程序下载功能,主要方法步骤如下(程序流程图如图4所示):
1) 用户点击下载按钮会弹出下载配置界面,用来配置波特率、串口号、擦除模式等,如图2所示;
2) 启动后台线程实现具体下载功能;
3) 获取界面配置信息,根据获取的配置信息组包下载命令行参数;
4) 创建匿名管道,用来截获下载时返回的信息以及错误记录;
5) 通过函数CreateProcess()创建子进程,调用FM命令行程序,并传递步骤3所组包的命令行参数,实现HEX文件的下载;
6) 通过匿名管道读取下载信息,并传送到界面线程显示,如图3所示。
图 2 下载配置界面
图 3 下载信息显示
图4 下载功能程序流程图
5 总结
本文介绍了一种基于gcc内核,在windows平台运行的嵌入式系统集成开发软件设计方法,该方法简单实用,成本低,通用性强。该系统广泛应用在电力、煤炭、交通等多个行业。经实践证明,该方法极大地方便了嵌入式系统的定制化开发,满足了不同层次的需求。本文不足之处就是缺乏调试功能,需要对gcc调试器做进一步研究。
6 参考文献
[1] Stallman R M.GNU complier collection internals [EB/OL].
[2] Reis G A,,Chang J,Vachharajani N,et al.SWIFT:Software Implemented Fault Tolerance[C]. . 2005
[3]任伟,张毅,聂捷楠.基于嵌入式系统开发平台的设计与实现[J].微计算机信息.2006(29)
[4] 冯钢, 郑扣根. 基于GCC的交叉编译器研究与开发.计算机工程与设计,2004(11).
![](http://src.gongkong.com/website/gongkong/images/news/icon.png)
提交
傲拓科技NAPLC在青岛地铁4号线BAS系统的应用
傲拓科技中大型PLC选型手册(第五版)
傲拓科技NAPro编程软件使用手册v6.03
傲拓科技NA2000系列PLC硬件手册V2.46
傲拓科技NA2000系列PLC编程使用手册V2.13