<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          嵌入式軟件工程師有必要精通算法,參加各種編程大賽嗎?

          共 3309字,需瀏覽 7分鐘

           ·

          2021-07-09 03:40

          關(guān)注、星標(biāo)公眾號,直達精彩內(nèi)容

          來源:嵌入式資訊精選

          知乎上有人問


          經(jīng)常在網(wǎng)上看到很多牛人有ICPC等各大編程大賽的經(jīng)歷。


          我是學(xué)習(xí)嵌入式開發(fā)的,感覺我天天都是在看芯片資料,代碼難度也不高,甚至很多都有現(xiàn)成的,只要改改就可以自己用。


          好像什么高級算法、超強的數(shù)學(xué)能力在我的學(xué)習(xí)中都沒有什么體現(xiàn)?。?nbsp;完全用不到啊~~


          那做算法研究,ICPC為了什么???都是做研究的牛人嗎??


          ICPC這些東西對一般程序員有什么意義??


          下面是各位過來人的回答:



           陳俊直 

          你參加ICPC沒有必要,行業(yè)不同,那是計算機軟件工程師參與的。個人感覺嵌入式工程師所涉及的算法和計算機軟件工程師所設(shè)計的算法有一小小差別。計算機軟件工程師要實現(xiàn)的是運行在通用計算機平臺上的軟件,算法研究偏向于盡量降低系統(tǒng)的開銷,完全不需要考慮硬件設(shè)備。


          而嵌入式軟件工程師所設(shè)計的工作是面向機器編程或者是面向過程編程,算法多考慮的是如何結(jié)合硬件來處理事件。因為嵌入式系統(tǒng)不像計算機那樣有大量的內(nèi)存資源(RAM基本以KB計算,所以很少敢用鏈表,甚至部分電子、測控、自動化專業(yè)學(xué)生都不學(xué)數(shù)據(jù)結(jié)構(gòu),雖然他們以后可能也從事嵌入式軟件研發(fā)),但當(dāng)你用DSP處理圖形圖像、音頻、電機控制的時候,就會用到算法了。最簡單的是《自動控制》課本里提到的PID。還有我聽到過而沒做過的神經(jīng)網(wǎng)絡(luò)算法(在實驗室跟做項目時候聽研究生們說的,但我只是個本科生。自控課本里那堆數(shù)學(xué)理論都沒看懂呢),打個比方,要設(shè)計一個嵌入式系統(tǒng)控制自加熱水壺的水溫精確并快速達到60℃,是直接燒到60℃就停止加熱(但停止后有余熱會繼續(xù)升高溫度,這樣浪費電能);還是加熱到五十多度后停止加熱讓余熱慢慢使水溫到達60攝氏度后再斷續(xù)控制水溫(如何做到既省電又省時間)。


          而對電機的控制,記得看過MIT的學(xué)生做的四軸飛行器,那個東西在狂風(fēng)中飛行都可以做到平穩(wěn)自如,拿桿子捅它也只是晃動一下,很快就回復(fù)平穩(wěn)狀態(tài)。這也是自控的算法實現(xiàn)的。還有更接近人們生活的嵌入式系統(tǒng)算法就是實現(xiàn)汽車ESP車身穩(wěn)定系統(tǒng)的那些算法。


          所以,嵌入式軟件研發(fā)工程師其實跟普通計算機軟件工程師(程序猿)在設(shè)計思維上還是有一些區(qū)別的。但共同點是:苦逼加班必不可少……


          PS:本人對這些過程控制、自動控制理論實踐較少,如有錯誤敬請指出。



           沈沉 

          因為你對自己的定位是"一般的程序員",所以確實沒什么意義。



           李劍波-游友移動 

          嵌入式與算法沒有直接聯(lián)系。你提到的嵌入式開發(fā)是屬于嵌入式系統(tǒng)的驅(qū)動單元,嵌入式系統(tǒng)中涉及算法的部分應(yīng)該在“主控單元”。如果你想覺得做算法高級,可以考慮到通信領(lǐng)域試試看。通信領(lǐng)域的無線信道計算里會涉及很多算法,但是也基本成熟。


          還有機器人領(lǐng)域,在機械手臂控制上會有識別算法,還有就是涉及圖像處理的嵌入式領(lǐng)域。另外,樓主應(yīng)該知道每個人都有自己的成長軌跡,這個軌跡與周圍環(huán)境關(guān)系巨大,你想想還有人30不到當(dāng)國家一把手,雖然大家軌跡不同,但是軌跡的終點應(yīng)該是我們心里所尋找的地方,而不是從眾的結(jié)果。如此,每個人的人生都是獨特的。



           邱震鈺 

          有這閑情干嘛不留著去享受造車輪的樂趣,寫點編譯器、3D圖形引擎、regex引擎、通用Adt庫、網(wǎng)絡(luò)庫、3D超級瑪麗之類的或者在嵌入式實現(xiàn)一些你想有別于一般嵌入式從業(yè)者的東西,ICPC這種,不適合你(價值觀上)。


          條條大路通羅馬。



           tom pareto 

          建議回頭把嵌入式系統(tǒng)的定義再回顧一下。什么叫嵌入式系統(tǒng)?國內(nèi)一個普遍被接受的定義是:嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統(tǒng)。這里的定義很值得琢磨,由于嵌入式系統(tǒng)與常規(guī)計算機系統(tǒng)相差較大, 所以對代碼質(zhì)量的要求很高。


          從計算機的角度來看,程序的性能要高,所以時間復(fù)雜度要低。由于內(nèi)存小,所以空間復(fù)雜度要低,要設(shè)計很好的數(shù)據(jù)結(jié)構(gòu)。功耗要低,所以將一些硬件功能用軟件完成。從應(yīng)用的角度來看,嵌入式系統(tǒng)以應(yīng)用為中心,所以有一大票應(yīng)用的算法需要開發(fā):語音識別、人臉識別、數(shù)據(jù)融合、路徑檢測、機器視覺、壓縮編碼、信號檢測、...…。


          在你的工作中,算法和數(shù)學(xué)能不能用上,取決于你自己。類似于機械加工,一般技術(shù)工人并不需要太高的理論水平,只需要讀懂工程師給的圖就可以了。但是,對于工程師來說,那就不一樣了,必須合理地選擇材料、結(jié)構(gòu)、工藝,這個時候就需要理論了,所以一切取決于你自己了。



           李俊杰 

          根據(jù)你工作內(nèi)容而定,根據(jù)你個人偏好而定,如果你愛造輪子,這些有用。嵌入式也分硬件和軟件。如果你選擇偏硬件,在電子上多下功夫,軟件競賽對你沒有用。如果選擇偏軟件的,現(xiàn)在比較多的是linux驅(qū)動開發(fā),也沒有涉及多少算法。但是不想做底層的搬運工,想可以往上層轉(zhuǎn)型的時候,像圖像處理,語音識別這些涉及數(shù)學(xué)的就比較多了,然后感興趣可以走機器學(xué)習(xí)之類高薪低競爭的方向??催@些的時候,算法和數(shù)學(xué)功底就顯得尤其重要了。簡單的使用單片機、DSP,控制個電機、連個攝像頭,都沒有多少技術(shù)含量。像樓上提到的四軸、自平衡的優(yōu)化、機器人、路徑的規(guī)劃、攝像頭、圖像的壓縮等等,同樣的東西看你自己要挖掘多深了。



           王鑫 

          電子專業(yè),大一打了一年ACM,區(qū)域賽打醬油蹭個銅牌,至少寫起程序來虐虐同學(xué)還是很容易的(學(xué)校很一般般)。參加這類比賽還是會讓你的思路開闊一些,代碼實現(xiàn)能力強一些。



           仲睿光 

          作為一名有多年OI經(jīng)歷,目前研究軟件無線電方向的嵌入式算法工程師來回答一下吧。我現(xiàn)在做的主要是各種通信算法在FPGA、DSP及多核arm上實現(xiàn),如寬帶抽取濾波器,主要難點是算法在并行下的展開,強實時要求下的調(diào)優(yōu),所涉及到的知識結(jié)構(gòu)主要是計算機體系結(jié)構(gòu)的基本知識(如CPU工作原理)、數(shù)字電路,但是在實現(xiàn)時候要對算法本身了解透徹(據(jù)說近幾年acm和oi出過fft相關(guān)試題?本人沒有親自考證)。以fft為例,該運算在FPGA上的實現(xiàn)思路與PC及GPU思路完全不同。此外還有各種為了接近硬件io瓶頸的zero copy的代碼研究。從嵌入式工控方向看,也對數(shù)學(xué)基礎(chǔ)有一定要求,如無人機飛控涉及到的算法。當(dāng)然應(yīng)用面較廣的通用嵌入式,主要側(cè)重于業(yè)務(wù)組合,對算法要求不高。



           匿名用戶 

          對于“一般”程序員,有很高的概率沒有意義。嵌入式行業(yè)依托于硬件,測試成本更高。實際的開發(fā)中,大多數(shù)時候會更傾向于穩(wěn)定為主,出于成本效益角度考慮,沒有機會讓你去按照你的想法去做你想做的。一個“一般”的開發(fā)人員,在這個方面基本沒有什么話語權(quán)。不管初創(chuàng)公司也好,行業(yè)生存十幾、幾十年的公司也好,代碼往往都是撿著現(xiàn)成的來。說PID算法的,哪家公司會讓你自己從零實現(xiàn)?還不都是以調(diào)參為主,這對開發(fā)人員有很高的要求么?而且還有一種悲哀的情況是,嵌入式行業(yè)公司的競爭力,技術(shù)以外的東西更多,技術(shù)人員的重要性相對低。你做開發(fā)的費盡心機做的優(yōu)化,很可能比不上銷售的一杯酒,比不上評審時的一個悄悄送上的信封…



           歷蘇 

          一般來說,嵌入式軟件開發(fā)的復(fù)雜度不可與計算機的開發(fā)相比,所以對算法的要求不會那么高,但是往往為了壓低成本,大部分嵌入式設(shè)備的內(nèi)存和存儲空間會比pc小很多,因此也是需要進行算法優(yōu)化的,所以高級的嵌入式設(shè)備對基本的數(shù)據(jù)結(jié)構(gòu)和算法還是要學(xué)的。但往往嵌入式更重要的是要求硬件設(shè)計的品質(zhì),還有軟硬件結(jié)合、系統(tǒng)移植、驅(qū)動程序開發(fā)(可能需要連接傳感器)的知識。


          整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有 |

          | 如有侵權(quán),請聯(lián)系刪除 

          ????????????????  END  ????????????????

          推薦閱讀:


          嵌入式編程專輯
          Linux 學(xué)習(xí)專輯
          C/C++編程專輯
          Qt進階學(xué)習(xí)專輯

          關(guān)注我的微信公眾號,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。


          點擊“閱讀原文”查看更多分享。

          瀏覽 35
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人影片黄色A片 | 大香蕉这里是精品12 | 嗯~啊~乖~进去了~h~乖视频网站免费 | 无毒不卡视频在线播放 | 97天天 |