C++ STM32 编程 005 用c++编写STM32程序的准备

        由于我们使用的是 ARM 的工具链 是gcc的,所以,我们大可以用c++来编写程序,无论是 c++99 或c++11 还是 c++14,都是可以的。另外在 HAL 库中,几乎每个 .h头文件都有这种宏

#ifdef __cplusplus
extern "C" {
#endif


#ifdef __cplusplus
}
#endif

由此,我们可以大胆的使用 c++ 的各种特性了,在使用,c++ 的各种特性之前,我们必须先对编译器进行配置

    如图所示 编译参数为:-std=c++11 -ggdb -ffunction-sections -fno-exceptions -fno-rtti -O0 

    说明可以正常使用 c++11 的各种特性。但是,跟系统相关的一些东西我们是没办法使用的比如 thread future sync mutex等是没办法使用的,这些都是系统相关的,然而我们的 MCU单片机是没有系统的。如 auto functional lambda vector map 和一些快速算法等都是没问题的。

    另外我们的主程序文件,也最好使用.c格式,不要改成.cpp,这样做的好处就是,如果我们再次使用CubeMX,修改该工程时,会自动修改主文件,而不用我们手动修改。

    我们用c++写的驱动文件,如果必须被主程序调用时,我们可以做一个 c 的 wrapper

    但是,CubeMX,怎么判断哪些是我们要保留的,不希望CubeMX把我们辛辛苦苦编写的代码弄没怎么办?我们观察主函数文件中会有一些特别的注释。如下

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */







/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

         只要我们的代码写在这些注释中间就不会被CubeMX修改了。

         另外我们在写各种外设驱动程序的时候,最好也不要把那些,初始化设置,都copy到我们自己特定的位置。在我们的驱动程序内部只要定义一些变量就好了,在初始化的时候,把这些变量,赋值为,特定的GPIO或HANDLE就好了,这样,就能写出更加通用的程序,也能更好的移植代码。当然我所说的前提是用c++来写代码。

         实话说,c程序执行效率很高,但是我觉得c++程序效率也不慢,他们执行效率之间没有数量级的差别,虽然c可能某种程度上来说,会快那么一点点,但是作为一个熟悉了面向对象编程的c++程序员,再回头去使用,各种不爽的c语言,压力不是一般的大。(再此,我没有任何一点贬低c程序员的意思,只是就我本身而言。因为大学时,老谭的c语言一直都是我不爽的地方,整本书,就好像是孔乙己 教小伙计 认识“回”字一样,大多是无用之用,另外我感兴趣的东西,老师又不教,好恶心)。

猜你喜欢

转载自blog.csdn.net/a13576560181/article/details/85040358