在Eclipse下编译Keil MDK工程

发布者:cxx7848653最新更新时间:2019-10-24 来源: eefocus关键字:Eclipse  编译  Keil  MDK工程 手机看文章 扫描二维码
随时随地手机看文章

最近业余时间在玩下ARM7, 使用Keil uVision集成开发环境, 有时真的受不了, 编辑器的代码提示/高亮功能几乎为0, 代码基本是要一个一个字母往里敲! 想想在的VS, Eclipse等下开发多舒服, 都什么年代了, Keil竟然还不升级下它的代码编辑器!

后来发现MDK里有个Eclipse插件, 想想以后可以在Eclipse for C/C++下写代码了--狂喜. 于是, 赶紧安装....我晕, 真是坑爹啊, 这插件只能导入/调试Keil MDK工程, 没看到哪里可以编译啊? ...看了下此插件的说明文档, 确实是没有提到如何在Eclipse下建立/编译MDK工程, 确认已被坑...


还没心死, 到网上找呀找, 找呀找, 有人说要用Windows下的交叉编译器, 看了一下, 看不懂, 很烦...无果. 自己又折腾了下, 使用Makefile+Keil MDK自带的编译器可以, 但使用Eclipse CDT自动产生的Makefile文件又不行, Keil MDK编译器很多选项都不支持...总不能要我每次都自己写Makefile吧? 对Makefile又不熟, 不爽啊...

无路可走了, 为了使以后写代码轻松点, 决定自己写一个Eclipse编译辅助工具--KeilBuilder. 它实现的功能是: 搜索工程目录里的所有源文件, 然后调用Keil MDK自带的编译器, 链接器等编译工程, 最后生成期望的Hex文件. 然后再用Eclipse插件下载或调试. 试了一下, 效果不错. 如下图: (注: 谁有更好的方法请分享下吧...)

下面的此工具在Eclipse下的具体使用方法:
1. 把KeilBuilder.exe复制到MDK的编译器目录下, 一般为: C:KeilARMBIN40下, 这要看你的MDK安装在哪了.


2. 新建一个C Project 工程, 并选择Cross GCC交叉编译工具为本工程编译工具.
    .通过菜单File -> new -> C Project 新建一个空的C工程. 在弹出的对话框中如下图, 注意要选择"Cross GCC"工具链:


         

3. 为新建的工程导入Keil工程或仅导入源文件. 如下图:

        
4. 设置Eclipse工程交叉编译环境.
    .在左边的"Porject Explorer"窗口内鼠标右键单击工程名, 选择最后的菜单项"Properties"项.


    .在C/C++ Build -> Settings界面中, 设置"Configuration"为"[ All configurations ]"; 设置"Cross Setttings"的"Path"即交叉工具链路径为KeilBuilder所有的目录, 如C:KeilARMBIN40. 如下图:


   

    .在"Cross GCC Compiler"的"Command"下填入"KeilBuilder -no", 表示什么也不做; 另外的"Cross GCC Linker"及"Cross GCC Assembler"的"Command"中也设置为同值. 此设置为防Eclipse对不存在的GCC工具的报警, 如下图:


    .在C/C++ Build 界面中, Builder Settings 中去掉"Use default build command"上的勾, 并在"Build command"中填入"KeilBuilder.exe -d xxxx -e". 基中xxx为工程根目录路径, "-d"表示设置KeilBuilder的工程路径, "-e"表示在编译时自动对Eclipse工程进行设置, 目前仅设置"C/C++ Build" -> "Settings" -> "Cross GCC Compiler" -> “Symbols”和”Includes”以及”Cross GCC Assmebler” -> “General”项. 如下图:


    .在C/C++ Build 界面中的"Behaviour"选项卡中, 在"Build(Incremental build)"中填入"-s"表示安静编译; 在"Clean"中填入"-c"表示清理工程. 如下图:
    .在C/C++ Build 中的 "Discovery Options" 中去掉 "Enable generate scanner info command"选项. 如下图:


不用设置预编译宏或者Includes选项, 因为KeilBuilder会自动帮忙加进去. 所以, 有时候你看到代码还有一大堆的错误时, 编译一次后, 刷新工程(右键工程名 -> "Refresh")就木有错误鸟.

5. 到此, 可以编译你的工程了. 通过菜单项"Project" -> "Build All"编译工程, 或"Project" -> "Clean..."清理工程. 编译不通过或得到不正确Hex文件的继续往下看.如下图:


6. 在Eclipse中添加一个外部工具, 这样可以通过Eclipse菜单项运行KeilBuilder, 方便. 
    .在Eclipse菜单中选择Run -> External Tools -> External Tools Configurations... 
    .在弹出的对话框中双击"Program" 增加一个外部工具. 
    .在Name中填入"KeilBuilder". 
    .在"Main"选项卡中, Location通过"Browse File System..." 选择KeilBuilder程序, 如: C:KeilARMBIN40KeilBuilder.exe; 在Working Directory中填入KeilBuilder所在的目录, 如C:KeilARMBIN40.
    .在"Build"选项卡中, 去掉"Build before launch"上的勾.
    .最后单击"Apply" -> "Run"完成添加, 并运行KeilBuilder工具.

此后你就可以通过菜单Run -> External Tools -> KeilBuilder 来快速运行KeilBuilder工具了. 如下2图:

7. 经过前面4步的设置, 你的工程编译很可能会编译不通过, 或者编译出来的Hex文件下载不正确. 那是因为一些编译器/链接器选项你还没有配置.


这时, 你可以通过菜单Run -> External Tools -> KeilBuilder来运行KeilBuilder工具, 通过界面来设置这些参数. 或者也可以直接用记事本打开工程目录中的"cts.ini"(如果工程目录中不存在此文件, 请转到KeilBuilder所在的目录下的"cts.ini", 如果KeilBuilder所在目录下也没有, 那么请双击运行下KeilBuilder程序, "cts.ini"就会自动生成)对参数进行修改.

注意, 在KeilBuilder界面上设置参数时, 必须选择好自己的工程目录, 如果没有选择工程目录, 设置的结果会保存到KeilBuilder所在的目录下的"cts.ini"文件中. KeilBuilder在首次运行时, 会在其所在目录下生成cts.ini文件并设置参数为默认值. KeilBuilder在每次编译一个工程时, 如果该工程目录下发现"cts.ini", 就使用工程目录下的"cts.ini"; 如果没有发现"cts.ini"文件, 则把KeilBuilder所在目录下的"cts.ini"文件复制一份到工程目录下, 然后再编译.

关于"cts.ini"文件中的这些参数, 它对应于Keil MDK环境中的ASM编译器/C编译器/Linker选项. 因为时间问题, 在KeilBuilder中并未实现(以后有空再搞吧)类似于Keil uVision中的选项式配置. 如果熟悉这些参数最好, 不熟的话可以先在Keil uVision中配置好, 再对应添加到"cts.ini"中.
    在"cts.ini"文件中的"ASM=" 后面的内容对应于Keil uVision工程选项中的"Asm"选项.
    在"cts.ini"文件中的"CC=" 后面的内容对应于Keil uVision工程选项中的"C/C++"选项.
    在"cts.ini"文件中的"LNK=" 后面的内容对应于Keil uVision工程选项中的"Linker"选项.
8. 设置"cts.ini"文件中的编译选项确实不是一般人能搞定. 我也不懂(谁懂的做个说明分享下吧, 可以的话还能集成为UI, 更方便). 因为人懒, 不想去深究这些编译(链接)器选项, 于是想到了个折中的办法: 通过Keil uVision来设置好这些参数并编译工程, 然后把它实时的编译选项显示出来以供参考! 这样当编译选项无法搞定时, 就把整个工程交给keil uVision来编译一次, 然后参考实时获取的参数再对Eclipse工程的"cts.ini"文件做相应的修改就OK了.

在keil uVision中捕获它的编译选项, 需要做如下的设置. 在工程属性"Options for Target xxxx"的"User"选项卡中 设置keil编译后运行”KeilBuilder.exe -p”. 表示捕获keil uVision编译选项, 如下图:


           

下图为KeilBuiler捕获到的Keil uVision工程编译/链接参数:


9. 不多说了, 编译, 下载, 调试. 关于如何使用MDK Plugin for Eclipse 请参数它的帮助文档吧. 祝愉快!

关键字:Eclipse  编译  Keil  MDK工程 引用地址:在Eclipse下编译Keil MDK工程

上一篇:Eclipse下的Java反编译插件 查看源代码不再困难
下一篇:软浮点 技术使用--GCC

推荐阅读最新更新时间:2024-11-12 20:44

W806的编译环境准备
# 一、资料软件准备工作 ### 1.1 硬件准备 W806开发板、USB转串口线 ### 1.2 软件准备 1. Windows端的编译软件:CDK 链接:https://pan.baidu.com/s/1mslRbcuC0oGrNsjQJY3wHQ 提取码:qdut 2. 烧录工具:W800 Upgrade Tools.exe (http://www.winnermicro.com) 3. 工程文件:SDK (http://www.winnermicro.com) $textcolor{red}{注意:S
[单片机]
如何安装arm-linux-gcc编译
如何安装ram-linux-gcc,之前安装过几次,刚开始没有成功,觉得很麻烦,后来又一次,安装成功了,爽啊,所以想跟各位分享一下。 首先准备好arm-linux-gcc的包,比如说是arm-linux-gcc-fh.tar.gz,首先是解压缩,路径可以随便放,但是个人建议最好放在/opt这个目录下面,使用如下命令: tar xvzf arm-linux-gcc-fh.tar.gz(空格)C(空格/(注意这之间的空格),然后就解压缩好了,接下来就是要修改一下配置文件了,切换到root权限,然后,输入如下命令: vi /etc/bash.bashrc 然后在最后面一行加入如下语句: expor
[单片机]
Linux之ARM(IMX6U)裸机汇编LED驱动实验--编译驱动
前言 我们是要编译出在 ARM 开发板上运行的可执行文件,所以要使用交叉编译器 arm-linux-gnueabihf-gcc 来编译。 交叉编译链的安装参考另外一篇博文:交叉编译链的安装 编译代码 本试验就一个 leds.s 源文件,所以编译比较简单。 源文件代码(leds.s): .global _start @全局标号 _start: /*使能所有外设时钟 */ LDR R0 , =0x020c4068 @CCGR0 LDR R1 , =0xffffffff @要想CCGR0写入的数据 STR R1 , @将R1的值写入到R0中 LDR R0 , =0x020c406
[单片机]
Linux之ARM(IMX6U)裸机汇编LED驱动实验--<font color='red'>编译</font>驱动
CEVA为CDNN神经网络编译器增添ONNX支持
最新CDNN版本具有开放式神经网络交换(ONNX)支持,开发人员可以将 在各种深度学习框架中培训的神经网络无缝部署在 CEVA-XM 视觉DSP和NeuPro AI处理器上 CEVA,全球领先的智能和互联设备的信号处理平台和人工智能处理器IP授权许可厂商 宣布其获奖的 CEVA 深度神经网络 (CDNN) 编译器的最新版本支持 开放式神经网络交换 Open Neural Network Exchange(ONNX)格式。 CEVA副总裁兼视觉业务部门总经理Ilan Yona 表示:“CEVA全力确保实现开放、可互操作的AI生态系统,人工智能应用程序开发人员能够充分利用生态系统中各种不同深度学习框架,考虑其功能和易用性,为所
[物联网]
Keil c 优化选项
优化级别说明(仅供参考): 则其中的 Code Optimization 栏就是用来设置C51的优化级别。共有9个优化级别(书上这么写的),高优化级别中包含了前面所有的优化级别。现将各个级别说明如下: 0级优化: 1、 常数折叠:只要有可能,编译器就执行将表达式化为常数数字的计算,其中包括运行地址的计算。 2、 简单访问优化:对8051系统的内部数据和位地址进行访问优化。 3、 跳转优化:编译器总是将跳转延至最终目标上,因此跳转到跳转之间的命令被删除。 1级优化: 1、 死码消除:无用的代码段被消除。 2、 跳转否决:根据一个测试回溯,条件跳转被仔细检查,以决定是否能够简化或删除。 2级优化: 1、 数据覆盖:适于静态覆盖的数据
[单片机]
Proteus运行Keil编写的C语言步骤
Proteus运行Keil编写的C语言步骤 1.在Keil编写好程序以后,在左侧项目栏中单击鼠标右键,如图 点击Options for Target Target1 选项,弹出下列窗口 在Target标签中将Xtal(MHz)中的晶振频率改为12.0;再在Output标签中勾选Create HEX Fi复选框。 完成上面两项设置后点击确定。 再点击编译,生成Hex文件。 再在Proteus中双击的51芯片,按下图修改晶振频率,添加hex文件即可运行。 protues元件库中英文对照表:   7407 驱动门   1N914 二极管   74Ls00 与非门
[单片机]
Proteus运行<font color='red'>Keil</font>编写的C语言步骤
GNU ARM汇编--(二)汇编编译链接与运行
GNU的汇编器是GNU Tools的一部分,可以用来ARM的汇编语言源代码编译为二进制文件.关于GNU汇编器的介绍可以搜索《GNU Assembler Manual》.这里我们只是做一个简短的介绍,对GNU汇编器有一个大概的认识,同时通过两个例子了解一下GNU ARM汇编. 给出一个模板文件: view plain copy .text ; Executable code follows _start: .global _start ; _start is required by the linker .
[单片机]
3.5根文件系统的制作
根文件系统其实包含两个含义:1.是根。2.是文件系统。 根:就是第一个的意思。必须有的。 文件系统:就是我们在编译linux内核看到的: 上面的目录和文件就是文件系统的。 接下来我们就来创建文件系统: 创建目录: 1.2.创建设备文件: 这里我们需要下面文件: 1.3.加入配置文件: 把它解压开,在把它的内容拷贝到/rootfs/etc: 接着是添加内核模块: 1.4.添加内核模块: 首先是编译内核模块: Make modules ARCH=arm CROSS_COMPILE=arm-linux- 这个编译的过程会有点久。 最后编译好了内核模块,接下来就是拷贝到我们的
[单片机]
3.5根文件系统的制作
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved