Slickedit 实现MDK4编译


       Slickedit 是一款编程效率很高的编辑器,它能实现很多功能,自带的vsbuild工具在编译程序自动寻错等方面真的是很优秀,并且自带的ecmas\vim\vs等等常用的编程环境,遗憾的是它只是一款编辑器,并不针对嵌入式,对硬件方面支持严重不足,无法直接利用自带的debugger调试硬件。

      相比较之下,eclipse在工程管理和硬件支持上要比slickedit好得多,但是不得不承认,靠组件搭建起来的环境那个效率跟速度实在是不敢恭维,eclipse下搭建GCC环境+GNUARM+CDT+slickedi,虽然也可以实现硬件调试,对C支持完全视乎环境而定,而且搭配GNU ARM组件后,对arm-eabi环境配置达到一个十分方便的地步,基本可以实现可视化配置,但是,遗憾的是,arm eabi环境的编译速度太慢了,CDT搭建的调试的界面也不能跟真正的IARMDK相比,在耗费了一个星期将lpc1788移植到GCC并且搭建完一个理想的环境后,还是放弃不用了, 重新跑回MDK的怀抱。

       其实MDK环境的调试还是很不错的,至少跟eclipses相比好的不是那么一两点,更重要的是,MDK的编译速度比arm eabi的编译速度要好的多,也稳定的多,但是在代码自动完成、美化、布局、编程环境等方面还是不如slickedit,这也是很多IDE的通病,要是连这个都做得完美,那就没其他编辑器的事了。

       于是我也想利用slickeditgcc搭配的原理实现slickeditMDK的编译功能。

这个想法其实从09年开始接触过mdkslickedit的时候就有过了, 但是当时对两着完成没有任何认知,结果在努力好几个月晚后还是放弃了,还是老样子,slickedit编辑,保存切换到mdk编译。

       这样子很繁琐,一个是两个编辑器编写与显示风格不同,一个是编写的跟编译的定位不一致,带来了很多麻烦,虽然后面又努力几下,实现了slickedit编译iar,slickedit有了更深入的了解,但是还是不足以搞定mdk.

       网上虽然有人修改了keilv2v3的宏定义,可以直接放到slickedit运行,但是MDK4突然改变工程文件格式,至今没有个搞出来,也有人说用via文件,可以直接从mdk编译选项拷贝保存成txt文件用via跑。这个方法可行,但是繁琐,基本每次工程都要修改很多via,加个文件也要修改,太繁琐了,所以这个方法也摈弃了。

       最后,只能自己来了。当然结果你们也知道了。

       废话不说, 开始,首先需要了解的是slickeditvsbuild的几个变量:

       %rp工程路径

       %rn 工程名

       %rw 当前工作目录

       %n文件名(不带文件路径和类型后缀)

       %f文件名(类型后缀)

       %bd 配置文件夹(比如debug\release

       %(环境变量名)这个很重要,很多环境都是这样掉用的

       %i 工程包含的所有路径,会自动扩展成 -I path1 -I path2

       %defd 工程的所有宏定义变量 

       %libs 所有工程定义的库

       1.要想slickedit完成搭配MDK建立的工程,首先有一个是必须的,就是先建立MDK工程,配置好工程目标,工程文件以及生成文件的路径,这里强制要求将objlist都生成在工程文件所在文件夹的debug目录。

       2.在系统环境变量增加3个变量

       A.MDK ARMBIN4.所在路径,命名MDKARM

       b.MDK UV4的路径 命名MDKUV4

       C.MDKARM连接所需要的必要lib所在的路径,命名MDKARM_LIB_PATH

       D.MDKARM_PATH 编译用到的系统库的文件路径

       我的4个路径分别如下, 这个不必一样,只是参考,个人习惯所有工具放d盘,因为大部分程序都是属于绿色或者直接调用的,重装系统也没问题。

       MDKARM D:\for_tesy\keil\ARM\BIN40

       MDKUV4 D:\for_tesy\keil\UV4

       MDKARM_LIB_PATH  D:\for_tesy\keil\ARM\RV31\LIB

       MDKARM_PATH  D:\for_tesy\keil\ARM

    3.建立下个新的slickeditg工程在MDK工程当前目录下,注意名字一定是要一样的。

新建工程类型,命名随便,类型otherc\c++,在接下来的工程配置界面里面,点configurations,删除release配置,因为用不到时,留着也是碍眼。接着在工程编译工具tool里,分别设置工具如下

Complier:

       %(MDKARM)\armcc.exe -c --cpu Cortex-M3 -g  -O2 --apcs=interwork %i %defd -o "%bd%n.o" --omf_browse "%bd%n.crf" --depend "%bd%n.d" "%f"

       (注意我这里是用的优化等级-O2,可以改成-O0,一般默认的都是-O0,%bd会新建一个配置文件夹,比如debug就会新建debug文件夹,所以才强制要求mdk将生成文件都放这里面)

       *.s:

       %(MDKARM)\armasm.exe --cpu Cortex-M3 -g --apcs=interwork %i --list "%bd%n.lst" --xref -o "%bd%n.o" --depend "%bd%n.d" "%f"

       Link:

       %(MDKARM)\armlink.exe -o "%bd%rn.axf" %f  %libs --cpu Cortex-M3 --strict --scatter %bd%rn.sct --summary_stderr --info summarysizes --map --xref --callgraph --symbols --info sizes --info totals --verbose --info unused --info veneers --list "%bd%rn.map" --libpath=%(MDKARM_LIB_PATH)

       (这里要注意的是,%f会自动的把.o文件输给armlink,%libs也是,而最后的--libpath=%(MDKARM_LIB_PATH)是重点,一般MDK的变量自己设置,所以我们并不知道是这样的,但是实际上是,MDKlinker编译是需要调用到armlib的,但是armlink并不知道它在哪,所以需要假如这个路径,当你碰到L6310W警告的时侯一般都是因为找不到armlib,所以要指明路径给它,嗯?问我怎么知道的,看MDK的用户手册啊白痴。)

       上面的命令并不是不变的, 视乎你自己的要求而定,但是这个就需要你好好的看下MDK的手册的。里面写的很详细,唯一不足的是,都是英语,还有例程不多。

       接着,如果你要生成hex,简单,直接在build页下面

       Post build commands:

       下面增加下面的语句就可以,%(MDRARM)\fromelf.exe --i32 --OUTPUT %bd%rn.hex %bd%rn.axf

       当然,也可以生成其他格式的,比如bin,具体的mdk手册上都有介绍。

       最后就是要注意的是buildrebuild都不要去动。保存。

       选中这个工程类型建立工程,在directories下,将需要的路径包含进去,在complie\link里面将宏定义更需要包含的库写进入。

       添加跟MDK工程一样的文件, 编译下看。。

       当然,会有例程给你们的。

       至于图片,太麻烦了, 还是省省吧,太家可以自己弄下。

       此外还有几个命令可以给你们用、

       %(MDKUV4)\uv4.exe -d %rn.uvproj调用MDK并直接进入调试页面。

       %(MDKUV4)\Uv4.exe -f %rn.uvproj调用MDK下载程序

       这些命令的特点是使用的时候会开启MDk,但是功能执行完后,MDK也会自动关闭,非常方便,当然。怎么用是看你们的了。

       在此,郑重声明,全文都是原创的,转载请注明出处。

       例程地址:

       http://download.csdn.net/download/xuzhenglim/4043462 

       此外,感谢以前在网上发关于slickeditMDKeclipseGNU相关文章的朋友们,这个成果都是从你们的基础上得来的,没有你们先前的辛苦付出,就不会有现在的这篇文章。谢谢。

       当然,作为答谢,例程是不会索分的。我的分够多了,都用不完,所以也请各位枪手发扬下良好品格不要用这个骗分。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值