《一种嵌入式系统集成开发环境的实现方法》由会员分享,可在线阅读,更多相关《一种嵌入式系统集成开发环境的实现方法(5页珍藏版)》请在金锄头文库上搜索。
1、种嵌入式系统集成开发环境的实现方法何斌(南大傲拓科技江苏有限公司 江苏南京)摘要:为了适应嵌入式系统发展,缩短基嵌入式系统开发工具研发周期,开发一种低成本的 嵌入式软件开发工具。本文设计了一种基于ARM7及Cortex-M3系列处理器的集成开发软 件。该软件基于gcc内核模式,运行在window系统环境,实现项目管理、代码编辑、程序编 译、编译信息输出、程序程序下载等功能。该软件极大地方便了用户的使用,为嵌入式系统 的深入发展提供了有利的支撑平台。关键词:嵌入式系统;编译器移植;gcc; IDE;Abstract: For embedded system development and cut
2、ting 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,com
3、piling 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引言随着嵌入式系统的发展,在向用户提供以为微处理器为核心的软硬件开发平台时,需要开 发出相应的编译工具链、可执行程序串口下载
4、工具,由于编译器的原理复杂,开发周期长,成 本高,开发全新编译器需要付出高昂的代价,另一方面编译生成的可执行程序,还需要用户通 过相应的工具手动配置下载到嵌入式系统中,对用户使用带来了极大的不便。因此,嵌入式软件集成开发环境是不可或缺的开发工具。目前,我国公司用的绝大多数集 成开发环境都来自国外,不仅为企业带来了一定的经济负担,增加成本,同时也为嵌入式系统 产品的定制化开发带来了极大的不便。因此,开发具有自主知识产权的嵌入式集成开发软件对 于提升企业核心竞争力就变得非常重要。本文针对市场上通用的ARM7及Cortex-M3系列处理器,开发了一套运行在windows平 台下的基于GCC内核的嵌入
5、式系统集成开发软件,实现了对项目管理、代码编辑、C语言代 码编译、编译信息输出、程序下载等功能。2总体设计该系统基于VC6.0工具开发,主要组成部分包括:项目管理、文件管理、代码编辑、程序 编译、下载操作、界面显示等,实现了从工程建立,代码文件编辑,代码编译、编译信息输出 以及程序下载等一系列功能,图1为模块总体架构设计。该系统主界面基于MFC多文档架构,可视化操作,主要包括菜单栏、工具栏、项目栏、 信息栏,以及文档编辑显示区域。文档编辑功能基于CRichEditView类开发,可以根据C语言 关键字、变量、函数不同显示不同的颜色,并识别注释符号,可以屏蔽相应的代码,并用绿色 标记,极大提高代
6、码的可读性。提供了操作菜单用来执行编译,下载功能。通过上述功能, 将代码编辑器、编译器、编译信息查看器和图形用户界面工具有机地统一到一起。其中,核心 功能包括:代码编译和串口下载。编译链接GCC、CMM401 0401.hex编辑Flash Magic项目管理文件管理程序编辑程序编译界面显示程序下载烧写ISPLPC1758CMM401功能模块,-Eerom.o,Server.o Cmm_manage.o Uart.o ,I2C.o SPI.o,IAP.oUserPr ot ocol.c, UserPr ot ocol.h, main.c,图1总体架构设计框图3基于gcc内核的编译器开发原理31
7、 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仿真器的连接,另外还有可选
8、的 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的上述各个功能的
9、自动链接执行。首先,下载安装Sourcery G+ Lite for ARM装程序,获取相应的编译器、连接器、以及运行库文件等文件信息。然后, 将这些文件打包到开发环境安装包中,通过IDE应用程序NaBuild.exe调用相应的gcc命令, 执行当前程序的编译,以及编译信息的输出等工作。Gcc工具链的各个执行文件都是基于控制 台的执行程序,而IDE是图形用户界面(GUI)程序,通过VC6.0编程软件编程实现将他们执行 的各种输出信息收集并放到IDE的输出窗口中显示。实现IDE的输出窗口中编译信息的方法 如下:1) 用户点击菜单-编译后,建立一个后台线程OperateBuildThread;2)
10、 后台线程创建一个匿名管道,发起一个命令子进程以执行编译整个工程的make命 令,并将该命令子进程的标准输出和错误输出均定向到由父进程创建的匿名管道的写 端,IDE后台线程通过该匿名管道读取编译信息;3) 后台线程再将所有通过管道获取的编译信息,传送给界面线程显示输出。 伪代码信息表示如下:创建匿名管道,用来获取编译信息if(!CreatePipe (&hRead,&hWrite,&sa,0)MessageBox( Error On CreatePipe();return “create error;建立子进程用来,调用执行相应的gcc程序,发送执行命令if (!CreateProcess(N
11、ULL, strCommand.GetBuffer(O),NULL,NULL,TRUE,NULL,NULL,makefilefileaddr,&si,&pi)m_Editl=Error On CreateProcess();MessageBox( Error on CreateProcess(); return m_Edit1;CloseHandle(hWrite); 关闭写句柄循环从匿名管道读取编译信息,如果出错直接退出循环while (true)if (ReadFile(hRead,buffer,1023, &bytesRead,NULL)= NULL)break;strBuf = buf
12、fer;if (strBuf.Find(reserved) != -1)strBuf = strBuf.Mid(strBuf.Find(reserved) +8);strcpy(buffer, strBuf.GetBuffer(O); strBuf.ReleaseBuffer();m_Edit1 += buffer;Sleep(200);return m_Edit1;4 hex程序下载该系统通过基于FlashMagic所提供的Command Line方法,将.hex程序通过串口线下载到 嵌入式系统中。首先将FlashMagic库文件以及Command Line命令文件打包到集成环境目录 下,通
13、过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) 用户点
14、击下载按钮会弹出下载配置界面,用来配置波特率、串口号、擦除模式等,如 图2所示;2) 启动后台线程实现具体下载功能;3)获取界面配置信息,根据获取的配置信息组包下载命令行参数;4)创建匿名管道,用来截获下载时返回的信息以及错误记录;5)通过函数CreateProcess ()创建子进程,调用FM命令行程序,并传递步骤3所组包 的命令行参数,实现HEX文件的下载;6)通过匿名管道读取下载信息,并传送到界面线程显示,如图3所示。图2下载配置界面图3下载信息显示图4下载功能程序流程图5总结本文介绍了一种基于gcc内核,在windows平台运行的嵌入式系统集成开发软件设计方 法,该方法简单实用,成本低
15、,通用性强。该系统广泛应用在电力、煤炭、交通等多个行业。 经实践证明,该方法极大地方便了嵌入式系统的定制化开发,满足了不同层次的需求。本文不 足之处就是缺乏调试功能,需要对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 ToleranceC. . 20053 任伟,张毅,聂捷楠基于嵌入式系统开发平台的设计与实现J.微计算机信息.2006(29)4 冯钢,郑扣根.基于GCC的交叉编译器研究与开发计算机工程与设计,2004(11).