历史上的今天
今天是:2024年10月24日(星期四)
2019年10月24日 | 在Eclipse下编译Keil MDK工程
2019-10-24 来源:eefocus
最近业余时间在玩下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 请参数它的帮助文档吧. 祝愉快!
史海拾趣
|
摘 要: 本文描述了一种新型汽车倒车雷达产品(倒车多媒体可视测距终端)硬/软件的开发和设计。首先介绍了它与现行产品相比的优势及工作原理,它以通用车载电视为显示平台,结合红外倒车测距模块,字符叠加模块,主控制模块进行硬件设计和软件开发。 ...… 查看全部问答> |
|
摘 要:在基于嵌入式系统的智能终端中,中文人机交互界面是必须的功能,某些系统还要求中文文本输入。本文介绍了一种占用较少资源并适于在MCU上实现的中文输入法。 引言 目前,以LCD和数字键盘实现的人机交互式界面在智能终端 ...… 查看全部问答> |
|
安防行业每当提到发展趋势时,出现频率最高的词必定是高清、数字、智能,这已经是被公认的三个发展趋向。可是在实现高清化、数字化、智能化的过程中视频无线传输起着桥梁作用,无线传输的便利及灵活紧密将三者联系起来实现在安防行业的应用。 &nb ...… 查看全部问答> |
|
我刚接触WinCe,公司有块自己做的板子,仿照SMDK2410学习板做的。在随板子的说明书中,提到PC机要装Sumang提供的usb驱动。如何安装驱动,我想通过usb自动扫描到新设备,然后安装驱动。可连接后,并没有相应的提示,也就是说usb没有检测到连接的板子 ...… 查看全部问答> |
|
觉得还不错,与大家分享一下! 1.定义的变量不要太多。低128位为用户定义变量的存放区域(默认时),也可以把变量放在高128位,但容易出错,尽量少放,最好不放。通过*.M51可以查看内存变量的存放,最好不要超过110个字节,否则 ...… 查看全部问答> |
|
我使用超级终端时,设置里面明明可以设置以换行符作为发送行末尾。但是 实际上是一字节一字节处理的,速度感觉很慢。 有人会说串口 底层本来就是一字节一字节的处理的,这里我说的是感觉超级终端以一个字节为一个包处理的,不像串口调试工 ...… 查看全部问答> |
|
KZ100探测仪中的“科普彗星”--吉时利4200半导体特性分析系统 吉时利4200半导体特性分析系统用于偏置探针以及采集集成电路器件漏电流和漏源电压 (IDVDS) 数据。该系统配备4个4200-SMU[1] (源-测量单元)以及三轴线缆。在扫描模式下,将速度设置为快速,可以获得IDVDS曲线。源电流[2](IS)和漏电流(ID)的电 ...… 查看全部问答> |
|
今天帮人调试了下AT24C02的程序,最终可以成功写入和读取,但是问题是读取的数值总是比关掉电源时的数值小2,而且在0~9这段期间不能成功写入,初始化都为9,例如在数值为3时断掉电源,假若成功保存,应该在重新开启电源时读取数值3,但结果显示的却 ...… 查看全部问答> |




