Elektronik mühendisleri için programlama dilleri


22

Elektronik ve Haberleşme Mühendisliği öğrencisiyim, üniversiteye gitmeden önce programlama ve bilgisayar uygulamaları ilgimi çekti. Windows uygulamalarını tasarlamaya ve tekniklerini öğrenmeye odaklanmıştım, ama şimdi, bunun alanımda işe yaramadığını hissediyorum ... Bilgisayar bilimi ve yazılım geliştirme hakkında her şeyi öğrenmek zorunda değilim! (Bu konuda haklı mıyım?)

VB .Net, C # ve C ++ 'ı biliyorum. Tatilimde bolca zamanım olduğu için "elektronik alanında" programlı olarak daha derinlere inmek istiyorum. Peki ne öğrenmek veya odaklanmak için ne önerirsiniz?

Mikrodenetleyicilerin ve diğer tümleşik devrelerin programlanmasında kullanılan dilleri istiyorum. C ++ yeterli mi, yoksa C de ustalaşmalı mıyım? Bana düşüncelerini söyle lütfen.


3
"Lehim" Ya da daha ciddiyetle, sade C destek araçları için oldukça geleneksel olsa da, python şu anda biraz modası geçmiş.
Chris Stratton

Yanıtlar:


29

Evet, C'yi olabildiğince iyi kullanmayı öğrenmek iyi bir hamledir (C ++ size yardımcı bir başlangıç ​​noktası verir, ancak notta belirtildiği gibi , yine de, özellikle küçük gömülü sistemler için kodlama arasındaki farklar yine de çok fazla olacaktır. Windows gibi bir şey için yazmaya kıyasla) her yerde.

Belli bir büyüklüğün altındaki mikrodenetleyicilerin çoğu (örneğin PIC, AVR, MSP430, vb.) C (veya assembler) kullanır, çünkü birçok yüksek kalite vardır (ücretsiz ve $$ sürümler - örneğin birçok ticari derleyici, mevcut ücretsiz GCC derleyicisine dayanır) C derleyicileri mevcuttur .
PIC için mükemmel JAL (burada üye olan orijinal yazar Wouter Van Ooijen), PICBASIC, Ada türevleri gibi başka dilleri de alıyorsunuz, ancak popülerliği ve mevcut derleyici sayısı nedeniyle, C'nin tercih ettiği dil olduğunu söyleyebilirim çoğu için. Bu kesinlikle en iyi dil olduğu anlamına gelmese de, en popüler dili kullanmak, belirgin avantajlarla (dokümantasyon, destek, taşınabilirlik, işbirliği vb.)
Birlikte gelir. Birçok ARM varyantı gibi daha karmaşık ve daha büyük 32-bit mikroskoplar için de vardır. C ++ ve diğer derleyiciler mevcut.

Hemen içeri atlayıp birkaç tane gelişim panosu alıp kodlardım. PIC16F gibi düşük uçlu bir 8-bit mikro (Microchip Direct'te birçok başlangıç ​​kiti) seçebilirsiniz
. PIC24 gibi 16-bit mikro aralığının ortası ve bir tür C / C ++ / gömülü linux ARM - STM32F4 ARM Cortex M4 Discovery, kapmaya değer olabilecek çok ucuz bir geliştirme kartıdır.
Programlanabilir mantık ve donanım açıklama dili (HDL - büyük ikisi Verilog ve VHDL) tarafında, Diglent veya benzeri bir FPGA veya CPLD geliştirme kartını tutmaya da değer.

Geliştirme tahtası beklemek istemiyorsanız, MPLAB veya MPLABX'ı indirebilir ve PIC geliştirmede elinizi denemek için mükemmel simülatörü kullanabilirsiniz. Aynı şey diğer araçlar için de geçerli; örneğin, Xilinx ISE Webpack'i ücretsiz olarak indirebilir ve HDL'leri ve programlanabilir mantık tasarımını deneyebilirsiniz.


9
PIC'ler ucuz olabilir, ancak bir alev savaşı başlatma riski altında, PIC'leri bir öğrenme aracı olarak kullanmanın size genel amaçlı bir mikrodenetleyici programlamayı öğretmek yerine PIC'leri programlamayı öğrettiğini iddia ediyorum. Bunun için MSP, AVR (Arduino), Low end ARM Cortex ve hatta saygın 8051 işlemciler daha kolay aktarılabilir beceriler sağlayacaktır.
saat

Çok teşekkür ederim ... bu çok faydalı oldu. Fakat cevabınızı özetlemek için: Şu an ihtiyacım olan, C ++ üzerinde çalışmaya devam etmek ve C ustalaşmak, Verilog veya VHDL veya her ikisini öğrenmek ve bu simülatörleri başlangıç ​​olarak kullanmak için birkaç geliştirme tahtası almak.
Siraj Muhammed

1
@SirajMuhammad - Evet, bununla ilgili, hem Verilog hem de VHDL'yi öğrenmek dışında muhtemelen gerekli değildir, çünkü genellikle bir tasarımda birlikte kullanılabilirler (örneğin VHDL'de başka biri tarafından tasarlanan yumuşak bir çekirdek işlemciyi kullanabilirsiniz. Verilog tasarımınız ve iyi çalışacaktır) bu yüzden sadece birini seçin.
Oli Glaser

4
@Ian - Ben demiyorum bunu sahiptir Eğer C programlama if ( "Bir PIC gibi" dolayısıyla) Her durumda, ben çok genel bir orada olduğunu sanmıyorum sadece bir örnek bir PIC, olmak Dışarıdaki küçük mikropların herhangi biri arasındaki fark. Elbette bir mikro içini gerçekten tanımak (montaj ve hepsi) faydalıdır, ancak daha yüksek bir seviyeden başlamak için işler aynı görünmelidir, sadece araçlar farklıdır. Bence bir şey yapmadan önce birkaçını denemeye değer.
Oli Glaser

2
"Zaten C ++ 'ı biliyorsanız çok zor olmamalı" mı? Bu konuda hemfikir değilim, "VB .Net, C♯ ve C ++" bilen biri muhtemelen ikincisini oldukça yüksek seviye, nesne yönelimli RAII tarzında kullanıyor ve el kitabını doğru bir şekilde kavramak için biraz zamana ihtiyaç duyabilir. bellek yönetimi.
leftaroundabout

23

C'yi öğrenin ve MSP430 veya ARM Cortex gibi ucuz bir mikroişlemci geliştirme kurulu edinin ve en azından birkaç C programı yazıp yükleyin.

Bilgisayar bilimi derecem ve yazılım geliştirme geçmişim var, çoğunlukla oyunlar için C ++ programlama ve şimdi iOS oyunları ve uygulamaları, ancak son işim bir ARM Cortex M3 sistemi için bir grup firmware programlama yapmakla başlayan yarı profesyonel bir EE konseriydi. ve daha sonra bazı temel devre tasarımlarının ve kart düzenlerinin nasıl yapıldığını ve birkaç basit kart tasarlamanın nasıl yapıldığını öğrendim. Bu yüzden temel olarak donanım / yazılım tasarımını her iki uçtan sorumlu bir kişi olarak köprülemek için en iyi programlama dilini kullanma sorunuyla karşı karşıya gelmem gerekiyordu.

C kesinlikle bilmeniz gereken dildir. C ++ 'da program yapan ve hiçbir zaman kendilerini "aynı şey" demek için kendilerini C'nin özelliğiyle sınırlamak zorunda kalmayan insanlar için kolaydır. Özellikle C ++ 'ın özellikleri geliştirip topladığı ve ana C ++ programcılarının bu özellikleri kullanma şekli, C ++ uygulamasının aksine oldukça büyük bir C uygulaması üzerinde çalışmak gerçekten çok farklı bir şey. Firmware SDK'nız bir sürü C kütüphanesi olacak, bir MCU'ya sığacak herhangi bir şey bir C kütüphanesi olacak, bir MCU'da anlamlı olan herhangi bir işletim sistemi C'ye yazılacak vs.

Bununla birlikte, MCU araçlarının birçoğu GCC'yi derleyici olarak kullanmaya başladığı için, iyi bir MCU ailesi kullanıyorsanız, neredeyse kesinlikle bir C ++ derleyiciniz olacak. Ancak, kullandığınız özellikler, özellikle de standart kütüphanedeki şeyler hakkında çok dikkatli olmalısınız, çünkü cihazınıza sığmayacak kadar büyük bir ikili sistem kullanmak son derece kolaydır. Gömülü cihazlarda C ++ kullanmak için yapılması gereken iyi bir durum olduğunu düşünüyorum, C ++ 'nın çöp veya boyut veya hız cezası olmayan çok az sayıda güzel özelliği var, sadece ne yaptığınızı bilmek zorundasınız ve bu şekilde kod yazmalısınız. Ayrıca, zekalı özellik kullanımı açısından, spektrumun C tarzı ucunda, spektrumun STL ucundan daha fazladır.

Bir MCU’da Lua veya Python’u sağ gömülü tercüman filanı ile kullanabileceğinizi söyleyenlere fazla dikkat etmeyin. Bu doğru, yaptım ve eğlenceli, ama şu anda Hack bir Günde ortaya çıkan oyuncak projeleri ve işleri için daha fazla. Moore Yasası en küçük işlemcilere bile acımasızca uygulandığı için bu türden daha fazla şey göreceğimizi düşünüyorum, bu daha önce çok sayıda montajın yapıldığı oyunlarda olan bir şey, daha sonra C ve C ++ ile daha uzun süre devam ettiler. herkesten daha fazla, ve şimdi her şey çok hızlı ve geliştirici verimliliği o kadar önemlidir ki, gömülü yüksek seviyeli dillerle veya yüksek seviyede bir dille çok fazla geliştirme yapılır. Buna rağmen, Python ve Lua geçmişine sahip firma yazılımı programlayıcıları işe alan şirketleri görmeden birkaç yıl alacak.

Montaj için de fazla zaman harcamayın. Kavramlara aşina olmak fena değil, ancak herhangi bir montaj programlaması varsa, kendinizi daha fazla bulmanız pek mümkün değildir. Oyunlarla ve bu alanlarda gerçekten çalışmayan insanlar tarafından sık sık tekrarlanan "bilmek iyi" bir derleme olduğu gömülü geleneksel bilgelik gibi. Fakat gerçekte, herhangi bir montajı hiç yazmazsınız ve bunu yaparsanız, muhtemelen optimizasyon için birkaç satır olacak veya donanıma sahip bir donanıma sahip olamayacaksınız. birkaç montaj hattını saran bir yazdıktan sonra). Birkaç oyun üzerinde çalıştım ve o tahta / ürün yazılımı tasarım projesi ve ticari projeler için yazdığım toplam montaj hattı sayısı muhtemelen düşük seviyelerde. O'


1
Birkaç montaj hattınızın büyük olasılıkla asm()C kodunuza güzel bir şekilde yerleştirilmiş satır içi montaj ifadelerinde ( ) olacağı söylenmeye değer . Bu her şekilde kazanan bir kombinasyondur. Örneğin, zamanlamanın tam olarak doğru olması gerektiğinde, zaman zaman düzene sokulan yüksek seviyeli ancak kompakt. avr-gccAraç zinciri zaten bu C makrolarıyla çok yapar, ihbar asla bu kadar.
Alexios

9
Montajı okumak yerine yazmak zorunda kalmak yerine muhtemelen daha önemlidir. Bu, derleyicinin mikroya ne yapmasını söylediğini anlamanıza olanak sağlar ve çok nadir durumlarda derleyicinin yanlış yaptığını anlayabilirsiniz. Ayrıca, hata ayıklama araçlarından en iyi şekilde yararlanmak ve sağladıkları tek adım işlevini kullanmak için bazı montaj anlayışına sahip olmanız gerekir.
uɐɪ

1
Kesinlikle buna katılıyorum. İsteyen bir programcı için en iyi egzersizlerden birinin, bir yığın çerçevenin nasıl göründüğünü ve bir programlama dilinin temel unsurlarının montajda nasıl göründüğünü öğrenmek için en azından işlevleri, dizileri ve yapıları işleyen bir oyuncak dili derleyicisi ve kod üreteci yazıyor olduğunu düşünüyorum. .
Suboptimus

3
@Ian - Nasıl yazacağını bilmiyorsan assembler okuyabilmek işe yaramaz. Okuman ve yazmış olsaydın yapacaklarınla ​​karşılaştırman gerekir.
Rocketmagnet

2
@Rocketmagnet - Derleyicinin en verimli montaj uygulamasını ürettiğini kontrol etmek için değilsiniz. Şart, üretilen montajcıyı okuyabilme ve uygulanan kodun mantığının amacınıza uygun olup olmadığını kontrol edebilmenizdir. Bu, diğer insan dillerini kullanmakla aynıdır. Konuşabildiğim veya yazabildiğimden çok daha fazla Fransızca, Almanca ve Latince okuyabilir ve anlayabilirim.
saat

10

C konusunda çok yetkin olmanız gereken herkesle aynı fikirdeyim

Ben de en az bir assembly dili öğrenmeyi öneriyorum. Bunu yapmak sizi daha iyi bir C programcısı yapacak. Kaputun altında neler olup bittiğini bilmeniz gerekir ve bu, gömülü dünyada PC dünyasında olduğundan çok daha doğrudur.

C'nizin ürettiği montajcıyı anlamak, hız ve kompaktlık açısından daha optimal C yazmanıza izin verecektir. Daha hızlı kod şu anlama gelir:

  • daha yavaş daha ucuz bir MCU kullanabilir ve bir rakibi alt üst edebilirsiniz.
  • Gelişmiş EMC uyumluluğu için saat hızını azaltabilirsiniz.
  • Düşük güçlü bir uygulamada, MCU uykuda daha fazla zaman geçirerek doğrudan pil ömrünün artmasına neden olabilir.

Daha kompakt kod, daha az bellekle daha ucuz bir MCU kullanabileceğiniz anlamına gelir. Veya daha fazla özellik için yer var.


Öğrenmeyi düşünebileceğiniz bir diğer dil de Verilog . Bu bir donanım tanımlama dilidir ve sadece görünüşünden değil, işlevselliğinden de C'ye göre oldukça farklıdır. Verilog, Cypress PSoC3 ve 5 gibi çok güçlü çiplerden yararlanmanın yolunu açacak . Diğer herhangi bir MCU ile yapılması zor olan bazı şaşırtıcı şeyler yapmanıza izin veren analog ve dijital yeniden programlanabilir donanıma sahip bir mikrodenetleyicidir. FPGA tasarımını da yapabileceksiniz .


"Bir derleme dili" ile ne demek istiyorsun? Derleme adında bir dil olduğunu biliyorum, dalları var mı, öyle bir şey mi var? Lütfen biraz isim verir misiniz? Ve cevabınız için çok teşekkürler.
Siraj Muhammed

4
Her CPU veya MCU türünün farklı komutlarla kendi derleme dili vardır. Hepsi oldukça benzer, ancak önemli farklılıklar var. Hangi MCU'yu kullanıyorsanız, montaj dilini öğrenin.
Rocketmagnet 6:12

1
Bunu tam olarak söyleyecektim. C ve Assembly, Elektronik Mühendisliği'nde en çok kullanılanlardır, çünkü genellikle düşük seviyeli şeylerle ilgileniyorsunuzdur. Nesneye Dayalı, gerçekten o kadar iyi kullanılmamış, C / Assembly'den gelen düşük seviyeli düşünme türü, birlikte çalıştığınız diğer her şey için de geçerli olacaktır.
Muz

9

Savunma endüstrisinde 8 yıldır çalışan bir MSEE olarak LabVIEW'da (grafiksel, kesin olarak yazılmış bir dataflow dili) nasıl iyi programlanacağını anlamanın , hiçbir zaman işiniz bitmeyeceği anlamına geldiğini söyleyebilirim .

LabVIEW, donanım mühendisleri için bir programlama dili olarak başladı, bunu kodun bir devre şeması gibi göründüğü gerçeğinde görebilirsiniz. Bununla birlikte, son 25 yılda LabVIEW, Nesne Oryantasyonu ve çoklu iş parçacığı desteği ile tam teşekküllü ve zengin bir dil haline geldi. Aslında, çok dilli bir uygulamayı programlamak için LabVIEW'dan daha kolay bir metin tabanlı veya başka bir programlama dili olmadığını iddia edeceğim; bu, büyük ölçüde veri akışı paradigması nedeniyledir. CPU çekirdeği sayısı artmaya devam ettikçe, LabVIEW genel amaçlı bir dil olarak giderek daha alakalı hale gelecektir.

LabVIEW'ı bilmenin bir başka avantajı, LabVIEW kodunuzu alan ve Xilinx derleyicisine geçmeden önce sahne arkasındaki VHDL'ye dönüştüren LabVIEW FPGA modülünü kullanarak yalnızca FPGA programlama programına bir taş atmanızdır. LabVIEW becerilerinizi, VxWorks veya Phar Lap kullanan LabVIEW Gerçek Zamanlı Modül aracılığıyla gerçek zamanlı kod programlamaya geçiş yapmak için de kullanabilirsiniz .

Not: Sertifikalı bir LabVIEW Geliştiricisiyim.

görüntü tanımını buraya girin


5
Gördüğüm tüm üretim LabVIEW şuna daha fazla benziyor: thedailywtf.com/Articles/Labview-Spaghetti.aspx Böyle bir kodu sürdürmek isteyenler için güçlü bir iş piyasası olduğundan şüphem yok.
markrages

@ markrages Dinamik VI çağrıları ve globals'lar olduğu gibi neredeyse kötü olan kodları korumam ve / veya genişletmem istendi. Bu problem LabVIEW olan iki ucu keskin kılıçtır. Bir yandan, herhangi bir mühendisin programlayabileceği bir dil olarak pazarlıyorlar, ancak yazılım mimarisinde sağlam bir temel olmadan, bu şekilde kod alıyorsunuz. Neyse ki, NI, basit durum makinesi ile başlayan mimarlar için karmaşık OOP tabanlı aktör çerçevesine iyi yazılmış ve yorumlu şablonlar sunarak LabVIEW 2012 ile bu sorunu yeterince ele almıştır.
SiegeX 19:12

@ markrages Sorun iki yönlüdür. Birincisi, yönetim mühendislere tehlikeli olmaları için yeterince eğitim veriyor. Eğitim alan firmamda tanıştığım 9/10 LabVIEW programcılarının sadece sözdizimini öğreten ilk iki temel kursu aldıklarını söyleyebilirim. İkincisi, LabVIEW, bugün herhangi bir modern dile rakip olan, grafik yönetimi kolay olduğunu düşündüğü için zengin özellikli bir dil haline geldi. Managemnt hiçbir zaman bir orta ve karmaşık devre ortamı tasarlamak için bir yazılım mühendisi görevlendirmez, ancak "LabVIEW" i
tanıyorlarsa

@markrages: LabVIEW'ı neden sevdiğimi hatırlattığımda, yorumunuzu gördüm ve neden nefret ettiğimi hatırladım. Ah, hüsran saatlerinin hepsi bir kerede geri geldi.
Jonny B,

6

Düşük seviyeli mikrodenetleyici programlaması yapmak istiyorsanız, o zaman montaj dili programlaması konusunda daha rahat olmalısınız (ne kadar farklı mimariler ne kadar iyi olursa) ve evet, C'yi C ++ kullandığınızdan çok daha fazla kullanacaksınız.

Genel mühendislik çalışmaları için, Matlab (ayrıca Scilab ve GNU Octave) gibi matematik odaklı diller, modelleme ve prototipleme için yaygın olarak kullanılacaktır.

Ayrıca, yazılım ve donanım için pek çok IDE tipik olarak TCL veya LUA kullanılarak kodlanabilir, bu nedenle genel olarak kodlama dilleri (Perl, Python, PHP, Javascript, vb.) Hakkında biraz bilgi sahibi olmak yararlı olacaktır.

Donanım tasarımı için Verilog ve / veya VHDL becerilerine ihtiyacınız olacak.


6

C ++ yeterli mi? Olabilir.

Lütfen C'nin tüm mcu'ların% 90-99'u gibi bir yerde kullanıldığını unutmayın: s, özgeçmişinizde bir zorunluluktur.

Ancak, siz üst düzey bir adam olduğunuz için Arduino ile oynamaya başlayabilirsiniz: s + azaltılmış bir C ++ ile programlandıklarından ve bu, C ++ 'nın şu anda mcu dünyasında neler yapabileceği konusunda zor bir fikir verecektir.


3

Mikrodenetleyiciler için (ve ben sadece mikrodenetleyicileri ele alacağım), C'nin C ++ 'dan daha iyi bir giriş dili olduğunu düşünüyorum. Montaj bir sonraki adım olacaktır, C derleyicinizin sizi nasıl batırdığını, böcekler yarattığını, saat tikelerini çaldığını vb. Anlatacağınızı ve platformunuzdaki en yüksek performansı sıktığınızı anlamanıza yardımcı olacak harika bir adım. Bunların hepsi bir mikrodenetleyiciden bahsettiğinizi varsayıyor - bir arduino, BASIC Stamp veya tamamlanmış bir mikrodenetleyici içeren herhangi bir platform.

"Alanınız" için neyin yararlı olduğunu söylemek zor - ve bir öğrenci olarak alanınızın henüz ne olduğunu gerçekten bilemeyeceğinizi önerin !! - fakat dil setinizin oldukça makul gözüktüğünü ve tekrar tekrar kullanacağınızı düşünüyorum. En azından, yapılandırılmış bir dili iyi bir şekilde kavramak bir sonraki dili çok daha kolay hale getirir, ancak sanırım windows programlama becerilerinizi her zaman cebinizde taşıyabileceğiniz güzel bulacaksınız.


2

İşlemcilerle çalışıyorsanız, C ve C ifadeleri tarafından oluşturulan assembler kodunun türünü öğrenebilirsiniz, ancak kendinize bash gibi bir Unix komut satırı kabuğu ve sed gibi giden araçları nasıl kullanacağınızı da öğretmelisiniz. ed, awk, vim / vi, find, tar, gzip, ... ve birçok platformda kullanabileceğiniz Python ile "işleri halletmek" için iyi bir yoldur.


2

Ciddi bir yerleşik geliştirici olmak istiyorsanız C'yi öğrenmelisiniz. Ayrıca çok nadiren kullanacağınız halde assembler'ı da bilmelisiniz.


0

Önce elektronik mühendisini, donanım yazılımından donanım yazılımından pano tasarımına ve yonga tasarımına kadar olan birisini ifade etmek için tanımlayacağım. Bazı durumlarda üretici yazılımı yapacaksınız, yukarıda belirtildiği gibi "C" ye ihtiyacınız olacak. Derinlemesine yazılım basit bir araç haline gelir, tamamlayıcı dillerdeki bazı kavramların anlaşılması C / C ++ 'dan Lisp benzeri dillere kadar özelliklerden daha önemli olacaktır. Tasarım çalışmalarınızı desteklemek için yazılıma ihtiyacınız olacak ancak fiziksel bir uygulamada yapılabileceklerin temel sınırlarını anlamada önceliği yoktur. Tasarım bu dillerde ifade edilse bile dijital tasarım, Verilog / VHDL DEĞİLDİR. Tüm özel ve in-silico tasarımlarında Lisp benzeri diller ve C - fonksiyonel diller göreceksiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.