1. 程式人生 > >C++ STM32 程式設計 005 用c++編寫STM32程式的準備

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