《让你的STM32CubeKEILV5+HAL库工程支持C++开发.pdf》由会员分享,可在线阅读,更多相关《让你的STM32CubeKEILV5+HAL库工程支持C++开发.pdf(2页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、让你的STM32CubeKEILV5+HAL库程持C+开发前最近这段时间在弄个新的STM32F4的项,因为程较庞,然后各种类型也较复杂,在封装整理的时候就常头疼,很想通过C+的类,继承,多态的式来让代码变得清晰简单。在上翻阅了较多的相关资料,发现很多博客所说的法要么太复杂,要么不能完美兼容Cube。随着ST对HAL库的不断更新,各类驱动包其实都已经悄悄的在各种头件上加了 extern“C”的宏定义,让C+移植更加便。我也折腾了段时间,终于成功的编译成功了个带有C+特性的程,故来分享下的经验和些值得注意的地。因为我也在探索的过程中,如果家在尝试的过程中有遇到其他问题的欢迎评论区讨论。配置C+程配
2、置Cube其实在Cube的配置上没有多改变,建议在成程的时候不要选中Generate peripheral initialization as a pair of.c/.h files perperipheral选项。这个感觉像是cube的个遗漏的地,如果在此处勾选了这个选项的时候,有部分新增加的头件没有extern“C”的宏定义 会导致混合编译出错。其他的地没有什么特别的,直接成程即可。配置Keil程设置Keilv5原是持C+的编译的,所以在keil我们只需要打开程设置,在C/C+选项的Misc_Controls加cpp 当然如果原意使C+11标准的话可以加-cpp11 即可.然后我们还需要
3、确认MicroLib已被禁。该选项在程设置中的Target栏的Code Generation,取消勾选“Use Micro Lib”即可。件属性设置经过上的设置之后,我们就可以对cpp类件使C+编译器了,可是问题是,Cube给我们成的都是.c件,这就导致Keil会把它们当做c件,使C编译器编译,当我们在这些cube成好的件使C+特性的时候就会报错了。所以我们需要把Cube给我们成的件改成C+件。但是在此处不宜更改件名后缀的法,因为这样的话会导致cube以后在修改的时候不会维护.cpp件,是重新给你成个.c件。为了保证cube的维护性,我们在keil的程录中选中需要使C+特性的件,右键点击“Op
4、tions for Filexxx.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的中
5、断服务名是由汇编的启动代码内的向量表决定的,汇编不认得C+的函数名的链接符号。建议的法是在中断配置件的开头和结尾(都含有cube的 user code段)加上extern C的标注。/-2018年6411:34:06后记:STM32Cube其实在悄声息的对HAL逐渐完善C+的持 体验F103的HAL库 成程后 只需要注意中断要extern C外 其他的HAL库都处理好了.所以C+开发的同学们可以尽量尝试新的库,对C+的持更优!2020年12922:01:09后记STM32Cube使时如果同时使了FreeRTOS的话,freertos.c会由Cube维护,如果需要在Freertos.c内使C+特性的话会出现C/C+链接错误。因此需要在freertos.c件对出错的函数使extern C来兼容。当然最好的做法是不要在freertos.c使C+特性,使单独的户件来进线程的管理。