我是一名電子與通信工程專業的學生,在上大學之前,我對編程和計算機應用程序很感興趣。我曾經專注於設計Windows應用程序並學習其技術,但是現在,我覺得這對我的領域毫無用處...我不必學習有關計算機科學和開發軟件的所有知識! (我對嗎?)
我知道VB .Net,C#和C ++。我的假期有很多時間,所以我想以編程的方式深入研究“電子領域”。那麼,您建議學習或專注於什麼?
我想要那些用於微控制器和其他集成電路編程的語言。 C ++是否足夠,還是我也應該精通C?請告訴我您的想法。
我是一名電子與通信工程專業的學生,在上大學之前,我對編程和計算機應用程序很感興趣。我曾經專注於設計Windows應用程序並學習其技術,但是現在,我覺得這對我的領域毫無用處...我不必學習有關計算機科學和開發軟件的所有知識! (我對嗎?)
我知道VB .Net,C#和C ++。我的假期有很多時間,所以我想以編程的方式深入研究“電子領域”。那麼,您建議學習或專注於什麼?
我想要那些用於微控制器和其他集成電路編程的語言。 C ++是否足夠,還是我也應該精通C?請告訴我您的想法。
是的,學習盡可能多地使用C幾乎肯定是一個好舉動(C ++將為您提供一個有用的起點,儘管如 leftaroundabout 所述,仍然有很多可以藉鑑的地方) ,尤其是考慮到無處不在,小型嵌入式系統的編碼與Windows之類的編寫之間的區別。
大多數特定大小以下的微控制器(例如PIC,AVR,MSP430等)使用C(或彙編器) ),因為有許多高質量的版本(免費版本和$$版本-例如,許多商業編譯器都基於免費的GCC編譯器)可以使用C編譯器。
您會獲得其他語言,例如PIC的出色JAL(原始作者Wouter Van Ooijen誰是這裡的成員),PICBASIC,Ada變體,但是由於它的流行和可用的編譯器數量,我想說C是大多數人選擇的語言。雖然這當然並不意味著它是最好的語言,但是使用最流行的語言具有明顯的優勢(文檔,支持,可移植性,協作等)。
對於更複雜,更大的32位微處理器(例如許多ARM變體),也有C ++和其他編譯器可用。
我會直接進入並抓住一些開發板並進行編碼。您可以選擇像PIC16F這樣的低端8位單片機(Microchip Direct上的許多入門工具包)
像PIC24一樣,是16位單片機的中等範圍,還可以是C / C ++ /嵌入式Linux ARM。 -STM32F4 ARM Cortex M4 Discovery是一個非常便宜的開發板,可能值得一試。
在可編程邏輯和硬件描述語言(HDL-其中最大的兩個是Verilog和VHDL)方面,它也許也值得一試來自Diglent或類似公司的FPGA或CPLD開發板。
如果您不想等待開發板,可以下載MPLAB或MPLABX,並使用出色的模擬器嘗試PIC開發。其他工具也是如此,例如,您可以免費下載Xilinx ISE Webpack並試用HDL和可編程邏輯設計。
學習C語言,並獲得一個便宜的微控制器開發板,例如MSP430或ARM Cortex,並至少編寫和加載一些C程序。
我擁有計算機科學學位和軟件開發背景,大多數是遊戲的C ++編程,現在是iOS遊戲和應用程序,但是我的最後一份工作是半專業的EE演出,首先是為ARM Cortex M3系統進行大量固件編程,然後最終讓我學習瞭如何做一些基本的電路設計和電路板佈局,以及設計幾個簡單的電路板。因此,我基本上必鬚麵對使用最佳編程語言來橋接硬件/軟件設計的問題,因為這是負責這兩個方面的人。
C絕對是您需要了解的語言。對於使用C ++編程並且實際上不必將自己局限於C的功能集的人來說,“這是同一件事”很容易,但事實並非如此。尤其是C ++演化和收集功能的方式,以及主流C ++程序員使用這些功能的方式,與C ++應用程序相比,在相當大的C應用程序上工作確實是非常不同的事情。您的固件SDK將是一堆C庫,適用於MCU的任何其他東西都將是C庫,對MCU有意義的任何操作系統都將用C編寫,等等。
這就是說,由於那裡的許多MCU工具鏈最終都使用GCC作為其編譯器,因此,如果您使用的是體面的MCU系列,則幾乎可以肯定會有C ++編譯器可用。但是,您必須非常小心所使用的功能,尤其是標準庫中的功能,因為最終生成的二進製文件太大而無法容納在設備上非常容易。我認為在嵌入式設備上使用C ++是一個很好的案例,C ++具有很多不錯的功能,這些功能雜亂無章,沒有大小或速度上的損失,您只需要知道自己在做什麼,並編寫相應的代碼即可就巧妙地使用功能而言,在C樣式的一端比在STL的結尾更遠。
不要太在意那些說可以在Lua或Python上使用Lua或Python的人。帶有正確的嵌入式解釋器的MCU等等。是的,我確實做到了,而且很有趣,但是目前,更多的是玩具項目和出現在《 Hack a Day》上的東西。我想我們會看到更多類似的東西,因為摩爾定律被無情地應用到了最小的處理器上,這是在曾經有大量彙編的遊戲中發生的,然後它們在C和C ++上的使用時間更長比起其他所有人,現在一切都變得如此之快,開發人員的生產力是如此重要,以至於許多開發工作都是使用嵌入式高級語言或直接使用高級語言完成的。即便如此,距離看到公司僱用具有Python和Lua背景的固件程序員還需要幾年的時間。
也不要在組裝上花費太多時間。熟悉這些概念還不錯,但是,如果有任何彙編編程的話,您不太可能會發現自己做得很多。就像遊戲和嵌入式遊戲一樣,這是一種“常識”,這通常是由在這些領域中並不實際工作的人重複的。但實際上,您根本不可能編寫任何程序集,如果這樣做,可能僅需幾行代碼即可進行優化,或者僅使用沒有API的硬件(但您會在編寫包含幾行彙編的代碼之後)。我從事過多個遊戲,並且開發過板/固件設計項目,而我為商業項目編寫的總裝配線可能還不到十幾歲。它不具有生產力,也不具有可移植性,也不可讀,因此只能用作最後一種選擇。
我與其他所有人一樣,您需要具備出色的C語言能力。
我還建議您也學習至少一種彙編語言。這樣做將使您成為更好的C程序員。您需要知道引擎蓋下發生了什麼,這在嵌入式世界中比在PC世界中要真實得多。
了解C生成的彙編程序將使您編寫的代碼更加優化C在速度和緊湊性方面。更快的代碼意味著:
更緊湊的代碼意味著您可以使用內存更少,價格更便宜的MCU。或有更多功能的餘地。
您可能考慮學習的另一種語言是 Verilog。這是一種硬件描述語言,它與C確實有很大的不同,不僅在外觀上,而且在功能上。 Verilog將為利用功能強大的芯片(如 Cypress PSoC3和5)開闢道路。這是一個具有模擬和數字可重編程硬件的微控制器,它使您可以做一些令人驚奇的事情,而這是任何其他MCU都很難做到的。您還可以進行 FPGA設計。
作為在國防界工作了8年的MSEE,我可以告訴您,了解如何在 LabVIEW(一種圖形化的,嚴格類型化的數據流語言)中很好地進行編程意味著
LabVIEW最初是為硬件工程師設計的一種編程語言,您可以看到這一點,因為代碼看起來非常像電路圖。但是,在過去的25年中,LabVIEW已發展為功能豐富的功能完善的語言,並支持對象定向和多線程。實際上,我認為沒有其他編程語言(基於文本或其他語言)比在LabVIEW中編程多線程應用程序更容易。這在很大程度上是由於它的數據流範例。隨著CPU內核數量的不斷增加,LabVIEW作為一種通用語言將變得越來越重要。
了解LabVIEW的另一個好處是,您只需使用 LabVIEW FPGA模塊,它將您的LabVIEW代碼在幕後轉換為VHDL,然後再傳遞給Xilinx編譯器。您還可以通過 LabVIEW Real-Time模塊(使用VxWorks或Phar Lap)來使用LabVIEW技能過渡到編程實時代碼。
注意:我是認證的LabVIEW開發人員。
如果您想對微控制器進行低級編程,那麼您應該對彙編語言編程感到滿意(不同的體系結構越多越好),是的,與使用C ++相比,使用C的要多得多。 / p>
對於一般的工程工作,通常將諸如Matlab(也包括Scilab和GNU Octave)之類的面向數學的語言用於建模和原型製作。
此外,許多用於軟件和硬件的IDE通常可使用TCL或LUA編寫腳本的腳本,因此對腳本語言(也包括Perl,Python,PHP,Javascript等)進行一些熟悉會很有用。
對於硬件設計,您將需要Verilog和/或VHDL技能。
C ++是否足夠?也許。
請記住,C佔所有mcu:s的90-99%,因此C是履歷表上的必備條件。
但是由於您是個高水平的人,您可以開始使用Arduino:s,因為它們是按比例縮小的C ++編寫的,這將使您大致了解C ++現在在單片機世界中可以做什麼。
對於微控制器(我將只介紹微控制器),我認為C是比C ++更好的入門語言。組裝將是下一步,對於幫助您了解C編譯器是如何使您陷入困境,創建錯誤,竊取時鐘滴答聲等,並從平台中獲取最大性能的絕佳選擇。所有這些都是假設您在談論微控制器-而不是arduino,BASIC Stamp或涉及包裹微控制器的任何其他平台。
很難說什麼對“您的領域”有用-並建議作為一名學生,您可能還不太了解您的領域!! -但我認為您的語言集似乎很合理,您會發現自己一遍又一遍地使用它。至少,掌握一種結構化語言可以使下一種結構化語言變得容易得多,但是我認為您總是會發現Windows編程技能很不錯。
如果您使用處理器,則可以學習C以及C語句生成的彙編代碼的類型,但是您還應該教自己如何使用Unix命令行外殼程序(例如bash)以及與之配套的工具。像sed,ed,awk,vim / vi,find,tar,gzip ...以及可以在許多平台上使用的Python,這是“完成任務”的好方法。
如果您想成為一名認真的嵌入式開發人員,則必須學習C。即使您可能很少使用彙編器,您也應該了解彙編器。
我首先將電子工程師定義為從固件到電路板設計再到芯片設計的硬件設計人員。在某些情況下,您需要製作固件,如上所述,您需要使用“ C”。深入的軟件僅是一種工具,用從C / C ++到Lisp之類的互補語言來理解一些compsci概念將比細節更重要。您將需要軟件來支持您的設計工作,但這並不能優先於理解物理實現中可以完成的工作的基本限制。即使以這些語言表達設計,數字設計也不是Verilog / VHDL。在完整的自定義和計算機內設計中,您將看到Lisp語言和C函數語言。越來越多的趨勢是使用Python編寫腳本,但是有很多Perl / Skill / C / System C / Verilog-A / VHDL測試平台和檢查軟件/腳本。