Gömülü programlama elektrik mühendisliğine veya yazılım geliştirmeye daha yakın mı? [kapalı]


34

Mikro denetleyicilere gömülü C yazma işim yaklaşıyor. İlk başta, gömme programlamanın benim için yazılım yığınında çok düşük olduğunu düşünürdüm, ama belki de yanlış düşünüyorum.

Normalde kendimi bir elektrik mühendisi olarak görmediğim için gömülü kod yazma fırsatından vazgeçerdim. Bu kötü bir varsayım mı? Gömülü sistemler için ilginç ve kullanışlı yazılımlar yazabilir miyim, yoksa yazılım yığınının çok altına düştüğüm için tekme atar mıyım?

Bilgisayar bilimi için okula gittim ve derleyici yazmaktan, eşzamanlı algoritmalar hakkında düşünmekten, veri yapıları tasarlamayı ve çerçeveler geliştirmeyi gerçekten çok seviyorum. Bununla birlikte, şu anda bir web geliştiricisi olarak çalışıyorum, bu yeni tanımladığım ilginç şeyleri haykırmıyor. (Şu anda "bu onay kutusunun solda 4 piksel olması gerekiyor" ve "bu tarih yanlış biçimlendirilmiş" gibi konularla ilgileniyorum.)

Herkesin katkısını takdir ediyorum. Kararımı kendim için vermem gerektiğini biliyorum, yalnızca gömülü bir programcı olmanın ne anlama geldiğine ve ilginç bulduğum şeye uyuyorsa biraz açıklama istiyorum.

Yanıtlar:


33

Gömülü sistemler üzerinde çalışmakta iyi olmak istiyorsanız, evet, bir süre EE gibi düşünmeniz gerekir. Genelde, çeşitli çevre birimleri (UART, SPI, I2C veya USB gibi seri veri yolları), 8 ve 16 bit zamanlayıcılar, saat jeneratörleri ve ADC'ler ve DAC'ler ile arayüz oluşturmak için kod yazdığınızda kullanılır. Mikrodenetleyiciler için "veri sayfaları" genellikle her yazmacın her bir bitini tanımladıkları gibi yüzlerce sayfaya rastlarlar. Bir şemayı okuyabilmenize yardımcı olur, böylece bir osiloskop veya mantık analizörü ile bir tahtayı problayabilirsiniz.

Diğer zamanlarda, sadece yazılım yazıyor. Ancak sıkı kısıtlamalar altında: genellikle resmi bir işletim sisteminize veya başka bir çerçeveye sahip olmazsınız ve yalnızca birkaç KB RAM ve belki 64 KB program belleğiniz olabilir. (Bu sınırlar, daha küçük 8 veya 16 bit mikroskoplar üzerinde programlama yaptığınızı varsayıyor; 32 bit işlemcide yerleşik Linux ile çalışıyorsanız, aynı bellek kısıtlamalarına sahip olmayacaksınız ancak yine de herhangi bir özel işlemle uğraşmanız gerekecek. Linux dağıtımınızın sürücü sağlamadığı çevre birimi donanımları.)

Hem EE'de hem de CS'de geçmişim var, bu nedenle madalyonun her iki tarafından da zevk alıyorum. Ayrıca bazı web programlama (çoğunlukla PHP) ve masaüstü uygulamaları (C # ve Delphi) yapıyorum, ancak her zaman en çok gömülü projeler üzerinde çalışmaktan zevk aldım.


Cevabınız için teşekkürler. Kısıtlamalar beni gerçekten rahatsız etmiyor. Sadece kendimi yazılımcı olarak düşünüyorum, elektrik mühendisi değil. "Düşük seviye programlama" nın "yüksek seviye elektrik mühendisliği" ile aynı olduğunu söyler misiniz?
Jeremy Heiler

32-bit ve Linux gözlemleri için +1 - Telekomlarda çalışıyordum ve switch donanımı bir Amiga'nın sökülmüş bir versiyonunu kodlamak gibiydi (Motorla 68k işlemci). Çok mutlu zamanlar geçirdim - bazen özlüyorum.
Gary Rowe

3
@ Jeremy, evet, karmaşık bir çevre birimi için ayarları bulmaya çalışırken veya bir kapsamdaki seri bit akışına bakarken, bazen düşük seviyeli programlama yapıyor gibi görünüyorsunuz ve bazen yüksek düzey EE. Bir IDE'nin hata ayıklayıcı pencerelerinin içindeki kayıt içeriğine bakmak için çok zaman harcayabilirsiniz. Bu düzeyde, doğrudan donanıma bakıyorsunuz.
tcrosley

20

@ tcrosley'nin cevabı mükemmel. Elektrik mühendisi olmanıza gerek yok, ancak temel bilgileri bilmek size yardımcı olur.

"Yazılım yığında çok düşük" olmaktan korkmanız gerektiğini düşünmüyorum. Gömülü bir mühendis olarak birçok ilginç problemi çözmek zorunda kaldım. Sevdiğiniz görevlerin bir listesinden bahsediyorsunuz:

  • Eşzamanlı algoritmalar - Eşzamansız donanım seviyesi kesintileri ile başa çıkmak bir işletim sistemi iş parçacığı modeli kullanmak kadar ilginç zorluklar da vardır.

  • Veri yapılarının tasarımı - Kontrol. Kompaktlık ve verimli erişim için tasarım.

  • Çerçeve geliştirme - kontrol edin. Çıplak kemik sistemlerinde, bir mini işletim sistemi tasarlayabilirsiniz.

  • Bir derleyici yazmak - belki olmayabilir, ancak bir derleyicinin montaj oluşturma adımına benzer şekilde düşük seviye kod optimizasyonu ile sonuçlanabilir.

Herhangi bir gün UI'leri kodlamak için gömülü sistemler üzerinde çalışmayı seçtim. Bir makineyi ilk olarak programladığınız şekilde hareket etmeye başladığını izlerken asla unutmayacaksınız. Piksel itmekten çok daha tatmin edici.


1'e 1 eşlemeler için teşekkürler AShelly. Gömülü çalışma ortamı hakkında hiçbir şey bilmemek, bunu bilmek güzel.
Jeremy Heiler,

6

Gömülü bir programcı olarak benim işim özel donanım çalışması yapmak. Genelde, geliştirme kartında bir demet yazılım veya önceki bir donanım sürümünü geliştirdim. Yeni tahta geldiğinde, işim yazılımımı tahtaya koymak ve her şeyin çalıştığını göstermek.

Neredeyse her zaman bir tür problem olduğundan, hata ayıklama becerileri çok önemlidir. Dış çevre birimi çalışmazsa, kötü bir yonga, yongayla kötü bağlantı, buggy kodu veya yonga üstü çevre biriminin yanlış kullanımı mı? Anlamanın tek yolu kapsamlı hata ayıklamadır. Bu, osiloskoplar, ağ analizörleri, mantık analizörleri ve hedef hata ayıklayıcılarla rahat olmak demektir. Hata ayıklama işlemi neredeyse bilimsel hale gelir. Bir hipotez geliştiririm, hipotezime veya hipotezime karşı kanıt sağlamak için bir deney tasarlarım ve test ederim.

Stajyerler veya yeni gömülü mühendisleri değerlendirirken, bu beceri en kritik olanıdır. Tüm yazılımların sorunları vardır, ancak bir kez fiziksel dünyalarla etkileşime girmeye başladığınızda, bu sorunların çeşitliliği katlanarak artar. İşimin özü, kavram ve gerçeklik arasındaki uzun problemleri çözmektir.


Doğru, hata ayıklama, ayrı bir gömülü programcı için çok önemli bir beceridir - özellikle gömülü yazılımla ilgili bir sorunu teşhis etmek için PCB üzerindeki raylara tutturulmuş bir depolama kapsamının görüntüsüne bakmayı içeren hata ayıklama türü. :-) - Bununla birlikte, gömülü yazılım mühendislerinden oluşan bir ekipte daha büyük bir erdem, gelişmiş testler ve kalite kontrol teknikleriyle hataları otomatik olarak yakalama yeteneğidir.
William Payne

5

Tecrübelerime göre, bir "elektronik mühendisi" şapka yerine "yazılım geliştirici" şapka ile gömülü sistem yazılımı geliştirilmesine yaklaşan daha iyi sonuçlar alıyor. (TDD ve CI gibi uygulamalar donanım mühendisliğinde daha az yaygındır)

Öte yandan, gömülü bir sistem için geliştirme deneyiminin daha iyisini yaptığını düşünüyorum; daha çok yönlü yazılım geliştiricisi.


2
Tam olarak, buradaki yerleşik geliştiriciler, yazılımın daha karmaşık hale gelmesi nedeniyle sektörün burada daha fazla cs insanına ihtiyacı var, iyi yazılım kalitesi uygulamalarında gerçekten kötüyüz.
Bjarke Freund-Hansen

Yerleşik yazılımı yazmak, bir yazılım geliştiricisinin yapabileceği en ödüllendirici (fikri, maddi olmasa) işlerden biri olduğu için CS çalışanlarının da bundan zevk alacağını düşünüyorum.
William Payne

3

Ben de yaklaşık 8 yıl önce benzer bir durumdaydım. Bu noktada uygulama ve sunucu ortamlarında 7 yıl yazılım geliştirme yaptım. Z80 meclisinde ZX spektrumunda bir genç olarak yazarken, daha önce donanıma düşük seviye sahip olmakla ilgili tek deneyimim.

Kesinlikle bir zorluktu. Takımdaki çip setleriyle uğraşmak çok zevkli ve donanım hakkında çok şey öğrendim. Benim rolümün önemli bir kısmı, yazılımı kullanarak yazılımı test etmekti, bu yüzden programlama ile başa çıkmayı öğrenmek ve yazılım hatalarınızın aslında bir donanım hatası olduğunu kabul etmek. Aslında bazen bir hatanın donanım mı yoksa yazılım mı olduğunu tespit etmek için yazılım ve donanım çalışanlarının biraz çalışması gerekebilir.

Teslim edemediğim bir şey aygıt sürücüsü çalışmasıydı. Bunu asla gerçekten anlamadım, bu kendim ve şirket yöneticisinin nedenini anlamadığı bir şeydi. Bu sadece kabul edilmiş bir gerçek oldu.

Bir oksiloskop ve bir lehimleme iyonuna aşina olmak çok önemli olacaktır. bir donanımcı adam 26 sayısını söylediğinde, HER ZAMAN 0x26'nin faydalı olduğunu belirtir. Donanım mühendislerinin yazılımla uğraşmayı çok sinir bozucu bulduklarının farkına varmakla birlikte, yazılım içermeyen bir donanım projesine kablo denir.

Bu rolde 4 yıl kaldım ve yalnızca ayrıldım çünkü gerçekten harika bir fırsat için haşlanmış oldum.


Deneyiminizi paylaştığınız için teşekkür ederiz Ptolemy. Bunu takdir ediyorum.
Jeremy Heiler 30:10

Günümüzde oldukça fazla sayıda kablonun içinde de mikroişlemciler bulunur. :-)
William Payne

2

Her şey gibi dengeli bir yaklaşım gerektirir. Gündelik işimde gömülü sistemler ile çalışmayı seviyorum. Beni elektrik mühendisliğinde daha iyi yaparlar. Fiziksel hesaplama ve otomasyon çok heyecan verici. Öte yandan, web uygulamaları oluşturmak ve bulut bilişim ile uğraşmak harika.

Doğru yaparsanız, yazılım tarafınız daha akıllıca ve daha iyi şeyler yapmanın yollarını arayacaktır. Donanımınız sizi kaynakların farkında ve çok verimli kılacak.


Cevabınız için teşekkürler. Alanları daha az değiştirebileceğimi görüyorum, daha düşük seviyeler öğrenmekten başka bir şey olmasa da yığını biraz yukarı kaydırmak.
Jeremy Heiler

2

Elektrik Mühendisi değilim, ancak az miktarda gömülü yazılım geliştirme yaptım. Bulduğum en büyük sorun, matematikte çok daha temel bir geçmişe sahip olmam ve bu yüzden karmaşık bir dizi gelişmiş matematiksel algoritmaların çok fazla yardım almadan kolayca kodlara nasıl bölüneceğini bilmiyorum.

Sinyalleme ile oynaması gereken, girdilerden değerleri okudum, verileri çıktılara gönderdim ve bu tür şeylerin tümü için, bunu kavramsal olarak günden güne yaptığım şeyden biraz farklı buldum eski moda Yazılım Geliştirici. Yazılım yazmak gerçekten de budur. Asıl yazılımın dışına çıkmanız gerektiğinde, zor durumdaki şeyleri zorlaştıracağım çünkü doğrudan donanıma bulaştıracak bilgiye sahip değilim. Bu genellikle kodu ayıklamaya veya sınamaya çalışırken olur. Gerçekten harika bir alet zinciriniz varsa, ağrının çoğunu ortadan kaldırmak için tümleşik hata ayıklama ve simülasyon ortamına sahip olabilirsiniz, ancak tüm bunlara rağmen, size yardım etmek için, bazen temel konulara dönmeniz ve kodunuzu karşı test etmeniz gerekir. Bir çeşit analizör, ve gerçek şu ki çoğu gömülü platform

Bu açıdan bakıldığında, eğer işler basitse ve gerçek donanıma özgü gereksinimler minimum ise, elektrik mühendisi olmanın gömülü programlama için gerekli olduğunu düşünmüyorum. Bunun ötesinde, bir EE olmanın gömülü bir ortamda çalışırken, özellikle sorunların nerede olduğunu anlamak için gerçek bilim gerektiğinde hayatı çok daha kolaylaştıracağını düşünüyorum.


"EE'nin Ouija Kurulu" - mükemmel, iyi biliyorum
Martin Beckett

2

Herhangi bir işletme düzeyinde gömülü programlama yapmadım, ancak lisans eğitimim çoğunlukla birkaç yıllık gerçek deneyime sahip olduğum gömülü sistemler hakkındaydı. Atmel AVR'de C'yi kullandık ve VHDL ile bazı Texas Instruments çiplerine dokunduk ve ARM'de bazı teorik şeyler yaptık.

Sahip olduğumuzda, kabaca yüzde 50-60 programlama (C), yüzde 20 planlama / tasarım (UML) ve gerisi fiziksel elektronikti (lehimleme, ölçme, kablolama, kablo yapma vb.). Ayrıca yapmanın çok ilginç ve eğlenceli olduğunu kabul ediyorum ve aslında gömülü sistemlerde de bir kariyerim olmasını diliyorum. Ne yazık ki, gömülü sistemlerdeki çok küçük bir pazarla eski düz Java EE'ye başvurmak zorunda kaldım.

Ama ben dalırım; Yukarıda belirtilen yüzdelerin gerçek dünyadaki işlere oldukça yakın olduğunu söyleyebilirim, çünkü öğretmenlerimiz kendi işletmelerine sahipler ve aynı zamanda mümkün olduğunca gerçekçi hale getirmeye çalışacaklarını da belirttiler. Proje ortası şartlarında rastgele 180 derece dönüş bile yaptık, he he he.

Yığın gelince. Gömülü programlamanın bilinmesi, size Asya'daki gerçek tesislerde üretebileceğiniz, daha sonra bunları kendi tesislerinizde (evde veya kendi şirketinizde) kurabileceğiniz kendi ve çok gerçek donanım ürünlerinizi yaratma konusunda çok büyük şanslar sağlayacaktır. Bu oldukça ilginç! Ayrıca, hareketle kontrol edilen ev ışıkları, bir kahve makinesinin sabah saatinizi otomatik olarak hazırlaması için zamanlayıcı vb. Gibi evde yararlı olacak birçok araç yapabilirsiniz. Gerçekten heyecan verici şeyler!

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.