『壹』 編程入門先學什麼
編程入門先學C語言或者python。
為了解決使用機器語言編寫應用程序所帶來的一系列問題,人們首先想到使用助記符號來代替不容易記憶的機器指令。這種助記符號來表示計算機指令的語言稱為符號語言,也稱匯編語言。
在匯編語言中,每一條用符號來表示的匯編指令與計算機機器指令一一對應;記憶難度大大減少了,不僅易於檢查和修改程序錯誤,而且指令、數據的存放位置可以由計算機自動分配。
使用匯編語言編寫計算機程序,程序員仍然需要十分熟悉計算機系統的硬體結構,所以從程序設計本身上來看仍然是低效率的、繁瑣的。
但正是由於匯編語言與計算機硬體系統關系密切,在某些特定的場合,如對時空效率要求很高的系統核心程序以及實時控製程序等,迄今為止匯編語言仍然是十分有效的程序設計工具。
但它有不可替代的特性,比如一些單片機或者一些直接控制硬體的程序就一定要用匯編語言。
『貳』 為什麼在工業上多用PLC而不是單片機
PLC的特點 1.PLC的可靠性高這也是在工業領域應用最多的原因之一。PLC的構成簡單來說就是通過單片微型計算機再加上相應的保護電路及自診斷功能組成的,因此PLC的穩定性與安全性都高於單片機。
2.PLC的輸入和輸出功能模塊齊全。PLC針對不同的工業現場信號如直流或交流、開關量、數字量或模擬量、電壓或電流等,均有相應的模塊與工業現場的器件(如按鈕、開關、感測電流變送器、電機啟動器或控制閥等)直接連接。這正適合了在工業場景中的大多數開發要求。
3.PLC的編程容易方便,PLC的編程多採用的是梯形圖方式,這種方式可以類比於早些年前的繼電器拼裝成的大規模控制系統,易於開發控制。
4.PLC的現場安裝調試比較於單片機具有很大的優勢,他的安裝大多數是採用的模塊化安裝加現場匯流排的方式,而單片機的應用還要選擇合適的地點封裝散熱性等等。
綜上PLC和單片機的優勢對比可知在工業上對PLC的應用多單片機。
單片機的特點
1.單片機的研發首選需要設計應用場景的原理圖,PCB圖最後到電路板的製作,然後再進行編程這種方式的的缺點是開發時間久,應用的兼容性差。
2.單片機相比於PLC的優點在於對於復雜系統的控制能力強,價格便宜,體積小適合常用的家用電子產品。
電子設計學堂將持續推出電子DIY設計小視頻,零基礎學習文章,電子設計技巧等知識,歡迎大家的關注!
剛開始單片機在工業應用的,後來由於工業控制的復雜化在加上單片機的性價比等因素,得不到推廣於工業領域。至九十年代,電子產品的來潮,單片機才迎來真正屬於自己的一片天。工業領域不能因為單片機而止步不前,於是在傳統繼電器控制基礎上研發出可編程邏輯控制器(PLC)。消費電子產品更新換代快,而單片機成本也低且便於量產,對電子產品最好不過了。不像工業上用的需要穩定可靠還要用的久,雖然PLC貴但是用時久了也相當於把成本降低了。
工業上多用PLC而不是單片機,也是有原因的。
工業控制領域對穩定性和可靠性要求高,不能三天打漁兩天曬網,對企業損失是巨大。工業控制環境惡劣,有防護等級要求、設備露天作業等,遇到雨天、潮濕天氣、極寒天氣,單片機運行能穩定不?可靠性不敢恭維!在工業領域,I/O點動不動成百上千,單片機肯定抗不住,PLC都要弄套冗餘系統以防萬一,單片機很難辦到。工業控制只是它其中一部分,用過PLC的都知道。需要數據採集、通訊、上位、組態,運動控制及顯示,得完全依賴工業體系與通訊協議造成,單個的單片機是搞定不了的。比如MODBUS、OPC、PROFIBUS的實現。
開發周期短於單片機,門檻低,不像單片機編程的C語言、匯編語言對於初學者難度大,而PLC編程只要有繪制電氣原理圖的能力,它的梯形圖編程就能很好入門。拿開發周期而言,一個人開發能不?等你弄出來PLC早已經做好准備上現場了。大型項目的高壓設備啟動運行,小小單片機不得玩死。適用人群也不同,單片機主要是電子工程師而PLC是電氣工程師,這兩種不同的職業,肯定融合不了,說白了很多電氣工程師都不知道玩C語言、匯編語言之類的開發語言。電氣工程師覺得編程不夠優化,PLC可以自行修改,單片機做好之後就是固定的不是專業人士根本無濟於事。例如工業生產過程需要增I/O點刪I/O點,單片機能行嗎?
PLC它的就是穩定性好,不像我們的消費電子產品,例如手機閃退對我們沒損失,大不了重啟一下。但是在工業上,你這樣時不時閃退企業還不被活活玩死,嚴重時造成人命都沒了。雖然單片機成本低,從整體看單片機的性價比跟PLC比不了的。
說個很形象的比喻吧,在工控領域,PLC相當於小學文化,單片機相當於初中文化。
PLC實質上就是一套集成各種外設功能的單片機控制系統。使用PLC有兩大好處,一是編程容易,上手快。二是基本不用考慮硬體的可靠性和適配性問題,需要什麼功能就選什麼樣的模塊就行。
而單片機用起來就麻煩很多,使用者要更多的考慮電路系統及外設硬體的可靠性,而且編程基本用C和匯編等基礎語言,對編程者的邏輯思維能力要求比較高,而且軟體和硬體的結合適應更是個很撓頭的事。能熟練掌握單片機軟硬體系統,那反過來學習和使用PLC就是小兒科了。
從兩者的應用來說,PLC側重於對工控成本比較寬松,而且對可靠性要求比較高的場合,比如機床,設備等。而對於偏重成本的中大批量產品,毫無疑問必須使用單片機。
由於掌握單片機的應用比掌握PLC,有更廣泛的應用,所以建議年輕的從業者應該不畏艱難,從單片機入手進入工控的世界。PLC需要的話,再入手不遲
朋友們好,我是電子及工控技術,我來回答這個問題。PLC自1969年在美國誕生以來它就是為了解決當時工業控制領域中一些特殊的控制需要,由於在試用期間它的運行情況表現很出色,慢慢地PLC就在工控界發揮著越來越重要的作用了。到目前為止PLC已經成為了工控領域中的核心控制器件了,我所在的單位中很多設備中都是選用的PLC作為核心控制器件,比如機器人多功能工作台上就有西門子S7-1200的PLC,它作為機器人本體的外設專門負責機器人與其它器件的協調控制工作,比如各類感測器所檢測到的信號首先要送入到PLC,然後通過PLC內部程序的處理後得到的開關信號告知工業機器人啟動、暫停或者復位等一系列動作。另外還有數控機床中也使用了內置式PLC裝置。由此可見在工業控制領域中PLC的使用是隨處可見的,下面我來說說在工業控制中為什麼對PLC情有獨鍾。
PLC在工業控制領域中的優點
在工業控制領域中PLC作為不二的選擇,它到底有哪些魅力讓工業控制系統的設計技術人員對它如此重視呢?在我看來主要體現在以下幾個方面,其一是PLC具有很強的抗干擾能力和很高的可靠性,在我們單位實驗室中有近20台PLC,自從2005年實驗設備進來之後,每天都在運行工作,到目前為止PLC模塊還沒有出現過故障,其它模塊都已經換了一個又一個了,從這點可以看出PLC的可靠性有如此之高,據我所知在一些品牌的PLC中還採用了冗餘的CPU(中央處理器),像這樣的PLC無故障的時間會更長。
接下來我再聊聊關於PLC的抗干擾能力強的問題,PLC在設計之初就已經考慮到了它所工作的環境,在工業環境中可能會有很強的磁場干擾,電路中的高次諧波干擾等等,因此從PLC內部電路元器件的選擇上就選擇了高質量,性能好的元器件,比如它的微處理器CPU就採用了抗干擾能力強的CPU。在電路的設計上就採用了多重抗干擾技術,我們從電源上講就使用了多級濾波技術,後面還使用了集成的穩壓塊進行穩壓,這樣以來不管是外部電源高次諧波的影響還是電源電壓的波動,PLC都能泰然處之。最後從電磁干擾方面講,由於PLC的輸入和輸出埠都使用了光電隔離技術,在PLC整個電路的設計上都使用了屏蔽技術,這些技術手段的使用也使電磁干擾信號沒有可乘之機。從以上我說的可以看到PLC天生就是為工業控制領域所使用的控制器。
第二點我們再從學習PLC的難易程度來看,我們知道PLC最初是在繼電器控制電路的基礎上誕生的,它可以使用非常形象的梯形圖作為控制「語言」,這樣非常直觀。對於很多電氣技術員來說學會也是非常容易的事情了,因此一般的電氣技術人員在設計控制系統時首先就會想到運用PLC來控制了。
第三點從PLC控制電路的維護和升級方面來看也是非常的方便,同時在以PLC為核心的控制電路中,從硬體配置、安裝以及到軟體的使用即使計算機技術一般的人員也能上手去做,這樣的話也會大大縮短整個電路完成的時間,我認為由於PLC有了以上的眾多優點,在工業控制中使用它是理所當然的了。
單片機在工業控制領域中的短板
我們在反觀單片機這種控制晶元,我接觸它也有好些年了。從我使用過程中單片機有很多「致命」弱點,比如它的抗干擾能力就很弱,尤其是在工業環境這樣惡劣的地方,用單片機控制根本顯示不出它的優勢。先從電壓要求來說它需要較低的電壓,稍不留神就會燒壞單片機晶元,我在玩單片機時就是因為電壓的問題燒壞了許多,當單片機過低的時候它就會「罷工」不給你工作了,我在維修單片機控制電路板時,經常會查出因為電源電壓低造成整個控制電路無法正常工作。比如有的單片機正常工作電壓是5V,當電壓降到3.4V時它就「罷工」不工作了,我認為單片機比較「嬌貴」不好伺候,可靠性差。另外單片機所使用的語言相比較PLC梯形圖語言來說學習難度要大,比如它所用的C語言或者匯編語言,要編一個像樣的控製程序需要很熟練的掌握才行,短時間無法完成,這樣用它設計工業控制系統所需的時間會延長。
工業生產首要的因素就是穩定!因此,我們設計一個工業控制系統首先考慮的因素就是可靠!而PLC就是專門為工業生產設計的,它的實質就是一個單片機系統,但是它比單片機更可靠,更穩定,更不容易受干擾。現在,由於惡性競爭,為了降低成本,都在用單片機替代PLC,看似成本降低,實則掩耳盜鈴。試想,一個系統你用單片機替代PLC省了一部分錢,但是由於不穩定導致的停產,你所損失的遠遠大於你節省的成本
plc的核心也是單片機啊,plc是系統,是通用成品,側重於控制方案的實現,可以隨時修改程序,所以編程簡單,成本高。
單片機是晶元,要加上好多外圍電路設計才能用,適合批量生產,定製設計,修改難度大,成本相對低。
二者不能簡單的對比,工業的控制對象介面比較標准,因此通用類的plc比較適用。
可以這樣說,單片機就是面向工業控制應用的成熟產品。但是單片機應用的行業要比plc廣泛得多。
解答這個問題,首先要了解PLC和單片機的聯系!提到單片機,大家往往會想到51單片機,其實單片機種類非常多,比如arm。那你打開某款PLC,會發現他的cpu就是某arm處理器。
這時你應該明白,PLC只不過是模塊化的單片機系統!
一、用單片機解決一個工業控制問題,不是不可以,太費時!首先,根據工藝搭建硬體電子電路,這些電路包含通信電路,光耦隔離電路,模擬量的模數轉換或數模轉換電路,基本時鍾……一大堆電路,然後,基於你搭建的電路開發所需要的程序,一般用c語言,開發非常費時。等你完成這個程式控制器時,人家早用PLC做了100多個項目了。用PLC做系統,不用考慮電子硬體電路,只需要加幾個不同功能的模塊就可以編程了,常用的梯形圖程序比c語言簡單多了,有現成的函數,功能塊,咱就拿最簡單的定時器做比方,單片機做個精確定時程序要比plc費力的多。
二、你的工程做好了,發現需要修改,用plc系統做的,添加模塊,換別的模塊,修改程序,改一些線,分分鍾搞定,單片機系統呢?把電路板重做!
三、一個大型的工控項目比如有幾千個控制量,要是用單片機,得搭建多少電子電路?大項目往往有很多智能儀表,人機界面,工控機,你要考慮你製作的單片機電路板和這些都兼容,通信驅動程都要搞定!用大型plc比如西門子s7_400,很容易實現設備間的通訊,組成現場匯流排,設備與設備間的大多數通信可以兼容,省去大量時間。
四、不敢保證你用單片機製作的電路可靠性能夠滿足工業現場需要。plc,一般西門子的,可靠極了!
五、有些設備,只要程序相對固定,只需要設置參數,那就不用plc,用專業程式控制器!比如燃燒器程式控制器,它也和plc相似,也有幾路輸入輸出,但是,工藝固化,不需要編程!這些專業程式控制器就是拿單片機開發的!
六、plc正是 社會 化分工的縮影!一個電氣工程師要完成一個項目,他只要把精力放在宏觀項目上就可以了。電子工程師和計算機工程師已經為電氣工程量身打造開發了plc系統,組態軟體,人機界面等等,這些拿來用就行了。
單片機可以替代PLC 嗎?答案是「不太可能」。第一次聽到這個答案可能會讓你感到意外。
一、什麼是單片機,什麼是PLC
1、單片機
單片機(Microcontrollers),也簡稱MCU,是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。
特點是編程、維護相對復雜,編程方式常用C語言或匯編,成本較低,IO口相對有限等特點。
2、PLC
PLC是Programmable Logic Controller的簡寫,翻譯成中文也即是可編程邏輯控制器,是一種專門為在工業環境下應用而設計的數字運算操作電子系統。它採用一種可編程的存儲器,在其內部存儲執行邏輯運算、順序控制、定時、計數和算術運算等操作的指令,通過數字式或模擬式的輸入輸出來控制各種類型的機械設備或生產過程。
1) 歷史
美國 汽車 工業生產技術要求的發展促進了PLC的產生,20世紀60年代,美國通用 汽車 公司在對工廠生產線調整時,發現繼電器、接觸器控制系統修改難、體積大、雜訊大、維護不方便以及可靠性差,於是提出了著名的「通用十條」招標指標。
2)結構
可編程邏輯控制器實質是一種專用於工業控制的計算機,其硬體結構基本上與微型計算機相同(基於成本等原因,大多PLC的控制晶元實際上就是單片機,也就是說可以將PLC看成是單片機的二次開發)。
電源用於將交流電轉換成PLC內部所需的直流電j目前大部分PLC採用開關式穩壓電源供電。
中央處理器(CPU)是PLC的控制中樞,也是PLC的核心部件,其性能決定了PLC的性能。
存儲器是具有記憶功能的半導體電路,它的作用是存放系統程序、用戶程序、邏輯變數和其他一些信息。其中系統程序是控制PLC實現各種功能的程序,由PLC生產廠家編寫,並固化到只讀存儲器(ROM)中,用戶不能訪問。
輸入單元是PLC與被控設備相連的輸入介面,是信號進入PLC的橋梁,它的作用是接收主令元件、檢測元件傳來的信號。輸入的類型有直流輸入、交流輸入、交直流輸入。
輸出單元也是PLC與被控設備之間的連接部件,它的作用是把PLC的輸出信號傳送給被控設備,即將中央處理器送出的弱電信號轉換成電平信號,驅動被控設備的執行元件。輸出的類型有繼電器輸出、晶體管輸出、晶閘門輸出。
PLC除上述幾部分外,根據機型的不同還有多種外部設備,其作用是幫助編程、實現監控以及網路通信。常用的外部設備有編程器、列印機、盒式磁帶錄音機、計算機等。
3)特點
可靠性高。由於PLC大都採用單片微型計算機,因而集成度高,再加上相應的保護電路及自診斷功能,提高了系統的可靠性。
編程容易。PLC的編程多採用繼電器控制梯形圖及命令語句,其數量比微型機指令要少得多,除中、高檔PLC外,一般的小型PLC只有16條左右。由於梯形圖形象而簡單,因此容易掌握、使用方便,甚至不需要計算機專業知識,就可進行編程。
組態靈活。由於PLC採用積木式結構,用戶只需要簡單地組合,便可靈活地改變控制系統的功能和規模,因此,可適用於任何控制系統。
輸入/輸出功能模塊齊全。PLC的最大優點之一,是針對不同的現場信號(如直流或交流、開關量、數字量或模擬量、電壓或電流等),均有相應的模板可與工業現場的器件(如按鈕、開關、感測電流變送器、電機啟動器或控制閥等)直接連接,並通過匯流排與CPU主板連接。
安裝方便。與計算機系統相比,PLC的安裝既不需要專用機房,也不需要嚴格的屏蔽措施。使用時只需把檢測器件與執行機構和PLC的I/O介面端子正確連接,便可正常工作。
二、結論
經過上述闡述,我們可以看出:PLC實際上可以看成是單片機的二次應用開發,但是它又有自己鮮明的特點;如果單片機也具備PLC的這些特點的話,那麼將取代PLC;但是就目前形勢(單片機的功能、價格、穩定性、易用性、編程及維護等)來看,那將是一項不可能完成,或者說期限趨向於無窮的艱巨任務。
總之,兩者各有優勢,在IO口較少、功能塊不多的場合一般選擇用單片機,反之多選PLC(開發周期短、成本低(大型項目相對較低)、易用性強、IO口多等原因)。
1.單片機
從設計角度,需要軟硬體設計,對設計人員要求高,入手比較難,比較慢;
從穩定性角度,單片機抗干擾能力差,對惡劣環境適應性不好,而工業應用環境復雜,決定單片機不能大范圍應用在工業上;
維修及維護不方便,實時監控效果差。
2.PLC
PLC用戶不必要設計和製作硬體裝置,功能強大,使用面廣,編程簡單,技術人員更容易入手,同時,減少工作人員的工作量。
可靠性高抗干擾能力強,能適應不同溫度和濕度的環境。
同時,PLC故障率低,有很強的實時監視功能,不同功能的模塊,也標准化,維修方便。
3.盡管PLC在工業領域應用多於單片機,但單片機也有各種優點,如價格便宜、體積可以做到足夠小等,廣泛應用在電子產品上面。
以上僅為個人觀點,有不同見解,可私信交流!謝謝
首先要了解一下自動化發展的歷程,最早的時候可以說是半自動的,機械製造的設備沒有很好的控制系統,功能的實現是靠機械裝置和繼電器,接觸器,定時器等獨立原件裝配。發展到後來靠電子設備來控制,修改參數。這里就有了一個工業設備配電櫃的裝配習慣,工業電工的思路都是按照基本的接觸器,定時器,開關等配置起來的,而且在現實中還要經常的去改動某些接觸器,開關的控制方式,這樣如果用單片機控制的話就會出現一個修改程序的問題,單片機如果修改一個函數涉及的方面過多,很麻煩,這樣PLC應時而生,PLC在做編程的時候迎合了機械電工的思路,編程相對來說簡單,容易修改,不用關心運行的死機,儲存信息代碼,各種設備信息交換代碼等復雜的編寫。
其實PLC就是單片機加入了程序,PLC是在單片機的程序基礎上做的二次開發,這個需要理解,原始的編碼應該都是基於二進制的編碼系統的,後來的匯編,再到後來的電腦的C,C++等,單片機的keil等,都是在簡化編程方法,減少編程錯誤,智能化了。
『叄』 嵌入式新手入門最佳視頻教程
原文鏈接:網頁鏈接
我是1999年上的大學,物理專業。在大一時,我們班裡普遍彌漫著對未來的不安,不知道學習了物理後出去能做什麼。你當下的經歷、當下的學習,在未來的一天肯定會影響到你。畢業後我們也各自找到了自己的職業:出國深造轉行做金融、留校任教做科研、設計晶元、寫程序、創辦公司等等,這一切都離不開在校時學到的基礎技能(數學、IT、電子電路)、受過煅煉的自學能力。
所以,各位正在迷茫的在校生,各位正在嘗試轉行的程序員,未來一定有你的位置,是好是壞取決於你當下的努力與積累。
我不能預言幾年後什麼行業會熱門,也不能保證你照著本文學習可以發財。我只是一個有十幾年經驗的程序員,給對編程有興趣的你,提供一些建議。
程序員的方向,一般可以分為3類:專業領域、業務領域、操作系統領域。你了解它們後,按興趣選擇吧。
對於專業領域,我提供不了建議。
業務,也就是應用程序,它跟操作系統並不是截然分開的:
①開發實體產品時,應用程序寫得好的人,有時候需要操作系統的知識,比如調度優先順序的設置、知道某些函數可能會令進程休眠。
②寫應用程序的人進階為系統工程師時,他需要從上到下都了解,這時候就需要有操作系統領域的知識了,否則,你怎麼設計整個系統的方案呢?
③做應用程序的人,需要了解行業的需求,理解業務的邏輯。所以,當領導的人,多是做應用的。一旦鑽入了某個行業,很難換行業。
④而操作系統領域,做好了這是通殺各行業:他只負責底層系統,在上面開發什麼業務跟他沒關系。這行很多是技術宅,行業專家。
⑤操作系統和業務之間並沒有一個界線。有操作系統經驗,再去做應用,你會對系統知根知底,碰到問題時都有解決思路。有了業務經驗,你再了解一下操作系統,很快就可以組成一個團隊自立門戶,至少做個CTO沒問題。
它又可以分為下面2類。
1.1.1 學術研究
比如語音、圖像處理、人工智慧,這類工作需要你有比較強的理論知識,我傾向於認為這類人是「科學家」,他們鑽研多年,很多時候是在做學術研究。
在嵌入式領域,需要把他們的成果用某種演算法表達出來,針對某種晶元進行優化,這部分工作也許有專人來做。
1.1.2 工程實現
也有這樣一類人,他們懂得這些專業領域的概念,但是沒有深入鑽研。可以使用各類開源資料實現某個目標,做出產品。比如圖像處理,他懂得用opencv里幾百個復雜函數來實現頭像識別。有時候還可以根據具體晶元來優化這些函數。
「專業領域」不是我的菜,如果你要做這一塊,我想最好的入門方法是在學校學習研究生、博士課程。
換句話說,就是應用程序,這又可以分為下面2類。
1.2.1 界面顯示
做產品當然需要好的界面,但是,不是說它不重要,是沒什麼發展後勁。
現在的熱門詞是Android APP和IOS APP開發。你不要被Android、IOS兩個詞騙了,它們跟以前的VC、VB是同一路貨色,只是、僅僅是一套GUI控制項的實現。
希望沒有冒犯到你,我有理由。
一個程序需要有GUI界面,但是程序的內在邏輯才是核心。Android、IOS的開發工具給我們簡化了GUI的開發,並提供了這些控制項的交互機制,封裝並提供了一些服務(比如網路傳輸)。但是程序內部的業務邏輯、對視頻圖像聲音的處理等等,這才是核心。另外別忘了伺服器那邊的後台程序:怎樣更安全地保存數據、保護客戶的隱私,怎樣處理成千上萬上百萬的並發訪問,等等,這也是核心。
但是,從Android、IOS APP入門入行,這很快!如果你是大四,急於找到一份工作,那麼花上1、2個月去學習Android或IOS,應該容易找到工作,畢竟APP的需求永遠是最大的,現在這兩門技術還算熱門。在2011、2012年左右,Android程序員的起薪挺高,然後開始下滑。Android APP的入門基本只要1個月,所以懂的人也越來越多。2013、2014年,IOS開發的工資明顯比Android高了,於是各類IOS培訓也火曝起來。中華大地向來不缺速成人才,估計再過一陣子IOS工程師也是白菜價了。
會Android、IOS只是基本要求,不信去51job搜搜Android或IOS,職位要求里肯定其他要求。
1.2.2 業務邏輯
舉個簡單例子,做一個打卡軟體,你需要考慮這些東西:
①正常流程是上班下班時都要打卡
②有人忘記了怎麼辦?作為異常記錄在案,推送給管理員
③請假時怎麼處理?
④加班怎麼處理?
對於更復雜的例子,視頻會議系統里,各個模塊怎麼對接,各類協議怎麼兼容,你不深入這個行業,你根本搞不清楚。
應用開發的職位永遠是最多的,入門門檻也低。基本上只要你會C語言,面試時表現比較得體,一般公司都會給你機會。因為:
①你進公司後,還需要重新培訓你:熟悉它們的業務邏輯。
②你要做的,基本也就是一個個模塊,框架都有人給你定好了,你去填代碼就可以了。
說點讓你高興的事:軟體公司里,做領導的基本都是寫應用程序的(當然還有做市場的)。寫應用程序的人,對外可以研究市場接待客戶,對內可以管理程序員完成開發,不讓他做領導讓誰做?
如果你的志向是寫應用程序,那麼我建議你先練好基本功:數據結構、演算法是必備,然後憑興趣選擇資料庫、網路編程等等進行深入鑽研。
最後,選擇你看好的、感興趣的行業深耕個10年吧。做應用開發的人選擇了某個行業,後面是很難換行業的,選行很重要!
UCOS太簡單,VxWorks太貴太專業,Windows不玩嵌入式了,IOS不開源,所以對於操作系統領域我們也只能玩linux了。
在嵌入式領域Linux一家獨大!
Android呢?Android跟QT一樣,都是一套GUI系統。只是Google的實力太強了,現在Android無處不在,所以很多時候Linux+Android成了標配。注意,在這里我們關心的是Android的整個系統、裡面的機制,而不是學習幾個API然後開發界面程序。操作系統領域所包含的內容,簡單地說,就是製作出一台裝好系統的專用「電腦」,可以分為:
①為產品規劃硬體:
按需求、性能、成本選擇主晶元,搭配周邊外設,交由硬體開發人員設計。
②給單板製作、安裝操作系統、編寫驅動
③定製維護、升級等系統方案
④還可能要配置、安裝Android等GUI系統:
⑤為應用開發人員配置開發環境
⑥從系統角度解決疑難問題
這個領域,通常被稱為「底層系統」或是「驅動開發」。
先解決2個常見誤區:
①這份工作是寫驅動程序嗎?
看看上面羅列的6點,應該說,它包含驅動開發,但遠遠不只有驅動開發。
②我們還需要寫驅動嗎?不是有原廠嗎?或者只需要改改就可以?
經常有人說,晶元原廠都做好驅動了,拿過來改改就可以了。如果,你的硬體跟原廠的公板完全一樣,原廠源碼毫無BUG,不想優化性能、削減成本,不想做一些有特色的產品,那這話是正確的。
但是在這個不創新就是找死的年代,可能嗎?!原因有二:
①即使只是修改代碼,能修改的前提是能理解;能理解的最好煅煉方法是從零寫出若干驅動程序。
②很多時候,需要你深度定製系統。
以前做聯發科手機只需要改改界面就可以出貨了,現在山寨廠一批批倒下。大家都使用原廠的方案而不加修改時,最後只能拼成本。
舉個例子,深圳有2家做交通攝像頭、監控攝像頭的廠家,他們曾經找我做過4個項目:
①改進廠家給的SD卡驅動性能,使用DMA。
②換了Flash型號後,系統經常出問題,需要修改驅動BUG。
③觸摸屏點擊不準,找原因,後來發現是旁路電容導致的。
④裁減成本,把4片DDR換為2片DDR,需要改bootloader對DDR的初始化。
這些項目都很急,搞不定就無法出貨,這時候找原廠?除非你是中興華為等大客戶,否則誰理你?
我在中興公司上班時,寫驅動的時間其實是很少的,大部分時間是調試:系統調優,上幫APP工程師、下幫硬體工程師查找問題。我們從廠家、網上得到的源碼,很多都是標準的,當然可以直接用。但是在你的產品上也許優化一下更好。比如我們可以把攝像頭驅動和DMA驅動揉合起來,讓攝像頭的數據直接通過DMA發到DSP去。我們可以在軟體和硬體之間起橋梁作用,對於實體產品,有可能是軟體出問題也可能是硬體出問題,一般是底層系統工程師比較容易找出問題。
當硬體、軟體應用出現問題,他們解決不了時,從底層軟體角度給他們出主意,給他們提供工具。再比如方案選擇:晶元性能能否達標、可用的BSP是否完善等等,這只能由負責整個方案的人來考慮,他必須懂底層。
在操作系統領域,對知識的要求很多:
①懂硬體知識才能看懂電路圖
②英文好會看晶元手冊
③有編寫、移植驅動程序的能力
④對操作系統本身有一定的理解,才能解決各類疑難問題
⑤理解Android內部機制
⑥懂匯編、C語言、C++、JAVA
它絕對是一個大坑,沒有興趣、沒有毅力的人慎選。
①這行的入門,絕對需要半年以上,即使全天學習也要半年。
②它的職位,絕對比APP的職位少
③並且你沒有1、2年經驗,招你到公司後一開始你做的還是APP。
優點就是:
①學好後,行業通殺,想換行就換行;想自己做產品就自己做產品。
②相比做應用程序的人,不會被經常變動的需求搞得天天加班。
③門檻高,當然薪水相對就高。
操作系統領域,我認為適合於這些人:
①硬體工程師想轉軟體工程師,從底層軟體入門會比較好
②單片機工程師,想升級一下。會Linux底層的人肯定會單片機,會單片機的人不一定會Linux。
③時間充足的學生:如果你正讀大二大三,那麼花上半年學習嵌入式Linux底層多有益處。
④想掌握整個系統的人,比如你正在公司里寫APP,但是想升為系統工程師,那麼底層不得不學。
⑤想自己創業做實體產品的工程師,你有錢的話什麼技術都不用學,但是如果沒錢又想做產品,那麼Linux底層不得不學。
⑥做Linux APP的人,沒錯,他們也要學習。
這部分人不需要深入,了解個大概就可以:bootloader是用來啟動內核,Linux的文件系統(第1個程序是什麼、做什麼、各目錄幹嘛用)、APP跟驅動程序的調用關系、工具鏈,有這些概念就可以了
本文中,就把操作系統默認為Linux,講講怎麼學習嵌入式Linux+Android系統。
嵌入式Linux系統包含哪些東西?不要急,舉一個例子你就知道了。
①電腦一開機,那些界面是誰顯示的?
是BIOS,它做什麼?一些自檢,然後從硬碟上讀入windows,並啟動它。
類似的,這個BIOS對應於嵌入式Linux里的bootloader。這個bootloader要去Flash上讀入Linux內核,並啟動它。
②啟動windows的目的是什麼?
當然運行應用程序以便上網、聊天什麼的了。
這些上網程序、聊天程序在哪?
在C盤、D盤上。
所以,windows要先識別出C盤、D盤。在Linux下我們稱之為根文件系統。
③windows能識別出C盤、D盤,那麼肯定有讀寫硬碟的能力。
這個能力我們稱之為驅動程序。當然不僅僅是操作硬碟,還有網卡、USB等等其他硬體。嵌入式Linux能從Flash上讀出並執行應用程序,肯定也得有Flash的驅動程序啊,當然也不僅僅是Flash。
簡單地說,嵌入式LINUX系統里含有bootloader、內核、驅動程序、根文件系統、應用程序這5大塊。而應用程序,我們又可以分為:C/C++、Android。
所以,嵌入式Linux+Android系統包含以下6部分內容:
①bootloader
②Linux內核
③驅動程序
④使用C/C++編寫的應用程序
⑤Android系統本身
⑥Android應用程序
Android跟Linux的聯系實在太大了,它的應用是如此廣泛,學習了Linux之後沒有理由停下來不學習Android。在大多數智能設備中,運行的是Linux操作系統;它上面要麼安裝有Android,要麼可以跟Android手機互聯。現在,Linux+Android已成標配。
本文假設您是零基礎,以實用為主,用最快的時間讓你入門;後面也會附上想深入學習時可以參考的資料。
在實際工作中,我們從事的是「操作系統」周邊的開發,並不會太深入學習、修改操作系統本身。
①操作系統具有進程管理、存儲管理、文件管理和設備管理等功能,這些核心功能非常穩定可靠,基本上不需要我們修改代碼。我們只需要針對自己的硬體完善驅動程序
②學習驅動時必定會涉及其他知識,比如存儲管理、進程調度。當你深入理解了驅動程序後,也會加深對操作系統其他部分的理解
③Linux內核中大部分代碼都是設備驅動程序,可以認為Linux內核由各類驅動構成
但是,要成為該領域的高手,一定要深入理解Linux操作系統本身,要去研讀它的源代碼。
在忙完工作,閑暇之餘,可以看看這些書:
①趙炯的《linux內核完全注釋》,這本比較薄,推薦這本。他後來又出了《Linux 內核完全剖析》,太厚了,搞不好看了後面就忘記前面了。
②毛德操、胡希明的《LINUX核心源代碼情景分析》,此書分上下冊,巨厚無比。當作字典看即可:想深入理解某方面的知識,就去看某章節。
③其他好書還有很多,我沒怎麼看,沒有更多建議
基於快速入門,上手工作的目的,您先不用看上面的書,先按本文學習。
假設您是零基礎,我們規劃了如下入門路線圖。前面的知識,是後面知識的基礎,建議按順序學習。每一部分,不一定需要學得很深入透徹,下面分章節描述。
2.2.1 C語言
只要是理工科專業的,似乎都會教C語言。我見過很多C語言考試90、100分的,一上機就傻了,我懷疑他們都沒在電腦上寫過程序。
理論再好,沒有實踐不能幹活的話,公司招你去幹嘛?
反過來,實踐出真知,學習C語言,必須練練練、寫寫寫!
當你掌握基本語法後,就可以在電腦上練習一些C語言習題了;
當你寫過幾個C程序後,就可以進入下一階段的裸機開發了。
①不需要太深入
作為快速入門,只要你會編寫「Hello, world!」,會寫冒泡排序,會一些基礎的語法操作,暫時就夠了。
指針操作是重點,多練習;
不需要去學習過多的數據結構知識,只需要掌握鏈表操作,其他不用學習,比如:隊列、二叉樹等等都不用學;不需要去學習任何的函數使用,比如文件操作、多線程編程、網路編程等等;這些知識,在編寫Linux應用程序時會用,但是在操作系統特別是驅動學習時,用不著!
永往直前吧,以後碰到不懂的C語言問題,我們再回過頭來學習。
在後續的「裸機開發」中,會讓你繼續練習C語言,那會更實戰化。
C語言是在寫代碼中精進的。
②可以在Visual Studio下學習,也可以在Linux下學習,後者需要掌握一些編譯命令,我們暫時沒有提供C語言的教程,找一本C語言書,網上找找免費的C語言視頻(主要看怎麼搭建環境),就可以自學了。
2.2.2 PC Linux基本操作:
對於PC Linux,我們推薦使用Ubuntu,在它上面安裝軟體非常簡便。
我們的工作模式通常是這樣:在Windows下閱讀、編寫代碼,然後把代碼上傳到PC Linux去編譯。實際上,Ubuntu的桌面系統已經很好用了,我們拿到各種智能機可以很快上手,相信Ubuntu的桌面系統也可以讓你很快上手。為了提高工作效率,我們通常使用命令行來操作Ubuntu。
不用擔心,你前期只需要掌握這幾條命令就可以了,它們是如此簡單,我乾脆列出它們:
①cd : Change Directory(改變目錄)
cd 目錄名 // 進入某個目錄cd .. // cd 「兩個點」:返回上一級目錄cd - // cd 「短橫」:返回上一次所在目錄
②pwd : Print Work Directory(列印當前目錄 顯示出當前工作目錄的絕對路徑)
③mkdir : Make Directory(創建目錄)
mkdir abc // 創建文件夾abc
mkdir -p a/b/c // 創建文件夾a,再a下創建文件夾b,再在b下創建文件夾c
④rm : Remove(刪除目錄或文件)
rm file // 刪除名為file的文件
rm -rf dir // 刪除名為dir的目錄
⑤ls : List(列出目錄內容)
⑥mount : 掛載
mount -t nfs -o nolock,vers=2 192.168.1.123:/work/nfs_root /mnt
mount -t yaffs /dev/mtdblock3 /mnt
⑦chown : Change owner(改變文件的屬主,即擁有者)
chown book:book /work -R //對/work目錄及其下所有內容,屬主改為book用戶,組改為book
⑧chmod : Change mode(改變許可權),下面的例子很簡單粗暴
chmod 777 /work -R // 對/work目錄及其下所有內容,許可權改為可讀、可寫、可執行
⑨vi : Linux下最常用的編輯命令,使用稍微復雜,請自己搜索用法。
要練習這些命令,你可以進入Ubuntu桌面系統後,打開終端輸入那些命令;或是用SecureCRT、putty等工具遠程登錄Ubuntu後練習。
2.2.3 硬體知識
我們學習硬體知識的目的在於能看懂原理圖,看懂通信協議,看懂晶元手冊;不求能設計原理圖,更不求能設計電路板。
對於正統的方法,你應該這樣學習:
①學習《微機原理》,理解一個計算機的組成及各個部件的交互原理。
②學習《數字電路》,理解各種門電路的原理及使用,還可以掌握一些邏輯運算(與、或等)。
③《模擬電路》?好吧,這個不用學,至少我在工作中基本用不到它,現在全忘光了。
就我個人經驗來說,這些課程是有用的,但是:
①原理有用,實戰性不強。
比如《微機原理》是基於x86系統,跟ARM板子有很大差別,當然原理相通。
我是在接觸嵌入式編程後,才理解了這些課程。
②每本書都那麼厚,內容都很多,學習時間過長,自學有難度。
針對這些校園教材的不足,並結合實際開發過程中要用到的知識點,我們推出了《學前班_怎麼看原理圖》的系列視頻:
學前班第1課第1節___怎麼看原理圖之GPIO和門電路.wmv
學前班第1課第2.1節_怎麼看原理圖之協議類介面之UART.wmv
學前班第1課第2.2節_怎麼看原理圖之協議類介面之I2C.wmv
學前班第1課第2.3節_怎麼看原理圖之協議類介面之SPI.wmv
學前班第1課第2.4節_怎麼看原理圖之協議類介面之NAND Flash.wmv
學前班第1課第2.5節_怎麼看原理圖之協議類介面之LCD.wmv
學前班第1課第3節___怎麼看原理圖之內存類介面.wmv
學前班第1課第4.1節_怎麼看原理圖之分析S3C2410開發板.wmv
學前班第1課第4.2節_怎麼看原理圖之分析S3C2440開發板.wmv
學前班第1課第4.3節_怎麼看原理圖之分析S3C6410開發板.wmv
即使你只具備初中物理課的電路知識,我也希望能通過這些視頻,讓你可以看懂原理圖,理解一些常見的通信協議;如果你想掌握更多的硬體知識,這些視頻也可以起個索引作用,讓你知道缺乏什麼知識。
這些視頻所講到的硬體知識,將在《裸板開發》系列視頻中用到,到時可以相互對照著看,加深理解。
2.2.4 要不要專門學習Windows下的單片機開發
很多學校都開通了單片機的課程,很多人都是從51單片機、AVR單片機,現在比較新的STM32單片機開始接觸嵌入式領域,並且使用Windows下的開發軟體,比如keil、MDK等。
問題來了,要不要專門學習Windows下的單片機開發?
①如果這是你們專業的必修課,那就學吧
②如果你的專業跟單片機密切相關,比如機械控制等,那就學吧
③如果你只是想從單片機入門,然後學習更廣闊的嵌入式Linux,那麼放棄在Windows下學習單片機吧!
理由如下:
①Windows下的單片機學習,深度不夠
Windows下有很好的圖形界面單片機開發軟體,比如keil、MDK等。
它們封裝了很多技術細節,比如:
你只會從main函數開始編寫代碼,卻不知道上電後第1條代碼是怎麼執行的;
你可以編寫中斷處理函數,但是卻不知道它是怎麼被調用的;
你不知道程序怎麼從Flash上被讀入內存;
也不知道內存是怎麼劃分使用的,不知道棧在哪、堆在哪;
當你想裁剪程序降低對Flash、內存的使用時,你無從下手;
當你新建一個文件時,它被自動加入到工程里,但是其中的機理你完全不懂;
等等等。
②基於ARM+Linux裸機學習,可以學得更深,並且更貼合後續的Linux學習。實際上它就是Linux下的單片機學習,只是一切更加原始:所有的代碼需要你自己來編寫;哪些文件加入工程,需要你自己來管理。
在工作中,我們當然傾向於使用Windows下更便利的工具,但是在學習階段,我們更想學習到程序的本質。
一切從零編寫代碼、管理代碼,可以讓我們學習到更多知識:
你需要了解晶元的上電啟動過程,知道第1條代碼如何運行;
你需要掌握怎麼把程序從Flash上讀入內存;
需要理解內存怎麼規劃使用,比如棧在哪,堆在哪;
需要理解代碼重定位;
需要知道中斷發生後,軟硬體怎麼保護現場、跳到中斷入口、調用中斷程序、恢復現場;
你會知道,main函數不是我們編寫的第1個函數;
你會知道,晶元從上電開始,程序是怎麼被搬運執行的;
你會知道,函數調用過程中,參數是如何傳遞的;
你會知道,中斷發生時,每一個寄存器的值都要小心對待;
等等等。
你掌握了ARM+Linux的裸機開發,再回去看Windows下的單片機開發,會驚呼:怎麼那麼簡單!並且你會完全明白這些工具沒有向你展示的技術細節。
驅動程序=Linux驅動程序軟體框架+ARM開發板硬體操作,我們可以從簡單的裸機開發入手,先掌握硬體操作,並且還可以:
①掌握如何在PC Linux下編譯程序、把程序燒錄到板子上並運行它
②為學習bootloader打基礎:掌握了各種硬體操作後,後面一組合就是一個bootloader
2.2.5 為什麼選擇ARM9 S3C2440開發板,而不是其他性能更好的?
有一個錯誤的概念:S3C2440過時了、ARM9過時了。
這是不對的,如果你是軟體工程師,無論是ARM9、ARM11、A8還是A9,對我們來說是沒有差別的。
一款晶元,上面有CPU,還有眾多的片上設備(比如UART、USB、LCD控制器)。我們寫程序時,並不涉及CPU,只是去操作那些片上設備。
所以:差別在於片上設備,不在於CPU核;差別在於寄存器操作不一樣。
因為我們寫驅動並不涉及CPU的核心,只是操作CPU之外的設備,只是讀寫這些設備的寄存器。
之所以推薦S3C2440,是因為它的Linux學習資料最豐富,並有配套的第1、2期視頻。
2.2.6 怎麼學習ARM+Linux的裸機開發
學習裸機開發的目的有兩個:
①掌握裸機程序的結構,為後續的u-boot作準備
②練習硬體知識,即:怎麼看原理圖、晶元手冊,怎麼寫代碼來操作硬體
後面的u-boot可以認為是裸機程序的集合,我們在裸機開發中逐個掌握各個部件,再集合起來就可以得到一個u-boot了。
後續的驅動開發,也涉及硬體操作,你可以在裸機開發中學習硬體知識。
注意:如果你並不關心裸機的程序結構,不關心bootloader的實現,這部分是可以先略過的。在後面的驅動視頻中,我們也會重新講解所涉及的硬體知識。
推薦兩本書:杜春蕾的《ARM體系結構與編程》,韋東山的《嵌入式Linux應用開發完全手冊》。後者也許是國內第1本涉及在PC Linux環境下開發的ARM裸機程序的書,如果我說錯了,請原諒我書讀得少。
對於裸機開發,我們提供有2部分視頻:
①環境搭建
第0課第1節_剛接觸開發板之介面接線.wmv
第0課第2節_剛接觸開發板之燒寫裸板程序.wmv
第0課第3節_剛接觸開發板之重燒整個系統.wmv
第0課第4節_剛接觸開發板之使用vmwae和預先做好的ubuntu.wmv
第0課第5節_剛接觸開發板之u-boot打補丁編譯使用及建sourceinsight工程.wmv
第0課第6節_剛接觸開發板之內核u-boot打補丁編譯使用及建sourceinsight工程.wmv
第0課第7節_剛接觸開發板之製作根文件系統及初試驅動.wmv
第0課第8節_在TQ2440,MINI2440上搭建視頻所用系統.wmv
第0課第9節_win7下不能使用dnw燒寫的替代方法.wmv
.................
原文鏈接:網頁鏈接