c語言與嵌入式
我是個嵌入式程序員。
嵌入式開發分為驅動開發和應用開發。
驅動開發難度較高,除了精通嵌入式晶元工作原理(寄存器設定...),操作系統原理(存儲空間分配...等)外,還需要了解基本的數字電路的知識(端子電位...等)。
這部分主要用C語言和匯編,這種開發薪金較高,不是隨便上個培訓班就能勝任的。
嵌入式應用開發,其實基本已經和普通軟體開發沒什麼區別了,只是使用的工具不同,因為各種不同已經在驅動層和操作系統層屏蔽了,直接調用各種介面函數編寫程序。是在嵌入式驅動開發的基礎上做的進一步開發。
這部分用C\C++,Java,C#都有,Java多一些,因為Java語言對不同平台間的兼容性較好,不管什麼系統,裝個Java虛擬器就可以跑Java程序。
早些年嵌入式開發指的都是嵌入式驅動開發,現在很多培訓班混淆視聽,把應用開發也歸類為嵌入式,會嵌入式應用開發的人一點都不缺乏。這也和市場需求有關,目前人才需求大部分都是嵌入式應用開發,國內很少有公司有財力和物力自己做驅動開發。
一個合格的嵌入式驅動開發程序員再怎麼也月薪上萬。
一個合格的嵌入式應用開發程序員最多四五千。
懂得應用開發的,根本不懂驅動開發,因為不懂硬體;懂得驅動開發的人輕松做應用開發,因為那些介面函數都是他們自己做的。
你真正要選擇的不是C語言還是Java,而是驅動還是做應用。
做驅動絕對是有挑戰的。高投入,高回報。
❷ 嵌入式C語言和標准C的區別
語法上沒什麼區別,就是普通的c編程是在OS之上,有很多的標准庫函數可以調用,分配的內存就是PC機的內存,處理器就是PC的CPU。 而嵌入式C編程的話會涉及到操作硬體,所以底層沒有庫函數調用,需要自己編寫操作硬體的函數,另外編譯的時候是用交叉編譯器,內存是晶元上的ram, 處理器就是晶元帶的處理器,例如ARM或者MIPS等等,而不是PC的x86 CPU, 還有就是在寫程序的時候更注重程序的優化和效率,因為嵌入式硬體資源相對PC有限,實時性較強等等。
❸ C語言和嵌入式C語言有什麼區別
嵌入式C語言和C語言是完全一樣的,寫代碼上完全沒有區別。
區別在於嵌入式的C語言是跑在嵌入式的開發板上的,CPU和我們電腦不一樣,所以編譯器也是不一樣的,生成的可執行程序也是不一樣的。
學習嵌入式,該學習什麼基本的知識呢?
首先C語言,這個是毋庸置疑的,不管是做嵌入式軟體還是硬體開發的人員,對C語言的掌握這個是必需的,特別是對於以後致力於嵌入式軟體開發的人,現在絕大部分都是用C語言,你說不掌握它可以嗎?至於如何學習C語言,我想這些基礎的知識每個人都有自己的方法,關鍵要去學習,看書也好,網上找些視頻看也好。很多人會問,C語言要學到怎麼樣,我覺得這沒有標準的答案。我想至少你在明白了一些基礎的概念後,就該寫代碼了,動手才是最重要的,當你動手了,遇到問題了,再反過來學習,反過來查查課本,那時的收獲就不是你死看書能得到的。
其次,應該對操作系統有所了解,這對你對硬體和軟體的理解,絕對有很大的幫助。應該把系統的管理理解一下,比如進程、線程,系統如何來分配資源的,系統如何來管理硬體的,當然,不是看書就能把這些理解透,如果不是一時能理解,沒關系,多看看,結合以後的項目經驗,會有更好的理解的。
還有應該學習嵌入式系統,如linux或者wince下的編程,這些對以後做應用的編程很有幫助,當然,如果做手機的話,那可以學習MTK、塞班、Android等操作系統,Android是以後發展的趨勢,現在很熱門,Android也是基於linux系統封裝的,所以建議先學習下linux。
還有,應該學習下單片機或者ARM或者MIPS,很多人說我沒有單片機的經驗,直接學ARM可以嗎?我覺得那完全沒有問題的,當然如果你學習過單片機,那最好不過了,以後學習ARM就更簡單了。
最後如果你把以上的知識都有所了解後,就該去閱讀閱讀一些優秀的代碼,比如結合arm晶元手冊學習去學習下UBOOT的源代碼,了解下最小的系統開發,那對你整個嵌入式開發的非常有幫助的,可以的話,還可以學習下linux的源代碼,當然如果你直接閱讀2.6的代碼,我想你會很痛苦的,可以先看看linux 代碼早期的版本,比如0.12 的代碼等等,麻雀雖小,五臟俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程師。
至於上面說的知識如何學習呢?每個人都應該去找自己最好的方法,所謂的最好的方法就是最適合自己的方法。很多人看不進書,那就去看看視頻吧。視頻也應該要選擇,不是隨便看看,應該要有所選擇,有所挑選。我也是這樣一路走過來的,不過我這人比較懶,我看不進書,一看書我就想睡覺,所以這幾年我都是看視頻過來的,現在也算學有所成,但也不敢說是高手吧。
我在網上看到,有人把自己學習嵌入式的視頻總結出來,嵌入式系列實踐和視頻教程,大家可以看看網址 我仔細看了覺得很不錯,我本來也想整理下,可是奈何我自己的電腦硬碟空間才40G,沒有辦法,時間也是不夠,心有餘而力不足,我不是在幫他做廣告,雖然要花錢,我覺得算不錯,至少自己不用去整理和花大量的時間去找資源,當然如果網上有的下,你網速和硬碟都夠的話,我建議大家自己網上下也好。想想我自己該開始學的時候,那時視頻資源少之又少,我買書和買視頻至少花了幾千塊,但是我覺得那很值,至少我現在賺回來了很多知識。
最後,希望這篇文章對熱愛嵌入式,想致力於嵌入式開發的朋友有所幫助。送給大家一句簡單而又樸素的話,堅持就是勝利,貴在堅持,也可以看看如何堅持嵌入式學習
❹ 嵌入式C語言的本質是什麼和C語言有什麼區別嗎
嵌入式C語言和C語言是完全一樣的,寫代碼上完全沒有區別。
區別在於嵌入式的C語言是跑在嵌入式的開發板上的,CPU和我們電腦不一樣,所以編譯器也是不一樣的,生成的可執行程序也是不一樣的。
學習嵌入式,該學習什麼基本的知識呢?
首先C語言,這個是毋庸置疑的,不管是做嵌入式軟體還是硬體開發的人員,對C語言的掌握這個是必需的,特別是對於以後致力於嵌入式軟體開發的人,現在絕大部分都是用C語言,你說不掌握它可以嗎?至於如何學習C語言,我想這些基礎的知識每個人都有自己的方法,關鍵要去學習,看書也好,網上找些視頻看也好。很多人會問,C語言要學到怎麼樣,我覺得這沒有標準的答案。我想至少你在明白了一些基礎的概念後,就該寫代碼了,動手才是最重要的,當你動手了,遇到問題了,再反過來學習,反過來查查課本,那時的收獲就不是你死看書能得到的。
其次,應該對操作系統有所了解,這對你對硬體和軟體的理解,絕對有很大的幫助。應該把系統的管理理解一下,比如進程、線程,系統如何來分配資源的,系統如何來管理硬體的,當然,不是看書就能把這些理解透,如果不是一時能理解,沒關系,多看看,結合以後的項目經驗,會有更好的理解的。
還有應該學習嵌入式系統,如linux或者wince下的編程,這些對以後做應用的編程很有幫助,當然,如果做手機的話,那可以學習MTK、塞班、Android等操作系統,Android是以後發展的趨勢,現在很熱門,Android也是基於linux系統封裝的,所以建議先學習下linux。
還有,應該學習下單片機或者ARM或者MIPS,很多人說我沒有單片機的經驗,直接學ARM可以嗎?我覺得那完全沒有問題的,當然如果你學習過單片機,那最好不過了,以後學習ARM就更簡單了。
最後如果你把以上的知識都有所了解後,就該去閱讀閱讀一些優秀的代碼,比如結合arm晶元手冊學習去學習下UBOOT的源代碼,了解下最小的系統開發,那對你整個嵌入式開發的非常有幫助的,可以的話,還可以學習下linux的源代碼,當然如果你直接閱讀2.6的代碼,我想你會很痛苦的,可以先看看linux 代碼早期的版本,比如0.12 的代碼等等,麻雀雖小,五臟俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程師。
至於上面說的知識如何學習呢?每個人都應該去找自己最好的方法,所謂的最好的方法就是最適合自己的方法。很多人看不進書,那就去看看視頻吧。視頻也應該要選擇,不是隨便看看,應該要有所選擇,有所挑選。我也是這樣一路走過來的,不過我這人比較懶,我看不進書,一看書我就想睡覺,所以這幾年我都是看視頻過來的,現在也算學有所成,但也不敢說是高手吧。
我在網上看到,有人把自己學習嵌入式的視頻總結出來,嵌入式系列實踐和視頻教程,大家可以看看網址http://www.embedstudy.com/viewnews-8701 我仔細看了覺得很不錯,我本來也想整理下,可是奈何我自己的電腦硬碟空間才40G,沒有辦法,時間也是不夠,心有餘而力不足,我不是在幫他做廣告,雖然要花錢,我覺得算不錯,至少自己不用去整理和花大量的時間去找資源,當然如果網上有的下,你網速和硬碟都夠的話,我建議大家自己網上下也好。想想我自己該開始學的時候,那時視頻資源少之又少,我買書和買視頻至少花了幾千塊,但是我覺得那很值,至少我現在賺回來了很多知識。
最後,希望這篇文章對熱愛嵌入式,想致力於嵌入式開發的朋友有所幫助。送給大家一句簡單而又樸素的話,堅持就是勝利,貴在堅持,也可以看看如何堅持嵌入式學習
❺ C語言的嵌入式和面向過程(對象)有什麼區別
這是兩個不同的概念
嵌入式系統是一種針對性很強的的專用計算機系統,軟體系統被固化在rom中,一般沒有操作系統,獨佔cpu運行,因容量,cpu性能,功耗等限制,嵌入式系統規模都比較小。比如全自動洗衣機,智能微波爐,電磁爐,智能冰箱這些電器里的系統就是嵌入式系統。
而面向過程和面向對象是兩種編程思想,面向過程指的是編程時以實現方法為中心,面向對象指的是編程時以數據為中心
❻ 嵌入式c語言和c語言的異同
嵌入式編程用的最多的也是C語言,和普通的windows下的C編程不同的就是,比如應用層開發,嵌入式開發出來的應用程序最終不是要運行在PC上
的,而是目標板。所以嵌入式開發就一定會有交叉編譯這個環節(簡單一點理解就是,在PC下編程,然後交叉編譯一下,讓程序能運行在PC外的其他平台上,比
如ARM開發板什麼的)
稍微做一下類比:
普通編程開發=====CPU(比如奔騰)=====windows操作系統
嵌入式開發=====嵌入式處理器(比如ARM)=====嵌入式操作系統(比如嵌入式linux、wince、vxworks等)
PC上如果沒有windows操作系統,那它就是一個DOS機。
嵌入式開發中如果沒有嵌入式操作系統,那它就是通常所說的單片機開發,嵌入式開發最初就是從單片機開發走過來的。
現在所說的嵌入式開發,通常都是指有嵌入式操作系統的那種,產品功能復雜了,單片機開發無法實現,需要用到嵌入式操作系統,也能體現出嵌入式操作系
統的優勢。
當然現在所講嵌入式開發和單片機開發的區別不僅僅在是否有嵌入式操作系統上,嵌入式開發所使用的嵌入式處理器(比如ARM
/
MIPS等)在內核體系結構、指令系統、工作模式等方面與單片機都有很大不同。
嵌入式產品在航空、醫療、家電、消費電子、汽車電子、移動等眾多領域都可以看到,應用領域極為廣泛,所以現在嵌入式開發相當熱門,並且具備非常好的發展前景!!
❼ C語言與嵌入式
MCU-51是51系列的單片機。可以利用C語言或者匯編進行代碼編寫。從簡單的來講,比如控制
led數碼管
顯示數字啊,控制鍵盤,LCD屏顯,再有感測器類的,比如溫度採集啊,重量採集等等等等。
嵌入式系統
在我們周圍到處都是。
❽ c語言和嵌入式c語言有什麼區別
嵌入式C語言和C語言是完全一樣的,寫代碼上完全沒有區別。下面由卓躍教育為您介紹它們兩者間的區別。
區別在於嵌入式的C語言是跑在嵌入式的開發板上的,CPU和我們電腦不一樣,所以編譯器也是不一樣的,生成的可執行程序也是不一樣的。
首先C語言,這個是毋庸置疑的,不管是做嵌入式軟體還是硬體開發的人員,對C語言的掌握這個是必需的,特別是對於以後致力於嵌入式
後,就該寫代碼了,動手才是最重要的,當你動手了,遇到問題了,再反過來學習,反過來查查課本,那時的收獲就不是你死看書能得到的。
其次,應該對操作系統有所了解,這對你對硬體和軟體的理解,絕對有很大的幫助。應該把系統的管理理解一下,比如進程、線程,系統
驗,會有更好的理解的。
還有應該學習嵌入式系統,如linux或者wince下的編程,這些對以後做應用的編程很有幫助,當然,如果做手機的話,那可以學習MTK、塞
班、Android等操作系統,Android是以後發展的趨勢,現在很熱門,Android也是基於linux系統封裝的,所以建議先學習下linux。
還有,應該學習下單片機或者ARM或者MIPS,很多人說我沒有單片機的經驗,直接學ARM可以嗎?我覺得那完全沒有問題的,當然如果你學
習過單片機,那最好不過了,以後學習ARM就更簡單了。
最後如果你把以上的知識都有所了解後,就該去閱讀閱讀一些優秀的代碼,比如結合arm晶元手冊學習去學習下UBOOT的源代碼,了解下最
小的系統開發,那對你整個嵌入式開發的非常有幫助的,可以的話,還可以學習下linux的源代碼,當然如果你直接閱讀2.6的代碼,我想你會
很痛苦的,可以先看看linux代碼早期的版本,比如0.12的代碼等等,麻雀雖小,五臟俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程師。
最後,希望這篇文章對熱愛嵌入式,想致力於嵌入式開發的朋友有所幫助。
❾ 嵌入式C語言和普通的C語言有什麼區別,有什麼新的東西嗎
語法上沒什麼區別,就是普通的c編程是在OS之上,有很多的標准庫函數可以調用,分配的內存就是PC機的內存,處理器就是PC的CPU。 而嵌入式C編程的話會涉及到操作硬體,所以底層沒有庫函數調用,需要自己編寫操作硬體的函數,另外編譯的時候是用交叉編譯器,內存是晶元上的ram, 處理器就是晶元帶的處理器,例如ARM或者MIPS等等,而不是PC的x86 CPU, 還有就是在寫程序的時候更注重程序的優化和效率,因為嵌入式硬體資源相對PC有限,實時性較強等等。
希望對你有幫助。
❿ 嵌入式C語言和ARM C語言的區別
不一樣,匯編主要是要了解CPU指令及用法。
我們常說的是PC機的x86匯編,指令是x86的復雜指令集。
arm匯編是arm的精簡指令集,比x86容易學,程序格式倒是和x86匯編差不多。你下載一份arm的手冊就可以了解了。
C語言ARM的和x86的差不多,除了對硬體寄存器操作不同,其它語法和流程都一樣。
回答補充:
arm匯編程序每一行是指定arm core執行一條指令,每條指令都是硬體相關。
如
LDR R3, #1 ;用LDR指令將數值1放入R3寄存器准備參與運算
C語言與arm指令無關,只與邏輯運算有關,指定硬體地址的操作才與硬體相關;如果用arm編譯器來編譯,每行可能編譯出1到多條arm指令。
如
i++; //變數 i 遞增1
等效於
LDR R3,#1 ;用LDR指令將數值1放入R3寄存器准備參與運算
ADD R2, R2, R3 ;用ADD指令將R2、R3寄存器里的數值相加後放回R2寄存器
以上等效匯編的R2、R3寄存器只是為了舉例,C語言不像匯編,不需要由程序員指定用哪個寄存器參與運算,編譯器編譯時會根據程序結構自動判斷選擇。
強調mcuos有錯,「c語言被編譯器編譯的時候會最終解釋為匯編語言的」,無論是c語言還是匯編語言,編譯器編譯後的結果是機器執行碼,很多人因為匯編語言比較難懂及指令相關,所以以為它就是機器語言,其實它仍是人類設計的編寫程序的語言,仍需要編譯器編譯成機器碼才能執行,它只是比C語言更接近硬體而已。