題:
電子工程師的編程語言
Siraj Muhammad
2012-09-06 03:12:17 UTC
view on stackexchange narkive permalink

我是一名電子與通信工程專業的學生,在上大學之前,我對編程和計算機應用程序很感興趣。我曾經專注於設計Windows應用程序並學習其技術,但是現在,我覺得這對我的領域毫無用處...我不必學習有關計算機科學和開發軟件的所有知識! (我對嗎?)

我知道VB .Net,C#和C ++。我的假期有很多時間,所以我想以編程的方式深入研究“電子領域”。那麼,您建議學習或專注於什麼?

我想要那些用於微控制器和其他集成電路編程的語言。 C ++是否足夠,還是我也應該精通C?請告訴我您的想法。

“焊錫”或更嚴重的是,純C對於支持工具而言相當傳統,儘管python目前有點流行。
十 答案:
Oli Glaser
2012-09-06 04:00:27 UTC
view on stackexchange narkive permalink

是的,學習盡可能多地使用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和可編程邏輯設計。

PIC可能很便宜,但是冒著引發火焰大戰的風險,我認為使用PIC作為學習工具可以教您編寫PIC,而不是教您編寫通用微控制器。為此,MSP,AVR(Arduino),低端ARM Cortex甚至是古老的8051處理器將提供更容易轉移的技能。
非常感謝您……這非常有用。但是,總結一下您的答案:我現在需要的是繼續使用C ++並熟練掌握C,學習Verilog或VHDL或兩者,並抓住一些開發板進行練習或只是將這些模擬器用作開始。
@SirajMuhammad-是的,僅此而已,除了學習Verilog和VHDL可能不是必需的,因為它們通常可以在設計中一起使用(例如,您可以在您的VHDL中使用其他人設計的軟核處理器) Verilog設計,並且可以正常運行),因此只需選擇一個即可。
@Ian-我並不是建議它*具有*作為PIC,這只是一個例子(因此,“就像PIC”一樣)。無論如何,如果您使用C進行編程,那麼我認為並沒有太多那裡的任何一個小千分尺之間的總體差異。當然,真正了解一個由內而外的微觀結構(裝配體和全部)是有用的,但是從更高的層次開始,事情應該看起來大致相同,只是工具有所不同。我認為在做出任何承諾之前值得嘗試一下。
Cortex M3或M4是一個很好的開始。有便宜的板子,TI剛剛發布了4.99美元的M4 Launchpad板,STMicro的價格為15美元的Discovery板。它們具有大量的外圍設備,可直接連接至主機以進行編程和調試的USB接口以及大量CPU(當然,相對而言)。而且,如果您最終提出了一個瘋狂的項目構想,則提供了適用於PWM LED控制器,LCD顯示器,觸摸屏等的驅動程序庫。它們還捆綁了IDE,因此如果您想走這條路,就可以快速入門。如果您想使用Unix路由,請使用arm-eabi-gcc。
“如果您已經了解C ++,應該不會太難”?我不同意這一點,知道“ VB .Net,C♯和C ++”的人可能會以相當高級的,面向對象的RAII風格使用後者,並且可能需要一些時間才能正確掌握手冊。內存管理。
@leftaroundabout-公平地說,也許我說得太簡單了-我的意思是,它將為OP提供一個具有結構,語法和熟悉感的良好起點,而不是“從頭開始”。我同意仍然有很多東西要學習,尤其是在內存有限的嵌入式系統上的實際使用方面。
@leftaroundabout編寫面向對象的程序並沒有錯,RAII(在正確使用的情況下)為零成本,並且可以避免許多無聊的錯誤(在學習中不可避免)。
@Alice正是我的觀點。僅僅因為有人可以使用RAII和其他工具很好地編寫C ++,並不意味著他們也可以使用C進行編程。
Suboptimus
2012-09-06 06:20:35 UTC
view on stackexchange narkive permalink

學習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的硬件(但您會在編寫包含幾行彙編的代碼之後)。我從事過多個遊戲,並且開發過板/固件設計項目,而我為商業項目編寫的總裝配線可能還不到十幾歲。它不具有生產力,也不具有可移植性,也不可讀,因此只能用作最後一種選擇。

值得一說的是,您的幾行彙編可能會包含在內聯彙編語句(`asm()`)中,該語句很好地嵌入了C代碼中。這在各個方面都是一個成功的組合。高水平但緊湊,偶爾會碰到裝配,例如,時機需要恰到好處。 `avr-gcc`工具鏈已經使用C宏完成了很多工作,因此您永遠不會注意到。
能夠讀取程序集而不是必須編寫程序集可能更重要。這使您能夠了解編譯器告訴微控制器的操作,並且在極少數情況下,能夠發現編譯器出錯的時間。您還需要具有一些組裝方面的知識,以充分利用調試工具並使用它們提供的單步功能。
絕對同意。我認為,對於有抱負的程序員來說,最好的練習之一是編寫一種玩具語言編譯器和代碼生成器,至少可以處理函數,數組和結構以了解堆棧框架的外觀以及彙編語言中編程語言的基本要素。 。
@Ian-如果您不知道如何編寫彙編程序,則無法讀取彙編程序。您需要閱讀並將其與編寫後的內容進行比較。
@Rocketmagnet-您無需檢查編譯器是否已生成最有效的程序集實現。要求是您能夠讀取生成的彙編程序並檢查實現的代碼的邏輯是否符合您的意圖。這與使用其他人類語言相同。我能說和讀的法語,德語和拉丁語遠遠多於我說或寫的能力。
@Ian-是的。正如我在帖子中所解釋的那樣,檢查正確性和最佳性都很重要。如果您的C編譯器正在生成次優代碼,那麼您將不知道它,並且您將購買比需要的價格更昂貴的MCU。我已經看過幾次了。即使是沒有嵌入式經驗的非常熟練的C和C ++編碼人員,也可能寫出“非常”浪費的代碼,因為他們不知道如何檢查它。這有例如導致機器人中的實時控制迴路出現問題,這些機器人不得不等待很長時間才能從編碼錯誤的MCU中返回數據。
Rocketmagnet
2012-09-06 14:11:00 UTC
view on stackexchange narkive permalink

我與其他所有人一樣,您需要具備出色的C語言能力。

我還建議您也學習至少一種彙編語言。這樣做將使您成為更好的C程序員。您需要知道引擎蓋下發生了什麼,這在嵌入式世界中比在PC世界中要真實得多。

了解C生成的彙編程序將使您編寫的代碼更加優化C在速度和緊湊性方面。更快的代碼意味著:

  • 您可以使用便宜的慢速MCU來削弱競爭對手。
  • 您可以降低時鐘頻率以提高EMC兼容性。
  • 在低功耗應用中,MCU可以花更多的時間在睡眠中,從而直接增加電池壽命。

更緊湊的代碼意味著您可以使用內存更少,價格更便宜的MCU。或有更多功能的餘地。


您可能考慮學習的另一種語言是 Verilog。這是一種硬件描述語言,它與C確實有很大的不同,不僅在外觀上,而且在功能上。 Verilog將為利用功能強大的芯片(如 Cypress PSoC3和5)開闢道路。這是一個具有模擬和數字可重編程硬件的微控制器,它使您可以做一些令人驚奇的事情,而這是任何其他MCU都很難做到的。您還可以進行 FPGA設計。

“一種彙編語言”是什麼意思?我知道有一種語言叫做Assembly,它有分支還是類似的東西?你能說點名字嗎?非常感謝您的回答。
每種類型的CPU或MCU都有自己的彙編語言和不同的指令。它們都相當相似,但有重要區別。學習您所使用的任何MCU的彙編語言。
要說的正是這個。 C和彙編語言是電子工程中最常用的,因為您通常要處理低級的東西。面向對象並不是真正被很好地利用,來自C / Assembly的低級思維也將適用於您使用的其他任何工具。
SiegeX
2012-09-07 09:32:19 UTC
view on stackexchange narkive permalink

作為在國防界工作了8年的MSEE,我可以告訴您,了解如何在 LabVIEW(一種圖形化的,嚴格類型化的數據流語言)中很好地進行編程意味著

LabVIEW最初是為硬件工程師設計的一種編程語言,您可以看到這一點,因為代碼看起來非常像電路圖。但是,在過去的25年中,LabVIEW已發展為功能豐富的功能完善的語言,並支持對象定向和多線程。實際上,我認為沒有其他編程語言(基於文本或其他語言)比在LabVIEW中編程多線程應用程序更容易。這在很大程度上是由於它的數據流範例。隨著CPU內核數量的不斷增加,LabVIEW作為一種通用語言將變得越來越重要。

了解LabVIEW的另一個好處是,您只需使用 LabVIEW FPGA模塊,它將您的LabVIEW代碼在幕後轉換為VHDL,然後再傳遞給Xilinx編譯器。您還可以通過 LabVIEW Real-Time模塊(使用VxWorks或Phar Lap)來使用LabVIEW技能過渡到編程實時代碼。

注意:我是認證的LabVIEW開發人員。

enter image description here

我見過的所有生產型LabVIEW看起來都更像這樣:http://thedailywtf.com/Articles/Labview-Spaghetti.aspx我毫不懷疑對於那些願意維護此類代碼的人來說,這是一個強大的就業市場。
-1
@markrages問題是雙重的。第一,管理人員只給工程師足夠的培訓,以免發生危險。我要說的是,我在公司遇到的9/10個LabVIEW程序員,只接受了前兩個基礎課程的培訓,這些基礎課程實際上只教您語法。其次,LabVIEW已經成為一種功能豐富的語言,可以與當今的任何現代語言匹敵,因為它的圖形管理認為它必須很容易。 Managemnt絕不會要求軟件工程師設計中等複雜的電路,但是如果他們“知道LabVIEW”,他們就不會在復雜的軟件問題上引發EE問題。
@markrages:當我想起為什麼我喜歡LabVIEW時,我看到了您的評論並想起了為什麼討厭它。哦,無聊的時光又回來了。
Dave Tweed
2012-09-06 03:41:34 UTC
view on stackexchange narkive permalink

如果您想對微控制器進行低級編程,那麼您應該對彙編語言編程感到滿意(不同的體系結構越多越好),是的,與使用C ++相比,使用C的要多得多。 / p>

對於一般的工程工作,通常將諸如Matlab(也包括Scilab和GNU Octave)之類的面向數學的語言用於建模和原型製作。

此外,許多用於軟件和硬件的IDE通常可使用TCL或LUA編寫腳本的腳本,因此對腳本語言(也包括Perl,Python,PHP,Javascript等)進行一些熟悉會很有用。

對於硬件設計,您將需要Verilog和/或VHDL技能。

Johan
2012-09-06 13:34:09 UTC
view on stackexchange narkive permalink

C ++是否足夠?也許。

請記住,C佔所有mcu:s的90-99%,因此C是履歷表上的必備條件。

但是由於您是個高水平的人,您可以開始使用Arduino:s,因為它們是按比例縮小的C ++編寫的,這將使您大致了解C ++現在在單片機世界中可以做什麼。

Scott Seidman
2012-09-06 03:40:42 UTC
view on stackexchange narkive permalink

對於微控制器(我將只介紹微控制器),我認為C是比C ++更好的入門語言。組裝將是下一步,對於幫助您了解C編譯器是如何使您陷入困境,創建錯誤,竊取時鐘滴答聲等,並從平台中獲取最大性能的絕佳選擇。所有這些都是假設您在談論微控制器-而不是arduino,BASIC Stamp或涉及包裹微控制器的任何其他平台。

很難說什麼對“您的領域”有用-並建議作為一名學生,您可能還不太了解您的領域!! -但我認為您的語言集似乎很合理,您會發現自己一遍又一遍地使用它。至少,掌握一種結構化語言可以使下一種結構化語言變得容易得多,但是我認為您總是會發現Windows編程技能很不錯。

Paddy3118
2012-09-07 01:22:46 UTC
view on stackexchange narkive permalink

如果您使用處理器,則可以學習C以及C語句生成的彙編代碼的類型,但是您還應該教自己如何使用Unix命令行外殼程序(例如bash)以及與之配套的工具。像sed,ed,awk,vim / vi,find,tar,gzip ...以及可以在許多平台上使用的Python,這是“完成任務”的好方法。

mjh2007
2012-09-07 01:36:01 UTC
view on stackexchange narkive permalink

如果您想成為一名認真的嵌入式開發人員,則必須學習C。即使您可能很少使用彙編器,您也應該了解彙編器。

placeholder
2012-09-07 02:59:55 UTC
view on stackexchange narkive permalink

我首先將電子工程師定義為從固件到電路板設計再到芯片設計的硬件設計人員。在某些情況下,您需要製作固件,如上所述,您需要使用“ C”。深入的軟件僅是一種工具,用從C / C ++到Lisp之類的互補語言來理解一些compsci概念將比細節更重要。您將需要軟件來支持您的設計工作,但這並不能優先於理解物理實現中可以完成的工作的基本限制。即使以這些語言表達設計,數字設計也不是Verilog / VHDL。在完整的自定義和計算機內設計中,您將看到Lisp語言和C函數語言。越來越多的趨勢是使用Python編寫腳本,但是有很多Perl / Skill / C / System C / Verilog-A / VHDL測試平台和檢查軟件/腳本。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...