原地址:http://blog.youkuaiyun.com/xuzhenglim/article/details/7232157
Slickedit 是一款编程效率很高的编辑器,它能实现很多功能,自带的vsbuild工具在编译程序自动寻错等方面真的是很优秀,并且自带的ecmas\vim\vs等等常用的编程环境,遗憾的是它只是一款编辑器,并不针对嵌入式,对硬件方面支持严重不足,无法直接利用自带的debugger调试硬件。
相比较之下,eclipse在工程管理和硬件支持上要比slickedit好得多,但是不得不承认,靠组件搭建起来的环境那个效率跟速度实在是不敢恭维,eclipse下搭建GCC环境+GNUARM+CDT+slickedi,虽然也可以实现硬件调试,对C支持完全视乎环境而定,而且搭配GNU ARM组件后,对arm-eabi环境配置达到一个十分方便的地步,基本可以实现可视化配置,但是,遗憾的是,arm eabi环境的编译速度太慢了,CDT搭建的调试的界面也不能跟真正的IAR、MDK相比,在耗费了一个星期将lpc1788移植到GCC并且搭建完一个理想的环境后,还是放弃不用了, 重新跑回MDK的怀抱。
其实MDK环境的调试还是很不错的,至少跟eclipses相比好的不是那么一两点,更重要的是,MDK的编译速度比arm eabi的编译速度要好的多,也稳定的多,但是在代码自动完成、美化、布局、编程环境等方面还是不如slickedit,这也是很多IDE的通病,要是连这个都做得完美,那就没其他编辑器的事了。
于是我也想利用slickedit与gcc搭配的原理实现slickedit与MDK的编译功能。
这个想法其实从09年开始接触过mdk跟slickedit的时候就有过了, 但是当时对两着完成没有任何认知,结果在努力好几个月晚后还是放弃了,还是老样子,slickedit编辑,保存切换到mdk编译。
这样子很繁琐,一个是两个编辑器编写与显示风格不同,一个是编写的跟编译的定位不一致,带来了很多麻烦,虽然后面又努力几下,实现了slickedit编译iar,对slickedit有了更深入的了解,但是还是不足以搞定mdk.
网上虽然有人修改了keilv2v3的宏定义,可以直接放到slickedit运行,但是MDK4突然改变工程文件格式,至今没有个搞出来,也有人说用via文件,可以直接从mdk编译选项拷贝保存成txt文件用via跑。这个方法可行,但是繁琐,基本每次工程都要修改很多via,加个文件也要修改,太繁琐了,所以这个方法也摈弃了。
最后,只能自己来了。当然结果你们也知道了。
废话不说, 开始,首先需要了解的是slickedit的vsbuild的几个变量:
%rp工程路径
%rn 工程名
%rw 当前工作目录
%n文件名(不带文件路径和类型后缀)
%f文件名(类型后缀)
%bd 配置文件夹(比如debug\release)
%(环境变量名)这个很重要,很多环境都是这样掉用的
%i 工程包含的所有路径,会自动扩展成 -I path1 -I path2
%defd 工程的所有宏定义变量
%libs 所有工程定义的库
1.要想slickedit完成搭配MDK建立的工程,首先有一个是必须的,就是先建立MDK工程,配置好工程目标,工程文件以及生成文件的路径,这里强制要求将obj与list都生成在工程文件所在文件夹的debug目录。
2.在系统环境变量增加3个变量
A.MDK ARM的BIN4.所在路径,命名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\ARM\RV31\LIB
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手册上都有介绍。
最后就是要注意的是build与rebuild都不要去动。保存。
选中这个工程类型建立工程,在directories下,将需要的路径包含进去,在complie\link里面将宏定义更需要包含的库写进入。
添加跟MDK工程一样的文件, 编译下看。。
当然,会有例程给你们的。
至于图片,太麻烦了, 还是省省吧,太家可以自己弄下。
此外还有几个命令可以给你们用、
%(MDKUV4)\uv4.exe -d %rn.uvproj调用MDK并直接进入调试页面。
%(MDKUV4)\Uv4.exe -f %rn.uvproj调用MDK下载程序
这些命令的特点是使用的时候会开启MDk,但是功能执行完后,MDK也会自动关闭,非常方便,当然。怎么用是看你们的了。
在此,郑重声明,全文都是原创的,转载请注明出处。
例程地址:
http://download.youkuaiyun.com/download/xuzhenglim/4043462
此外,感谢以前在网上发关于slickedit跟MDK、eclipse、GNU相关文章的朋友们,这个成果都是从你们的基础上得来的,没有你们先前的辛苦付出,就不会有现在的这篇文章。谢谢。
当然,作为答谢,例程是不会索分的。我的分够多了,都用不完,所以也请各位枪手发扬下良好品格不要用这个骗分。