這段時間,我回答嵌入式相關的問題比較多,結果網友們誤覺得我很懂嵌入式,呵呵,這不,又有問題過來:程序員
原文:算法
個人回答: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)