最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

嵌入式開發(fā):如何將嵌入式代碼庫從C轉(zhuǎn)換為C++?

2023-02-22 17:08 作者:粵嵌科技  | 我要投稿

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

  這種過渡最好分四個(gè)階段進(jìn)行:

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

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

  2.修改代碼以使用簡(jiǎn)單的C++語言特性。

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

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

  l 使用作用域枚舉而不是常規(guī)C枚舉;

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

  l 使用static_assert而不是運(yùn)行時(shí)斷言(如果可能);

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

  l 使用模板函數(shù)而不是“函數(shù)”宏。

  3.將可識(shí)別的模擬“C-OOP代碼”轉(zhuǎn)換為真實(shí)的OOP代碼。

  例如,有一個(gè)名為INSTANCE_T的結(jié)構(gòu),指向該結(jié)構(gòu)的指針被傳遞給編輯它的各種函數(shù)。將結(jié)構(gòu)轉(zhuǎn)換為適當(dāng)?shù)念?,并將函?shù)轉(zhuǎn)換為類組件。不要忘記正確指定public/private。如果有init函數(shù),嵌入式開發(fā)人員請(qǐng)記住將其轉(zhuǎn)換為類的構(gòu)造函數(shù)。

  在前三個(gè)步驟中,源代碼變得更加可讀、可維護(hù)和類型安全。根據(jù)我們的經(jīng)驗(yàn),在大多數(shù)情況下,可執(zhí)行代碼的大小不會(huì)改變。我們甚至可以在ROM中的大多數(shù)模塊上執(zhí)行步驟1和2,因?yàn)樵诳蓤?zhí)行代碼中,沒有一個(gè)字節(jié)通過重新編譯而改變。

  

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

  你應(yīng)該小心地邁出最后一步。例如,開發(fā)團(tuán)隊(duì)?wèi)?yīng)該收到關(guān)于應(yīng)該使用哪些C++語言特性以及如何使用的指南。例如,類成員函數(shù)不應(yīng)被不必要地定義為虛擬,也不應(yīng)使用STL。

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

  結(jié)論:使用C語言,代碼更安全、更可維護(hù)++

  有一個(gè)強(qiáng)大的C++子集適合于實(shí)現(xiàn)深度嵌入式系統(tǒng)。這允許程序員編寫更安全、更可維護(hù)的代碼,并實(shí)現(xiàn)在C語言中不可能實(shí)現(xiàn)的優(yōu)化。通過在上述子集內(nèi)移動(dòng),可以避免可執(zhí)行代碼中不必要的開銷。嵌入式開發(fā)人員使用四階段方法,可以將現(xiàn)有的生產(chǎn)代碼庫從C靈活地轉(zhuǎn)換為C++。


嵌入式開發(fā):如何將嵌入式代碼庫從C轉(zhuǎn)換為C++?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
色达县| 江陵县| 洛扎县| 荣昌县| 聂荣县| 亚东县| 江川县| 洛川县| 仁怀市| 桐柏县| 郸城县| 临颍县| 铜鼓县| 辽阳县| 瑞金市| 扶余县| 济阳县| 托克托县| 修武县| 长岛县| 阿拉善盟| 潜山县| 阿克| 屯昌县| 宣城市| 宜兰市| 海丰县| 林甸县| 贵阳市| 桦甸市| 安平县| 宜兰县| 临汾市| 霍城县| 田林县| 正定县| 日喀则市| 铁力市| 阳春市| 印江| 肥西县|