|
1.转载链接 转载自 http://blog.csdn.net/wmdscjhdpy/article/details/79354513% c, z7 Y% V6 p+ h% @6 x& P 2.原博文 #前言 最近这段时间在弄一个新的STM32F4的项目,因为工程比较庞大,然后各种类型也比较复杂,在封装整理的时候就非常头疼,很想通过C++的类,继承,多态的方式来让代码变得清晰简单。在网上翻阅了比较多的相关资料,发现很多博客所说的方法要么太复杂,要么不能完美兼容Cube。随着ST对HAL库的不断更新,各类驱动包其实都已经悄悄的在各种头文件上加入了 extern “C” 的宏定义,让C++移植更加方便。我也折腾了一段时间,终于成功的编译成功了一个带有C++特性的工程,故来分享一下自己的经验和一些值得注意的地方。因为我也在探索的过程中,如果大家在尝试的过程中有遇到其他问题的欢迎评论区讨论。 #配置C++工程 ##配置Cube 其实在Cube的配置上没有多大改变,只建议尽量不要在生成工程的时候不要选中Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral选项。这个感觉像是cube的一个遗漏的地方,如果在此处勾选了这个选项的时候,有部分新增加的头文件没有extern “C” 的宏定义 会导致混合编译出错。 ( ?$ t5 _' X. P$ [2 @ 其他的地方没有什么特别的,直接生成工程即可。 ##配置Keil ###工程设置 Keilv5原生是支持C++的编译的,所以在keil里面我们只需要打开工程设置,在C/C++选项里的Misc_Controls里加入–cpp 当然如果原意使用C++11标准的话可以加入 --cpp11 即可./ s" \; W6 q6 [$ _+ j& p9 u# u8 O% W 然后我们还需要确认MicroLib已被禁用。该选项在工程设置中的Target栏的Code Generation里,取消勾选“Use Micro Lib”即可。1 G2 ?3 s% v9 h ###文件属性设置6 A. i4 r" `7 ?4 K8 u 经过上面的设置之后,我们就可以对cpp类文件使用C++编译器了,可是问题是,Cube给我们生成的都是.c文件,这就导致Keil会把它们当做c文件,使用C编译器编译,当我们在这些cube生成好的文件里面使用C++特性的时候就会报错了。所以我们需要把Cube给我们生成的文件改成C++文件。但是在此处不宜用更改文件名后缀的方法,因为这样的话会导致cube以后在修改的时候不会维护.cpp文件,而是重新给你生成一个.c文件。为了保证cube的维护性,我们在keil的工程目录中选中需要使用C++特性的文件,右键点击 “Options for File ‘xxx.c’”,打开后将File Type里设置为C++ Source File即可 这样即使是.c后缀 keil也会将它认为C++文件进行编译链接. 这样我们就可以将C++嵌入到工程里 并且cube更新的时候这些也不需要重新设置 cube之外的其他用户文件直接使用.cpp .hpp并做好extern “C” 的工作即可,不需要这样设置0 E. d/ p, r5 T/ E) E& G2 _$ b6 O2 [ : Y: H- c. w+ m. H( o ###一些注意事项. ?0 y4 I+ y& z/ }+ ]9 \ 建议只把需要用到C++特性的cube文件设置为C++文件,不要把一些底层的驱动文件也设置成C++文件,因为不知道会有什么未知的影响。我亲身经历了一次把所有的.c文件改成c++源文件类型后编译时错误的绝望… 另外,所有涉及中断的服务函数必须用 extern "C"作前缀(包括定义),因为stm32的中断服务名是由汇编的启动代码内的向量表决定的,汇编不认得C++的函数名的链接符号。建议的方法是在中断配置文件里的开头和结尾(都含有cube的 "user code"段)加上extern "C"的标注。2 b6 t2 ^$ V: D9 N7 d /------------------------------------------------------------------------------ 2018年6月4日11:34:06后记:; M: ^" H2 R$ K 9 F r. L5 b D. @4 N7 ^% s STM32Cube其实在悄无声息的对HAL逐渐完善C++的支持 自身体验F103的HAL库 生成工程后 只需要注意中断要extern "C"外 其他的HAL库都处理好了. 所以用C++开发的同学们可以尽量尝试新的库,对C++的支持更优! --------------------- 0 [$ s) d0 q/ o6 j 作者:wmdscjhdpy / x) T) W5 B+ V$ H6 @8 r 来源:CSDN 原文:http://blog.csdn.net/wmdscjhdpy/article/details/79354513 " N0 p; J m2 t% | 版权声明:本文为博主原创文章,转载请附上博文链接!* z# K/ n& e/ B; l9 ] * g6 s7 d- l d0 C) D7 o8 J 3.基于正点原子STM32F4探索者开发板的测试 6 c1 C/ p9 k+ ?) R" w4 U cubemx prj
BOOT.zip
(3.32 KB, 下载次数: 11)
|
微信公众号
手机版