1. gzyueqian
      13352868059

      嵌入式開發:如何將嵌入式代碼庫從C轉換為C++?

      更新時間: 2023-02-22 11:49:34來源: 粵嵌教育瀏覽量:6780

        幾十年來,嵌入式軟件工程師們一直在爭論是否應該使用C++替代C語言進行開發工作。56%的嵌入式軟件是用C語言編寫的。然而,C++已經逐漸普及,大約23%的新嵌入式軟件項目都是用C++編寫的。那么,嵌入式開發人員要如何將嵌入式代碼庫從C轉換為C++?

        這種過渡最好分四個階段進行:

        1.編譯器應該將源代碼解釋為C++而不是C。

        對于某些編譯器,將源文件從“.c”重命名為“.cpp”就足夠了;其他命令行需要特定的參數。由于C幾乎是C++的子集,所以這一步驟通常不需要對源代碼進行任何更改。但也有例外。重要的是,首先對整個代碼庫執行該步驟,否則可能無法對某些模塊執行以下步驟,例如,如果其他模塊使用這些模塊,此步驟還可能導致“損壞”,即對生成的鏈接器符號的名稱進行破壞。對于鏈接“.c”和“.cpp”模塊,需要外部“c”。可以通過同時對所有模塊執行此步驟來避免這種情況。

        2.修改代碼以使用簡單的C++語言特性。

        為了從更好的語法和更高的類型安全性中獲益,現在嵌入式開發人員可以通過以下方式改進以前的C代碼:

        l 使用名稱空間而不是前綴變量/函數名稱;

        l 使用作用域枚舉而不是常規C枚舉;

        l 使用C++bool代替專門定義的C bool;

        l 使用static_assert而不是運行時斷言(如果可能);

        l 使用constexpr而不是常量宏,并且(如果可能)使用const

        l 使用模板函數而不是“函數”宏。

        3.將可識別的模擬“C-OOP代碼”轉換為真實的OOP代碼。

        例如,有一個名為INSTANCE_T的結構,指向該結構的指針被傳遞給編輯它的各種函數。將結構轉換為適當的類,并將函數轉換為類組件。不要忘記正確指定public/private。如果有init函數,嵌入式開發人員請記住將其轉換為類的構造函數。

        在前三個步驟中,源代碼變得更加可讀、可維護和類型安全。根據我們的經驗,在大多數情況下,可執行代碼的大小不會改變。我們甚至可以在ROM中的大多數模塊上執行步驟1和2,因為在可執行代碼中,沒有一個字節通過重新編譯而改變。

        

        4.引入更復雜的OOP方法和其他C++語言特性。

        你應該小心地邁出最后一步。例如,開發團隊應該收到關于應該使用哪些C++語言特性以及如何使用的指南。例如,類成員函數不應被不必要地定義為虛擬,也不應使用STL。

        新模塊現在將從一開始就按照這些指南進行編程。然而,將這一步驟應用于整個現有代碼庫需要大量的工作。一個好的策略是嵌入式開發人員有選擇地為每個模塊執行最后一步,例如,如果模塊無論如何都要進行重構。隨著時間的推移,代碼庫從C變為更復雜的C++代碼。我們的代碼庫已經過渡了大約三年。在此期間,已有數十種產品從這個代碼庫中脫穎而出。一些較舊且非常穩定的模塊(例如設備驅動程序)仍在C語言中,并將保持更長時間。我們從未覺得這種混合是同一代碼庫中的問題。

        結論:使用C語言,代碼更安全、更可維護++

        有一個強大的C++子集適合于實現深度嵌入式系統。這允許程序員編寫更安全、更可維護的代碼,并實現在C語言中不可能實現的優化。通過在上述子集內移動,可以避免可執行代碼中不必要的開銷。嵌入式開發人員使用四階段方法,可以將現有的生產代碼庫從C靈活地轉換為C++。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 午夜A级理论片在线播放一级 | 亚洲欧美日韩精品永久在线 | 亚洲国产欧美精品一区二区 | 天天欧美日韩在线一区 | 日本一二区中文字幕在线 | 日本中文字幕亚洲无线码 |