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語言一直都是我不爽的地方,整本書,就好像是孔乙己 教小夥計 認識“回”字一樣,大多是無用之用,另外我感興趣的東西,老師又不教,好惡心)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章