下载了《SlickEdit 用MDK工具编译STM32的例程》,内容基于Keil uV4,在5.x版本后,其中的编译器路径和ARM库文件路径有改动,我重新修改了文档。方便使用新版本slickedit和keil的同学节约摸索时间。
因为有人抱怨说以前的方法不行,所以这次用个简单的工程来示范怎么用SLICKEDIT 编译MDK的工程。
要编译MDK,首先需要理解MDK的编译的过程,不同于IAR,IAR只要有个工程,通过IAR的一个工程命令IarBuild程序就能编译整个工程,所以编译IAR用很多软件都可以,但是MDK就不样了,MDK需要到独立命令,在MDK安装目录的X:\Keil_v5\ARM\ARMCC\bin命令下,分别是armcc.exe(编译C文件)armasm.exe(编译汇编)armlink.exe(链接成最终输出文件)fromelf.exe(转换输出文件,用来转换最终文件成烧写文件)。
要用slickedit 编译MDK需要注意的是,不能把两个完全一样的文件放在同一个工程里面编译,VSBUILD会报错,但是不会具体错误,此外,需要一个对应芯片的SCT文件,其实也就相当于一个rom与ram的分布文件,MDK本身就有那文件,当MDK使用默认的时候它是不会出现在命令里的,所以有的人不知道,但是MDK自己会在连接的时候加进去,要获得这个文件,能够在MDK的工程属性设置页面(魔法棒)Linker页去点选现Use Memmory Layout form Target Dialog的勾,然后下面的scatter filer会变成可选,这时候点edit就出现这个文件了,它一般出现在MDK的输出目录里面,我们需要把它拷贝到对应地方。
再讲下Slickedit的编译吧,slickedit的编译是有个结果文件夹的,命名为%bd,具体文件夹由编译工具名决定,比如我们选的是Debug,那么编译命令执行的时候会看看Debug这个文件在不在,不在会新个,然后开始编译,编译完后会自动用debug的文件输入到链接命令中,因此,编译命令的输出命令就都应该在debug里面,但是不用指定,我们只需要用%bd就能让文件自动指定在对应的文件夹,%n则是当前编译的文件名称,这样通过下面的命令就能生成与MDK一样的编译文件。此外%i是将slickedit的工程包含路径(在工程属性页面的Directories标签页里面,有个Include列表,把路径加入就好, 不过为了使得一个工程在不同地方都能正常编译,需要使用到相对路径设置,就是相对工程根目录做为基本路径。具全做法是用%rp,%rp是当前工程目录,然后是能使用../进入上层目录的,具体的可以自己尝试。)
接下来是具体过程,首先是slickedit 与MDK4要安装。
接下来几个基本的环境变量要设置(设置完是要重启的):
MDKARM X:\Keil_v5\ARM\ARMCC\bin
MDKARM_LIB_PATH X:\Keil_v5\ARM\ARMCC\lib\
上面X为当前keil安装的盘符
然后新建个slickedit工程属性,应用语言当然是OtherC\C++,然后Tool要选择debug或者release,或者新建一个,但是不能用all Config,设置那个是没用的,接着把下面命令填进去,要对应页对应命令功能,还要记得要把输出捕获capture Output勾上。
Tool 页面
Complier:%(MDKARM)\armcc -c --cpu Cortex-M3 -g -O2 --apcs=interwork %i %defd -o "%bd%n.o" --omf_browse "%bd%n.crf" --depend "%bd%n.d" %f
*.s:%(MDKARM)\armasm --cpu Cortex-M3 -g --apcs=interwork %i --list "%bd%rn.lst" --xref -o "%bd%n.o" --depend "%bd%n.d" %f
Link:%(MDKARM)\armlink --cpu Cortex-M3 --libpath=%(MDKARM_LIB_PATH) --strict --scatter "%rpStartUp\%rn.sct" --summary_stderr --info summarysizes --map --xref --callgraph --symbols --info sizes --info totals --info unused --info veneers --list "%bd%rn.map" -o "%bd%rn.axf" %f %libs
Build:%(VSLICKBIN1)vsbuild build %w %r
Rebuild:%(VSLICKBIN1)vsbuild rebuild %w %r
Build 页面
Post Build Command:%(MDKARM)\fromelf --i32 --OUTPUT %bd%rn.hex %bd%rn.axf(用来生成我们需要的烧写文件, 不加这个可是没hex文件的,当然,改成生成bin文件也是可以的,不过命令要改下)
Complie/Link 页面(宏定义画面,因为使用STM32的固件库的时候会有些定义需要在系统中提前定,就是STM32F10X_LD,USE_STDPERIPH_DRIVER,直接加在下面)
需要注意的是,link命令的最终输出文件是可以不用输出在debug的,同样的sct文件与hex文件也可以放在别的地方,可以另外建立单独的文件夹存放这几个文件, 不过命令对应文件位置要改下而已,但是如果你要调试,那位置还是别改同时需要注意的是,该工程生成的文件也可以直接用MDK调试的,也就是说如果你用它编译了,那么MDK建立个同名工程,把obj与list输出都放在%bd的目录,那slicedit的结果能够直接给MDK调试用,直接点调试就可以了(工程要同名,), MDK的编译结果也能给slickedit用,但是MDK点编译还是会直接自己编译的,好像是因为MDK有自己的编译结果保存文件。
另外如果使用同名MDK工程,可以再添加一个环境变量MDKUV4 :X:\Keil_v5\UV4
TOOL页面再加上
Debug:%(MDKUV4)\uv4.exe -d %rn.uvproj调用MDK并直接进入调试页面。
Excute:%(MDKUV4)\Uv4.exe -f %rn.uvproj 调用MDK直接下载,当然,需要设置好下载工具。
另外,SlickEdit是没有清除功能的,虽然debug整个目录是可以直接删除再编译的,但是如果不想的话,可以通过自己创建一个cmd或者命令,再创建clean命令,把cmd调用或者命令填进去就可以了。
如需实例程序请下载作者下载链接!
来源:https://blog.csdn.net/lhfox/article/details/99305524