0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么招聘單片機(jī)工程師的時(shí)候要求精通C/C++?

朱老師物聯(lián)網(wǎng)大講堂 ? 2022-02-14 10:21 ? 次閱讀

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

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

01


回答1

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

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

02


回答2

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

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


本文轉(zhuǎn)載自公眾號(hào):大魚(yú)機(jī)器人

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44500

    瀏覽量

    632181
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言和C++中結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語(yǔ)言和C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?106次閱讀

    C7000優(yōu)化C/C++編譯器

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

    C++中實(shí)現(xiàn)類似instanceof的方法

    C++有多態(tài)與繼承,但是很多人開(kāi)始學(xué)習(xí)C++,有時(shí)候會(huì)面臨一個(gè)常見(jiàn)問(wèn)題,就是如何向下轉(zhuǎn)型,特別是不知道具體類型的時(shí)候,這個(gè)時(shí)候就希望
    的頭像 發(fā)表于 07-18 10:16 ?520次閱讀
    <b class='flag-5'>C++</b>中實(shí)現(xiàn)類似instanceof的方法

    答應(yīng)我!單片機(jī)工程師快來(lái)試一試

    單片機(jī)工程師
    WT-深圳唯創(chuàng)知音電子有限公司
    發(fā)布于 :2024年05月23日 16:58:56

    嵌入式軟件工程師和硬件工程師的區(qū)別?

    。他們之間的緊密合作對(duì)于成功開(kāi)發(fā)出高效的嵌入式系統(tǒng)至關(guān)重要。 嵌入式軟件工程師和嵌入式硬件工程師在工作中有著不同的技能要求和專業(yè)知識(shí)。嵌入式軟件工程師需要具備扎實(shí)的編程基礎(chǔ),熟練掌握
    發(fā)表于 05-16 11:00

    為什么很少用C++開(kāi)發(fā)單片機(jī)

    C語(yǔ)言是面向過(guò)程的語(yǔ)言,C++是面向?qū)ο蟮木幊陶Z(yǔ)言。結(jié)合本文來(lái)說(shuō),面向過(guò)程相比面向?qū)ο蟮木幊蹋纱a量(bin文件)更小,運(yùn)行效率更高。
    發(fā)表于 03-25 14:26 ?802次閱讀
    為什么很少用<b class='flag-5'>C++</b>開(kāi)發(fā)<b class='flag-5'>單片機(jī)</b>

    單片機(jī)如何通過(guò)代碼控制硬件:一名工程師的分享

    今天跟大家聊聊單片機(jī)是怎樣通過(guò)代碼來(lái)操控硬件的。作為一名單片機(jī)工程師,我們平時(shí)的工作就像是給單片機(jī)編寫(xiě)“指令集”,讓它按照我們的意圖去驅(qū)動(dòng)各種硬件設(shè)備。
    的頭像 發(fā)表于 03-06 14:46 ?1364次閱讀
    <b class='flag-5'>單片機(jī)</b>如何通過(guò)代碼控制硬件:一名<b class='flag-5'>工程師</b>的分享

    c語(yǔ)言,c++,java,python區(qū)別

    操作系統(tǒng)、嵌入式系統(tǒng)等對(duì)性能要求較高的場(chǎng)景。C語(yǔ)言的語(yǔ)法相對(duì)簡(jiǎn)單,學(xué)習(xí)曲線較平緩,也是學(xué)習(xí)其他高級(jí)語(yǔ)言的入門語(yǔ)言。 C++C++是在C語(yǔ)
    的頭像 發(fā)表于 02-05 14:11 ?2157次閱讀

    C++簡(jiǎn)史:C++是如何開(kāi)始的

    MISRA C++:2023,MISRA? C++ 標(biāo)準(zhǔn)的下一個(gè)版本,來(lái)了!為了幫助您做好準(zhǔn)備,我們介紹了 Perforce 首席技術(shù)支持工程師 Frank van den Beuken 博士撰寫(xiě)
    的頭像 發(fā)表于 01-11 09:00 ?516次閱讀
    <b class='flag-5'>C++</b>簡(jiǎn)史:<b class='flag-5'>C++</b>是如何開(kāi)始的

    【2023電子工程師大會(huì)】單片機(jī)/RTOS/Linux全棧工程師

    【2023電子工程師大會(huì)】單片機(jī)/RTOS/Linux全棧工程師修煉之路ppt
    發(fā)表于 01-03 16:31 ?40次下載

    如何使用SystemC做RTL和C/C++的聯(lián)合仿真呢?

    當(dāng)FPGA開(kāi)發(fā)者需要做RTL和C/C++聯(lián)合仿真的時(shí)候,一些常用的方法包括使用MicroBlaze軟核,或者使用QEMU仿真ZYNQ的PS部分。
    的頭像 發(fā)表于 12-13 10:13 ?1154次閱讀
    如何使用SystemC做RTL和<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>的聯(lián)合仿真呢?

    C語(yǔ)言和C++中那些不同的地方

    ++11標(biāo)準(zhǔn)。根據(jù)不同的標(biāo)準(zhǔn),它們的功能也會(huì)有所不同,但是越新的版本支持的編譯器越少,所以本文在討論的時(shí)候使用的C語(yǔ)言標(biāo)準(zhǔn)是C89,C++標(biāo)準(zhǔn)是C
    的頭像 發(fā)表于 12-07 14:29 ?894次閱讀
    <b class='flag-5'>C</b>語(yǔ)言和<b class='flag-5'>C++</b>中那些不同的地方

    【熱招】蘇州,單片機(jī)工程師

    單片機(jī)工程師】 3年及以上經(jīng)驗(yàn),要求有智能產(chǎn)品經(jīng)驗(yàn)。 崗位職責(zé): 1、根據(jù)MRD,與產(chǎn)品部等部門的需求,負(fù)責(zé)對(duì)新開(kāi)發(fā)的產(chǎn)品進(jìn)行可行性分析,主要負(fù)責(zé)分析產(chǎn)品的軟件可實(shí)現(xiàn)性; 2、根據(jù)產(chǎn)品需求,完成
    發(fā)表于 11-28 14:02

    如何選擇創(chuàng)建c語(yǔ)言和c++

    選擇創(chuàng)建 C 語(yǔ)言和 C++ 都需要綜合考慮多個(gè)因素。在決定使用哪種語(yǔ)言之前,我們需要對(duì)這兩種語(yǔ)言的特點(diǎn)、優(yōu)缺點(diǎn)、適用場(chǎng)景、學(xué)習(xí)成本等進(jìn)行全面的了解和對(duì)比。下面是關(guān)于選擇創(chuàng)建 C 語(yǔ)言和 C+
    的頭像 發(fā)表于 11-27 15:58 ?560次閱讀