我看嵌入式開發

2021-09-05 08:27:55 字數 4067 閱讀 6214

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

原文:肖舸老師,您好!謝謝您抽空看我的郵件。

昨天在51cto認識了您,您對it行業有著非常豐富的經驗,我現在遇到乙個困惑,希望能得到您的教導與建議。

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

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

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

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

我的回答:

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

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

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

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

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

嗯,區分方法有很多啦,不過,恐怕大家心目中,最多用的就是「大」和「小」。大,自然相對pc機而言,小呢,嵌入式裝置都很小。比如乙個控制盒,乙個手機,等等。

但我說這麼論述,恰恰沒有說到點子上。你說大,pc夠大嗎?那ibm的大型機就開始哭了。你說小,我看過工廠裡面的自動生產線,幾百公尺長呢,比大型機都大。但是,你能說明它不是嵌入式?

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

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

原理很簡單,我去買了個紅外線測溫頭,用個螺絲把它上到步進電機上,然後我老闆(他懂硬體),用8235做了一塊卡,要ad轉換嘛,讀出溫度資料,還順便做了幾路io量,我總得給步進電機打訊號啊。

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

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

我問問大家,這算不算嵌入式?

好,這個專案不重要,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企業,很多製造業,很多設計研究單位,包括很多國企,他們都需要嵌入式綜合性人才,因此,找工作時不妨眼光看開一點,說不定機會更好。

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

有問題再問。

嵌入式開發

經常會有人說嵌入式開發,嵌入式開發千差萬別,我總體上分為4個等級 微電子開發 rtos開發 指令碼開發 富應用開發 這一類產品行為比較固定,比如說電視遙控器,遙控汽車,電飯煲,恆溫燒水壺,溫濕度感測器,智慧型門鎖等。這些裝置行為都比較簡單,通過按鈕可以設定系統功能和行為。量不大,經常會選用flash...

初識嵌入式 嵌入式開發概述

1 什麼是嵌入式技術 1 嵌入式軟體與非嵌入式軟體的區別?答 嵌入式軟體是結合作業系統之上做的開發 非嵌入式軟體是做的裸機開發。裸機 沒有作業系統 2 嵌入式開發與微控制器開發的區別?答 區別 是否有作業系統。拓展 答 優點 解決了軟體的移植性 解決了開發人員的能力的劃分問題。提供了豐富的網路協議 ...

我學嵌入式

現在我讀的專業是嵌入式,什麼是嵌入式?大家都知道軟體和硬體,以後的生活 現在也已經開始 將是乙個較為簡易的模式,就是你拿起自己的手機或者其他裝置,利用安裝好的軟體去直接控制各種器件,幾乎不需要你本人去操作。那麼什麼使得你可以利用軟體去控制這些硬體呢?誒,既然人不需要去操作,必須有東西去為你操作對吧,...