我看嵌入式開發

  這段時間,我回答嵌入式相關的問題比較多,結果網友們誤覺得我很懂嵌入式,呵呵,這不,又有問題過來:程序員

原文:算法

 

肖舸老師,您好!謝謝您抽空看個人郵件。
昨天在51CTO認識了您,您對IT行業有着很是豐富的經驗,我如今遇到一個困惑,但願能獲得您的教導與建議。

我已經在工做了,所屬行業是嵌入式Linux。嵌入式行業無疑就是應用開發與驅動開發,我如今困惑的也就是這兩個小方向的選擇。

我瞭解了下如今智能終端的市場,對一個嵌入式設備來說,應用軟件算是比較重要而且吸引人的地方,但我本身又偏喜歡驅動開發。

我本身有思考過了,但終究是剛起步,不太瞭解這行業的需求量或者一些深刻性的東西,沒有您這麼深厚的認識。

您以爲在嵌入式設備上,應用開發與驅動開發哪一個前景會比較好?有什麼建議?

 

個人回答:api

嗯,這位朋友,首先聲明一點啊,我其實本人從事嵌入式開發較少,我並非嵌入式開發專家,我不少基於嵌入式的論述,其實更懂是經過我對計算機軟件開發,或者說計算機軟硬件開發的理解來闡述的。所以,太細的問題我回答不了的,見諒哈。架構

嗯,基於你這個問題,我能夠談點個人見解。ide

我先說個猛的啊,別懼怕啊,呵呵。性能

我認爲,「這個世界上,不存在真正的嵌入式開發!」,猛不猛?學習

爲何這麼說?好,咱們來討論一個話題,什麼叫作嵌入式。spa

嗯,區分方法有不少啦,不過,恐怕你們心目中,最多用的就是「大」和「小」。大,天然相對PC機而言,小呢,嵌入式設備都很小。好比一個控制盒,一個手機,等等。操作系統

但我說這麼論述,偏偏沒有說到點子上。你說大,PC夠大嗎?那IBM的大型機就開始哭了。你說小,我看過工廠裏面的自動生產線,幾百米長呢,比大型機都大。可是,你能說明它不是嵌入式?架構設計

99年的時候,我作過一個系統,《水泥生產窯紅外線筒體測溫報警系統》,看這個名字,算不算嵌入式範疇?

問題是,我是用PC機完成的,呵呵。用了gcc的DOS版本,djgpp,32位的C/C++語言實現的。

原理很簡單,我去買了個紅外線測溫頭,用個螺絲把它上到步進電機上,而後我老闆(他懂硬件),用8235作了一塊卡,要AD轉換嘛,讀出溫度數據,還順便作了幾路IO量,我總得給步進電機打信號啊。

而後焊了個箱子,防雨嘛,我還專門學習了一下油漆技術。而後咱們把這個箱子放到遠處能完整看見水泥窯筒體的樓頂上,在樓裏面找了個房間放PC機,而後就行了。

成本1萬塊,咱們賣了28萬,呵呵。而後,再後來,我都離開那家公司好久了,老闆和我說,每月賣4套,看起來很不錯。

我問問你們,這算不算嵌入式?

固然,咱們不是忽悠錢,這裏面有核心技術含量的,步進電機須要很標準的方波信號,個人問題就是怎麼利用PC機不怎麼準確的時鐘頻率,打出標準的IO方波高電平的,我去年公開了一個算法,《一個帶自適應功能的高精度計時》,就是這裏面最核心的算法,僅僅是我用C++改寫了一下而已。有興趣的朋友能夠看看。

好,這個項目不重要,PC機也不重要,個人問題是,究竟什麼是嵌入式?

說點個人見解吧,我認爲,嵌入式和PC最大的差異,前者是專用計算機系統,PC更加像一個通用的計算機系統。兩者各有優缺點。

嵌入式沒有什麼UI,沒有什麼繁多的功能,強調小而專注,能把一個用戶需求解決到最好,而且,整合度高,不少嵌入式系統就一塊板子,沒有硬盤擴展卡什麼的,穩定性好。

而PC呢,這些也能作,可是因爲PC設計爲通用平臺,強調方便的擴展性,所以,冗餘功能過多,售價有點貴,還有,強調了擴展性,穩定性就受影響,沒有專注系統穩定性好。

可是不絕對,PC在某種場合也能夠充做嵌入式設備使用的,可是仍是要有一些特殊設計,好比說咱們的系統沒有顯卡,板載,這就是考慮穩定性,咱們的擴展板有光耦隔離,防止電流峯值衝擊,咱們的PC是整合式的小機箱,也是考慮做爲一個設備,長期7*24小時工做,穩定性第一。嗯,最後咱們還給這個小PC專門配了一個UPS,主要是維持穩定的電源。

說到這裏,你們有注意到什麼沒有?

傳統的PC,其實並非計算機的所有,計算機造出來,天生就是用來改變人們生活的,PC僅僅是其中一個通用化的表明,它在設計之初,就是爲了應對用戶變幻無窮的擴展需求,所以它強調開放性,有點忽視穩定性。

其實IBM最開始設計PC架構時,更可能是把它做爲一個學習用機器開發出來的,或者說應對家庭平常計算,小規模計算開發的,你看它名字嘛,我的計算機,PC。

只是後來因爲Intel和微軟的力推,再加上業界衆多廠商的推崇,PC成了事實上的通用計算機標準,才發展到今天。

但到了今天,當基礎的CPU、內存、硬盤、GPU速度足夠快,而且造價低廉,能夠大規模應用到生產生活各個方面時,人們才發現,咱們有很好的原件,可是若是每一個設備都用PC的標準架構設計和生產的話,太貴了,也不必。

我很難想象,一個交通燈管理控制盒,我要圖形用戶界面幹什麼?還有,一個mp4,你能放電影播音樂就行了,我爲何要爲你設計插接口卡功能,來解決將來永遠不可能存在的需求,好比說把你做爲一個數據採集終端,讀AD轉換數值?

因此人們在最開始PC平臺上的「加法」(不斷擴展卡,擴展其應用)以後,又開始作「減法」,顯卡不要,砍掉,硬盤不要,砍掉。。。

砍到最後你們發現,咱們還遵照這個PC架構作什麼?能完成業務就行了,因而,從新設計一個標準,更加貼合實際應用的,更小更穩定更便宜的,這不是更好?

因而,arm就產生了。

而後,你們說,PC有些好的經驗咱們仍是要學習,實際上是計算機領域的經驗啦,要有個操做系統,它封裝了不一樣廠商不一樣型號,可是功能類似的元件的差別性,提供統一的api界面,方便應用開發者作開發。

喏,嵌入式Linux就此產生。

這些東東,其實都是瓜熟蒂落的,只要沿着計算機幾十年發展的路徑看看就知道了。

我我的的理解,人類歷史的發展,老是遵循「先解決有無問題,再解決好壞問題」這個客觀規律的。嗯,這是我本身總結的哈,呵呵。

最開始計算設備很貴,因而先設計個通用的平臺,你們都買得起,能夠用它學會開發,這是PC,之後發現通用平臺在解決具體實際問題時很差用,那就由設計一個專用平臺,在擁有必定擴展性的基礎上,強調穩定性,專注化。

你們以爲呢?

因此我一直說,平臺不重要,語言不重要,解決問題是關鍵

嗯,如今回到這個朋友的問題,嵌入式應用開發和PC上的應用開發,有多大差異?Android或者iPhone上開發個遊戲,和PC上開發個遊戲,有多大差異?

驅動,製造廠設計一款硬件,準備歸入到某個嵌入式平臺,你給嵌入式Linux開發一個設備驅動,以便在這個上面開發的應用程序能識別這個設備並用好它,這和咱們開發一塊新的顯卡,數據採集卡,插到PC上,爲Windows寫個驅動,有多大差異?

這也就是我前面說的「這個世界上,不存在真正的嵌入式開發!」的意義。

如今又不少培訓班,專門打着嵌入式開發培訓的旗號,嗯,3G開發也算,對於這類培訓,個人理解不過是把通用的計算機軟硬件設計知識,到嵌入式平臺,或者更細化一點,3G手機平臺上,作了一些具體的應用級調整,更增強調和突出了某些特性而已。

從知識體系上講,這和普通大學的計算機軟件專業課程安排,我我的的理解,並沒有本質的不一樣。

因此,對於但願從事嵌入式開發的朋友們,我有這麼幾點建議,不必定準確哈,你們作個參考罷了。

一、沒有真正意義上的特定類型開發,全部的開發,基於的知識、原理都差很少,你們要作的,是把今天的知識學好,學紮實。

二、開發人員,特別是程序員,天生就應該會抽象,抽象是咱們這個行業的重要特性,那麼,開發抽象來看,其實你們都差很少。

三、嵌入式的特性是「」,即對某個系統,某個平臺,某個知識點,要求理解特別「深刻」,能發現其性能的極致並展示出來,這是嵌入式本質的生存基礎。所以,要求咱們有鑽研精神,可以就一個問題探討到極致。

四、技術能夠「」,人不能夠「太鑽」,即視野不能窄了,嵌入式的應用,是要解決人們某個方面的問題,可是咱們知道,凡是涉及生活中的問題的,其知識面不可能窄了,你看一個電動車都涉及多少個專業的知識?嵌入式開發必定是合做開發,有軟件,有硬件,有自動控制理論,有傳輸,有圖形圖像解碼,一我的很難作到面面俱到,所以,要善於跨專業學習,起碼要理解別人行業的特性,合做中才能取得好效果,不能自顧自。

五、嵌入式開發容易取得好的回報,可是不容易出現我的英雄主義的成績,這個心態要調整好,其實如今哪一個大點的系統,是一我的能完成的,要有團隊合做精神,作人要低調一點,虛心一點,多學一點,就能越走越遠。

六、嵌入式開發更像軟件開發的綜合性學科展示,對我的能力提出了更高的要求,可是回報很豐厚,這一行是能夠輕易產生百萬富翁的,也是能讓一我的作一生開發不愁沒飯吃的,可是,沒有付出就沒有收穫,嵌入式開發要成才,其學習曲線比單純的軟件開發陡不少,要作好吃苦的思想準備。

七、嵌入式求職建議不要把目光放在傳統意義上的IT企業,不少製造業,不少設計研究單位,包括不少國企,他們都須要嵌入式綜合性人才,所以,找工做時不妨眼光看開一點,說不定機會更好。

嗯,先這麼多吧,我也是一邊想一邊寫,可能不必定全面,你們先看看吧。

有問題再問。

肖舸(QQ:712123)

相關文章
相關標籤/搜索