嵌入式開發需要演算法嗎?

本人大三狗,磕磕絆絆搞了一年半的ACM,近來越來越能感到演算法在軟體開發中的重要性,但是一直不太明白嵌入式開發是否也需要演算法,他們能應用在哪裡,ACM學到的演算法知識又有哪些可以應用到嵌入式開發之中,以及演算法的修為對嵌入式的開發到底有多少幫助。疑惑有些多,憋在心裡好久了!


謝邀。

我現在做的設備多數是裸奔的,偶爾有少數設備用到了uC/OSII系統。除了數字濾波演算法(不用鏈表,直接對數組或位進行排序),基本沒用到數據結構上的演算法(尤其是鏈表,因為資源不允許)。

而大部分控制類產品,則用到了PID演算法。用到數字信號處理方面的多數是類似FFT之類的。

沒接觸過ACM所以不知道自動控制演算法和計算機的ACM玩的有什麼區別。


我大學時候也搞過ACM,現在正好在做嵌入式。

首先,有兩點是必須肯定的:演算法在嵌入式里肯定是有用的,ACM對於你將來學習嵌入式也是有好處的。

但是ACM的演算法直接用在嵌入式工程領域的很少,ACM是培養你的思維方式和解決問題的能力,但ACM的那種風格並不適用於工程開發領域,更有點像科研,工程開發中則更重視實際用途。

我認為搞ACM和做嵌入式不衝突,大學裡搞ACM,畢業去做嵌入式很正常,做ACM的人會比別人學的更快。

嵌入式里用的最多的就是數組和鏈表,當然不是說複雜的東西就不用,而是一般來說,工程的代碼強調穩定性,一個演算法一旦固定,通常不會怎麼改。

很多強調性能的地方,演算法還是很重要的,比如內存管理、文件系統等等,如何換頁、如何分配內存、怎麼查找文件最快、用哪種樹等等。

所以,ACM有用,嵌入式也用演算法,搞好ACM對於你將來做嵌入式是有好處的。


自從我找了一份嵌入式平台音頻視頻中間件開發的工作之後,我就知道要看演算法了……

嵌入式本身只是一個開發平台,在這個平台上做什麼是不限的


程序員對於演算法來說要求並不是很高,只要能看懂就行,因為這個就是一個輔助,畢竟你也不是演算法工程師,可能你是沒有對於嵌入式了解或者對於軟體的開發,嵌入式首先確保自己的C語言過關,然後可以從系統編程入手,在深入到裸機開發、系統移植、驅動開發 等。這是大致的學習方向。嵌入式是屬於今年開始火爆起來, 嵌入式需要懂得的一些基本有,Linux,C語言,數據結構,文件IO,並發程序設計,進程間通信,網路編程,資料庫開發,在線詞典,ARM-4412,系統移植,驅動開發,Android系統開發。還可以在群里20103091多交流,等你理解這麼些關鍵詞的時候,那麼你嵌入式相對也是懂得了差不多的地步。嵌入式目前比較用的最多的就是智能小車的領域。深入人們的生活。以後也是一種朝陽的行業。 下面是學習的步驟。大致如下。

一、 嵌入式的學習第一階段首先的c語言,C語言是嵌入式領域最重要也是最主要的編程語言,然後在c語言的基礎上學習C語言的高級編程知識,包括結構體、共用體、內存管理等;然後學習數據結構的核心內容,包括順序表、鏈表、隊列、棧、樹、各種查找和排序演算法等。

二、學習是關於Linux文件下應用層開發,並發程序設計,Linux應用開發中的網路編程,資料庫之sqlite3。

第三階段包括Zigbee系統開發,低功耗wifi網路開發,藍牙4.0BLE開發,RFID開發,mbed 開發平台(cortex_M4單片機),6LoWPAN、Contiki系統的移植,OneNET開放雲平台。

第四階段就可以選擇做智能家居系統、智能農業檢測、智能物流倉儲系統、安防監控系統、智能穿戴、智能機器人小車、無人機等項目。

更加詳細掌握嵌入式知識或者學習路線如:

一、嵌入式學習路線1一

二、嵌入式學習線路2

三、嵌入式學習線路3

四、嵌入式學習線路4


如果數字信號處理也算演算法的話。。。

需要。。EE系的演算法和CS不同

=_=acm的東西感覺了解了解貪心之類初級演算法還有幾種在kernel出場率高的數據結構也就夠了

反正不管mcu 還是linux driver

acm的演算法都沒有那麼重要,不是決定性的,還不如好好去學dsp,學各種協議棧。。而且如果acm搞的好,何必來做硬體。。


國內很多小企業從事嵌入式設備研發,但大都處於比較簡單的層次,無非有一個市場熱點,趕快弄一幫人仿個產品出來,不考慮長遠,這種情況下,除了一些特殊行業的演算法會用到一些特定演算法(如測控行業會用到濾波演算法),一般用不著,複雜的數據結構更用不著。

但隨著企業的發展,嵌入式軟體平台架構技術開始慢慢的變化了,不在是重複的一遍遍的發明輪子,都開始平台架構了,此時,很多的演算法就開始登堂入室了。

我在日本東芝電氣事業部工作,一個配置軟體比編譯器還複雜,大家說會不會用到演算法,會不會用到鏈表,圖,樹的搜索。真希望能有更多的國人意識到這種差距,尤其是一些處於領導位置的人,不然,中國圖強就是一句空話。

我將自己多年的積累,以及看到的,聽到的,悟到的做成了一集視頻,名字叫異維設計,放在了網易雲課堂上,至少可以開闊一下大家的視眼,不要做井底之蛙。


我見過有人用FPGA做的人臉識別演算法


之前做電源嵌入式軟體開發,說實話不太清楚演算法的定義是什麼。如果PID是演算法的話,那麼對於不同狀態的相應處理算不算演算法,好的點子算不算?如果算,好重要的~


音視頻相關需要優化性能的應該需要,業務相關的穩定性更重要。


推薦閱讀:

走班制的排課與傳統排課有何區別?
一個全是數字的大數組,除了其中一個數字出現2次外,其餘的數字都出現了3次。如何找出那個只出現了兩次的數字?
為什麼我精通並實現了《數據結構與演算法》上的所有功能還是找不到工作?
如何簡單易懂地理解貝葉斯非參數模型?
四億個兌換碼的生成/驗證演算法?

TAG:演算法 | 硬體 | 單片機 | 嵌入式開發 | ACM競賽 |