|
1.转载链接 转载自 http://blog.csdn.net/wmdscjhdpy/article/details/79354513 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” 的宏定义 会导致混合编译出错。 其他的地方没有什么特别的,直接生成工程即可。 ##配置Keil ###工程设置 Keilv5原生是支持C++的编译的,所以在keil里面我们只需要打开工程设置,在C/C++选项里的Misc_Controls里加入–cpp 当然如果原意使用C++11标准的话可以加入 --cpp11 即可. 然后我们还需要确认MicroLib已被禁用。该选项在工程设置中的Target栏的Code Generation里,取消勾选“Use Micro Lib”即可。 ###文件属性设置 经过上面的设置之后,我们就可以对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” 的工作即可,不需要这样设置 ###一些注意事项 建议只把需要用到C++特性的cube文件设置为C++文件,不要把一些底层的驱动文件也设置成C++文件,因为不知道会有什么未知的影响。我亲身经历了一次把所有的.c文件改成c++源文件类型后编译时错误的绝望… 另外,所有涉及中断的服务函数必须用 extern "C"作前缀(包括定义),因为stm32的中断服务名是由汇编的启动代码内的向量表决定的,汇编不认得C++的函数名的链接符号。建议的方法是在中断配置文件里的开头和结尾(都含有cube的 "user code"段)加上extern "C"的标注。 /------------------------------------------------------------------------------ 2018年6月4日11:34:06后记: STM32Cube其实在悄无声息的对HAL逐渐完善C++的支持 自身体验F103的HAL库 生成工程后 只需要注意中断要extern "C"外 其他的HAL库都处理好了. 所以用C++开发的同学们可以尽量尝试新的库,对C++的支持更优! --------------------- 作者:wmdscjhdpy 来源:CSDN 原文:http://blog.csdn.net/wmdscjhdpy/article/details/79354513 版权声明:本文为博主原创文章,转载请附上博文链接! 3.基于正点原子STM32F4探索者开发板的测试 cubemx prj
BOOT.zip
(3.32 KB, 下载次数: 10)
|
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版