基于MDK和eclipse 开发stm32工程
已经用eclipse开发stm32工程很久了,作为替代MDK自带编辑器的工具,ecpise具有十分强大的代码编写和代码查看能力。
- 支持vim 方式编辑代码,保证极高的编辑效率
- 支持查看函数调栈,在不需要编译代码和调试的情况下,你就可以找到此函数被谁调用以及调用此函数的函数又被谁调用,以此类推。帮助你阅读代码和分析代码。
- 根据变量名所在作用域,快速重命名。当你在一个函数范围内创建了一个与全局变量同名的 变量,当你对其进行重命名时,不会对全局的同名变量造成影响。
- 快速代码格式化。预设了集中常见代码风格,我们可以根据个人习惯或者公司规范定制代码风格,然后选中需要重新格式化的代码ctrl+f, 或者在文件中ctrl+f即可完成代码格式化。
- 宏展开。帮助你一步一步的把宏展开,这无论是帮助你理解一个宏具体内容是什么,还是帮助调试自己制作的复杂的宏函数,都极其有帮助。
既然eclipse这么好用,为什么还要用MDK?
- 目前主流的stm32开发环境仍然是MDK,这一点可能短时间都不会变。而且MDK被广泛认可有其道理,他的调试功能确实不是eclipse随随便便就能替代的。
- eclipse也有相应的插件,可以通过arm-none-eabi-gnu 工具链实现脱离MDK的编译和调试,可惜比较折腾,而且这么玩的人不多,比较小众,当然,作为学习和熟练一下不同编译器还是很值得的。
综上,毕竟MDK调试很好用,而且比较主流,使用eclipse+MDK的方案可以即兼顾MDK的优点,也可以体会eclipse的强大编辑功能和代码查看功能,同时也可以很方便的和主流开发者交流。
快速搭建环境
虽然eclipse对于阅读和编辑stm32工程十分便利,但是代码的编译还要借助MDK去完成。
- 第一步:安装MDK
- 第二步:下载安装eclipse for c++
- 第三步:安装vi插件
第一步 安装MDK
网上下载MDK的渠道很多,我这里早期买过的开发板自带了MDK5的安装和注册机,直接安装:
安装完成后,要这个路径:
这个路径将会在eclipse创建工程的时候,配置头文件搜索路径时使用。
第二步:下载安装eclipse for c++
登录eclipse官网,下载eclipse ide for cpp developments
下载后得到一个zip包,解压到喜欢的位置,一般推荐纯英文路径诸如
D:\Program Files\
然后运行解压后的主程序
缺少Java运行环境,去下载安装一个Oracle的jre
安装完成Java运行环境之后,再次尝试运行eclipse,选择一个目录作为stm32 eclipse 工作路径。我使用的是D:\workspace\stm32
第三步:导入已有的mdk工程
选择一个已经存在的MAKEfile工程作为导入的工程。
选择工程的路径,然后点击完成。
在刚刚导入工程之后,由于没有配置头文件搜索路径,所以很多符号是无法解析的,要想eclipse真正发挥作用,这些参数配置是必须要做好的。
第四步:配置eclipse,使其能正常解析参数
- 将MDK的C依赖头文件目录加入到头文件搜索目录中。
- 定义MDK的内建宏
__CC_ARM
如果没有定义__CC_ARM则有些编译器不同实现的一些符号无法正常解析,比如va_list等
向eclipse工程手动添加MDK中的宏定义
- 打开MDK工程工程配置,如上图左上角红色框线标记的按钮。
- 在弹出来的工程配置窗口,点击C/C++标签栏,如上图中间红色框线标记的位置
- 从编译选项只读文本编辑框找到所有的-Dxxxx的参数
注释:MDK的编译器,通过-D定义宏;-DMY_MICRO
表示定义一个不带参数的宏MY_MICRO
;-DMICRO_WITH_PARAM="param"
表示定义一个带参数的宏MICRO_WITH_PARAM
并且其参数为"param"
4. 打开eclipse工程配置,点击工程,按快捷键ALT+Enter
5. 打开C/C++ General 标签栏下的“Paths and symbles”, 打开右侧的Symbles标签页,点击右边的Add…按钮添加MDK中定义的宏
Eclipse C语言解析器工作原理
Eclipse对C语言的支持来自于CDT插件中的index。所以如果打开C工程时出现有符号不能解析或头文件找不到,往往都是由于index的宏和头文件检索路径没有配置好。对于配置好的头文件搜索路径会显示在项目视图下的include分支中。
除了可以通过手动配置头文件和宏的方式之外,对于某些情况下,可能工具链本身定义了大量的宏和默认的头文件搜索路径,这些内置的定义如果都由手动配置输入明显是不合适的,比如使用gcc交叉工具链。此时,我们需要配置工程属性中的“Preprocessor Include Paths, Macro etc.”
- 点击工程右键Properties,或者点击工程名然后同时按下键盘快捷键【ALT+Enter】进入工程属性页
- 打开
C/C++ General
属性页,然后选择Preprocessor Include Paths and Macro etc.
选项卡 - 选择Providers,新勾选一个
"GCC Built-in Compiler Settings"
,使能该工具链的预处理解析,然后替换${Command}
为gcc工具链的完整目录,这里演示的路径为"D:\Program Files (x86)\GNU Tools ARM Embedded\6 2017-q2-update\bin\arm-none-eabi-gcc.exe"
,然后保存 - 此时如果gcc工具链位置没有问题的话,公车下的includes头文件解析路径会添加gcc工具链内置目录,同时再次进入
Preprocessor Include Paths and Macro etc.
选项卡,打开Entries标签页,点开"GCC Built-in Compiler Settings"
下拉按钮,可以看到很多导入的宏和头文件搜索目录 - 右键工程,更新索引。
注: 本demo中使用MDK编译器进行编译,所以不可以使用gcc的预处理自动生成的符号。