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

原文:

 

肖舸老師,您好!謝謝您抽空看我的郵件。
昨天在51CTO認識了您,您對IT行業有著非常豐富的經驗,我現在遇到一個困惑,希望能得到您的教導與建議。

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

我瞭解了下現在智慧終端的市場,對一個嵌入式裝置來講,應用軟體算是比較重要並且吸引人的地方,但我自己又偏喜歡驅動開發。

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

您覺得在嵌入式裝置上,應用開發與驅動開發哪個前景會比較好?有什麼建議?

 

我的回答:

嗯,這位朋友,首先宣告一點啊,我其實本人從事嵌入式開發較少,我並不是嵌入式開發專家,我很多基於嵌入式的論述,其實更懂是通過我對計算機軟體開發,或者說計算機軟硬體開發的理解來闡述的。因此,太細的問題我回答不了的,見諒哈。

嗯,基於你這個問題,我可以談點我的看法。

我先說個猛的啊,別害怕啊,呵呵。

我認為,“這個世界上,不存在真正的嵌入式開發!”,猛不猛?

為什麼這麼說?好,我們來討論一個話題,什麼叫做嵌入式。

嗯,區分方法有很多啦,不過,恐怕大家心目中,最多用的就是“大”和“小”。大,自然相對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手機平臺上,做了一些具體的應用級調整,更加強調和突出了某些特性而已。

從知識體系上講,這和普通大學的計算機軟體專業課程安排,我個人的理解,並無本質的不同。

所以,對於希望從事嵌入式開發的朋友們,我有這麼幾點建議,不一定準確哈,大家做個參考罷了。

1、沒有真正意義上的特定型別開發,所有的開發,基於的知識、原理都差不多,大家要做的,是把今天的知識學好,學紮實。

2、開發人員,特別是程式設計師,天生就應該會抽象,抽象是我們這個行業的重要特性,那麼,開發抽象來看,其實大家都差不多。

3、嵌入式的特性是“”,即對某個系統,某個平臺,某個知識點,要求理解特別“深入”,能發現其效能的極致並展現出來,這是嵌入式本質的生存基礎。因此,要求我們有鑽研精神,能夠就一個問題探討到極致。

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

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

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

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

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

有問題再問。

肖舸(QQ:712123)