那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為什么招聘單片機工程師的時候要求精通C/C++?

朱老師物聯網大講堂 ? 2022-02-14 10:21 ? 次閱讀

大家好,給大家分享知乎上一個熱議的話題為什么招聘單片機工程師的時候要求精通C/C++?

269454b8-8cef-11ec-9d5f-dac502259ad0.png在這里分享幾個回答,有一定的參考價值,歡迎留言討論!

01


回答1

作者:Qi K鏈接:https://www.zhihu.com/question/335790805/answer/2111472871

所謂的大部分單片機項目不用C++是因為整個嵌入式開發行業從業者的平均軟件素養已經差到了一個令人發指的地步。大部分嵌入式工程師出身于電子通信、自動化等專業,由于專業教育的缺失和自己學習能力的問題,根本不具有面向對象設計、設計模式、軟件工程等基本常識,所以在他們看來C和C++差不多,沒必要上C++。一個基層工程師,整天滿嘴都是穩定、可靠、市場、成本、性價比這些屁話,卻根本沒聽說過設計模式、代碼復用、可擴展性、單元測試、持續集成這些現代軟件技術的精華。知道的知道你是一個強行挽尊的嵌入式工程師,不知道的還以為你是什么統領千軍的大老板。(我預判了他們的預判,這段真的戳到了一些傳統的嵌入式工程師。居然有人跟我杠說設計模式、單元測試、持續集成這些不重要?我通篇就是打的這樣人的臉,你被打完了還跟我說:你打臉而已,沒打到要害,你根本就不會打人!我笑得滿地打滾!)所有沒用到C++的單片機應用項目(底層驅動庫不在此列),都是因為其規模過小,應用過于簡單,一兩個人,最多不超過5人就可以完成全部開發,這種項目不但用不到C++,甚至用不到C,甚至用匯編完成,更用不到任何現代軟件工程技術。作為一個嵌入式開發的候選人,如果你想加入大廠,參與任何有規模的嵌入式項目,你的C++水平就是你的天花板。這里的大廠不止是華為、大疆這種,甚至很多愛好者熟悉的“周立功單片機”老板周立功就多次在公開場合表示,他們已經全面轉向C++,只會C的工程師不會得到工作機會。Arduino也許是世界上最著名的AVR(8位單片機)項目,沒有之一。Arduino的封裝全面使用了C++和面向對象的設計。廣泛使用基于虛函數實現的運行時多態,很多設計遵從了開閉原則、接口隔離、依賴倒置等重要設計原則。在ARM項目中, 用到C++的更多。ARM官方推動的mbed項目大概是ARM單片機領域最知名的項目之一。如果你要抬杠說Arduino是玩具,不具有工業強度的話,那mbed項目絕對是為工業級應用設計的,從底層RTOS到上層的硬件抽象層HAL都有實現。mbed是用C++實現的,廣泛使用開閉原則和依賴倒置,要求用戶通過繼承虛基類來完成平臺相關的實現,從而實現擴展。如果你是一個一線嵌入式工程師,卻根本不了解我提到的一些專業術語是什么意思,我覺得應該反思一下為什么自己的工資上不去。因為這些都是最基礎的面向對象和設計模式常識。最后回答問題,為什么單片機工程師要求會C++?那還不簡單?因為企業不傻啊!其實我也是C的鐵粉,C在嵌入式領域毫無疑問占有舉足輕重的地位。我堅定認為在現代嵌入式系統中,C和C++共存的現象會廣泛存在,且具有上升的趨勢。在硬件抽象層使用C,在應用層和接口層使用C++是非常典型的實踐。這也是正面回答這個問題,為什么嵌入式要會C++?因為嵌入式應用中C和C++都有用。
說了這么多,如果你的觀點還是“C++無用,C++滾出嵌入式”的話,祝你好運!

02


回答2

作者:聽心跳的聲音鏈接:https://www.zhihu.com/question/335790805/answer/768873197

大部分招聘說明里可能都是復制同類嵌入式公司的需求,在刪刪補補,所以這句話一直遺留下來,不算亂寫,但其實和招聘的真正要求差別很大。從我曾經不下20~30次大廠小廠的嵌入式面試經驗來說,大部分公司在招聘時不會涉及C++(本身公司負責有QT應用產品的除外,但不屬于單片機方向), 對C語言要求也遠遠不會到精通的地步,基本上對C語言語法熟練掌握。把過一遍,后面標注提到的重點細節詳細掌握下,筆試基本都是C基礎語法(關鍵字,宏,結構體, 枚舉,指針和引用,數組,強制轉換,位移,大小端,存儲區,函數的健壯性),在結合數據結構(排序,查找,二叉樹),在涉及一些硬件知識類的如(中斷,AD的精度,RTC時鐘轉換)這一類,這里面考察的C語言知識在我看來也遠遠沒有到達精通的地步。作為嵌入式從業者,以我這些年的經驗來說,除非從事嵌入式Linux開發,而且是QT界面應用方向的,C++知識儲備是必須的。
對我認識的大部分單片機工程師來說,即使實力比我強很多的,對于C++基本停留在C with Class的程度,掌握模板的都不多,更不要說后面強大的STL,以及涉及函數式編程的lambda和模板元編程, 也就是我這種閑著喜歡看書碼代碼的無聊人士,才會花時間去專門學習C++11,甚至去追逐了解前端框架,因為這些知識對于單片機開發事實上真的沒啥用。對于單片機來說,一方面要追求穩定可控,另一方面成本嚴苛,資源(RAM/FLASH)有限。所以你可以看到NodeMcu和MicroPython的開發調試玩具賣的火熱,卻很難看到相應的技術用到產品領域。這對于C++也一樣,使用STL會帶來編譯結果(代碼容量)不可避免的膨脹,如果閹割掉這部分,還不如使用C語言來的簡單方便,這也限制了C++發揮的市場。在單片機領域和嵌入式驅動開發,基本上C語言占有絕對地位,即使在Linux上層應用這塊,Android/Java的開發優勢也明顯高于QT/C++,所以要求精通C++可以說是無稽之談。事實上精通C++的要求有多高,你可以去相應問題下看看,這種人怎么會使用閹割的C++來從事單片機開發。最后來說,精通C語言的問題,特別是精通單片機領域的C語言,是一個很困難的事,至少對于現在的我來說,離精通C語言也差的有些遠。因為精通C語言不僅僅是掌握關鍵字和語法特性,和下面這些復雜但實用的操作,如位域實現對寄存器的位操作,利用結構體強制轉換用于各種協議解析,函數指針實現異步回調,宏定義加##實現的函數格式化;這些雖然復雜,但至少是有一套標準規則,只要去看書實踐就可以了解掌握,但當你用C語言完成復雜穩定的項目代碼,解決各種異常bug時,就會知曉C語言的精通不只上面這些固定的語法知識。在調試中可能遇到指針越界,棧溢出,共享資源未保護,非對齊訪問異常,編譯器優化錯誤等,這些問題單獨拿出來也許很容易找出來,但在復雜的十幾萬行的代碼中,往往可能執行錯誤的地方工作表現是正常的,但干擾到其它部分,導致未出錯的地方執行異常,這就需要的不僅僅是C語言的,還包含系統內核,總線架構和匯編的知識,精通C語言的困難正是在此。你要理解掌握計算機技術中成體系的東西,對內存分配,總線架構,內核,匯編這些都有清晰的認識。例如了解函數內的空間是在棧中,那么我們在函數中需要使用大數組時,就要考慮是否定義為靜態變量(避免棧溢出),如果多個函數使用數組,就要考慮是否添加內存管理。如果數組會被2字節/4字節的指針訪問,在聲明時是否考慮要強制對齊(我就曾經遇到過#pragma pack(1)后面忘了閉合,導致后續全局變量未對齊,4字節指針訪問時觸發異常,因為中間涉及多次轉換,所以花費了很多時間才查找定位解決)。另外如果用到了Cache和MPU,那么整個系統又更加復雜,何時需要寫回,何時需要無效CacheLine,volatile的意義,以及配合Cache使用的注意點。這些知識的掌握,其實都屬于精通嵌入式C語言的一部分,因此可以說精通C語言并不簡單。
-END-


本文轉載自公眾號:大魚機器人

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6043

    文章

    44621

    瀏覽量

    638624
收藏 人收藏

    評論

    相關推薦

    Spire.XLS for C++組件說明

    Spire.XLS for C++ 是一款專業的 C++ Excel 組件,可以用在各種 C++ 框架和應用程序中。Spire.XLS for C++ 提供了一個對象模型 Excel
    的頭像 發表于 01-14 09:40 ?150次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    為什么嵌入式驅動開發工程師可以拿高薪?

    場景下可以提供額外的優勢。 熟練使用C/C++進行嵌入式系統編程,便于理解內存管理、指針、數據結構等高級特性。 3)項目實踐: 通過動手做項目來積累經驗,這是嵌入式工作經驗積累的重要途徑。可以從簡單的項目開始,如使用51單片機
    發表于 01-07 16:56

    C語言和C++中結構體的區別

    同樣是結構體,看看在C語言和C++中有什么區別?
    的頭像 發表于 10-30 15:11 ?357次閱讀

    C7000優化C/C++編譯器

    電子發燒友網站提供《C7000優化C/C++編譯器.pdf》資料免費下載
    發表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器

    C++語言基礎知識

    電子發燒友網站提供《C++語言基礎知識.pdf》資料免費下載
    發表于 07-19 10:58 ?7次下載

    C++中實現類似instanceof的方法

    C++有多態與繼承,但是很多人開始學習C++,有時候會面臨一個常見問題,就是如何向下轉型,特別是不知道具體類型的時候,這個時候就希望
    的頭像 發表于 07-18 10:16 ?673次閱讀
    <b class='flag-5'>C++</b>中實現類似instanceof的方法

    答應我!單片機工程師快來試一試

    單片機工程師
    WT-深圳唯創知音電子有限公司
    發布于 :2024年05月23日 16:58:56

    嵌入式軟件工程師和硬件工程師的區別?

    。他們之間的緊密合作對于成功開發出高效的嵌入式系統至關重要。 嵌入式軟件工程師和嵌入式硬件工程師在工作中有著不同的技能要求和專業知識。嵌入式軟件工程師需要具備扎實的編程基礎,熟練掌握
    發表于 05-16 11:00

    KT148A語音芯片串口版本播放音樂的時候,直接導致單片機工作異常

    在使用你們KT148A串口版本播放音樂的時候,直接導致單片機工作異常,測了一下供電發現每次播放音樂的時候,供電會有很大波動。看了一下你們的手冊,說是帶載能力不夠,但是我把供電接出來,接到你們的測試板上時,
    的頭像 發表于 05-07 10:50 ?555次閱讀
    KT148A語音芯片串口版本播放音樂的<b class='flag-5'>時候</b>,直接導致<b class='flag-5'>單片機工</b>作異常

    鴻蒙OS開發實例:【Native C++

    使用DevEco Studio創建一個Native C++應用。應用采用Native C++模板,實現使用NAPI調用C標準庫的功能。使用C標準庫hypot接口計算兩個給定數平方和的平
    的頭像 發表于 04-14 11:43 ?2766次閱讀
    鴻蒙OS開發實例:【Native <b class='flag-5'>C++</b>】

    使用 MISRA C++:2023? 避免基于范圍的 for 循環中的錯誤

    在前兩篇博客中,我們?向您介紹了新的 MISRA C++ 標準?和?C++ 的歷史?。在這篇博客中,我們將仔細研究以 C++ 中?for?循環為中心的特定規則。
    的頭像 發表于 03-28 13:53 ?861次閱讀
    使用 MISRA <b class='flag-5'>C++</b>:2023? 避免基于范圍的 for 循環中的錯誤

    為什么很少用C++開發單片機

    C語言是面向過程的語言,C++是面向對象的編程語言。結合本文來說,面向過程相比面向對象的編程,生成代碼量(bin文件)更小,運行效率更高。
    發表于 03-25 14:26 ?1143次閱讀
    為什么很少用<b class='flag-5'>C++</b>開發<b class='flag-5'>單片機</b>

    單片機如何通過代碼控制硬件:一名工程師的分享

    今天跟大家聊聊單片機是怎樣通過代碼來操控硬件的。作為一名單片機工程師,我們平時的工作就像是給單片機編寫“指令集”,讓它按照我們的意圖去驅動各種硬件設備。
    的頭像 發表于 03-06 14:46 ?1625次閱讀
    <b class='flag-5'>單片機</b>如何通過代碼控制硬件:一名<b class='flag-5'>工程師</b>的分享
    威尼斯人娱乐场 赌场网址| bet365ok| 财神真人娱乐城| 百家乐官网PK| 百家乐百胜注码法| 凌龙棋牌游戏大厅| 百家乐官网最低投注| 百家乐官网的看路技巧| 百家乐路单走势图| 香港六合彩票| 百家乐官网改单软件| 乐百家乐彩现金开户| 大发888官方正版网| 百家乐官网投注软件有用吗| 大发百家乐现金网| 顶级赌场是真的吗| 鑫鼎百家乐官网娱乐城| 百家乐连锁| 百家乐官网视频软件| 百家乐推荐怎么看| 钱柜娱乐城怎么样| 百家乐官网网上真钱娱乐平台| 百家乐赌场娱乐城大全| 澳门赌场分布| 做生意带什么招财| 波克棋牌游戏大厅| 诸子百家乐官网的玩法技巧和规则 | 网站百家乐博彩| 足球投注开户| 适合属虎做生意的名字| 青岛人家棋牌室| 天博百家乐官网的玩法技巧和规则 | 百家乐台布21点| 昌江| 澳门百家乐备用网址| 永胜博| 百家乐注码管理| 足球系统出租| 百家乐怎么计算概率| 百家乐官网好不好玩| 百家乐图淑何看|