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

        因为咱们使用的是 ARM 的工具链 是gcc的,因此,咱们大能够用c++来编写程序,不管是 c++99 或c++11 仍是 c++14,都是能够的。另外在 HAL 库中,几乎每一个 .h头文件都有这种宏c++

#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,修改该工程时,会自动修改主文件,而不用咱们手动修改。app

    咱们用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修改了。c++11

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

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