it-swarm.dev

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

Mikro denetleyicilere gömülü C yazmak için bir işle karşılaşıyorum. İlk başta, programlama yerleştirmenin 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 elektrik mühendisi olarak görmediğim için gömülü kod yazma fırsatını ortadan kaldırırdım. Bu kötü bir varsayım mı? Gömülü sistemler için ilginç ve kullanışlı bir yazılım yazabiliyor muyum, yoksa yazılım yığınına çok düştüğüm için kendimi tekmeleyecek miyim?

Bilgisayar bilimi için okula gittim ve derleyici yazmaktan, eşzamanlı algoritmaları düşünmekten, veri yapılarını tasarlamaktan ve çerçeveler geliştirmekten gerçekten keyif aldım. Ancak, şu anda açıkladığım ilginç şeyleri çığlık atmayan bir web geliştiricisi olarak çalışıyorum. (Şu anda "bu onay kutusunun solda 4 piksel olması gerekiyor" ve "bu tarih yanlış biçimlendirilmiş" gibi sorunlarla ilgileniyorum.)

Herkesin katkısını takdir ediyorum. Kendim için karar vermek zorunda olduğumu biliyorum, gömülü bir programcı olmanın ne anlama geldiğine ve ilginç bulduğum şeye uyup uymadığına dair biraz açıklama istiyorum.

35
Jeremy Heiler

Gömülü sistemlerde çalışmak konusunda iyi olmak istiyorsanız, evet, bazen EE gibi düşünmeniz gerekir. Bu genellikle çeşitli çevre birimleriyle (UART, SPI, I2C veya USB gibi seri veriyolları), 8 ve 16 bit zamanlayıcılar, saat jeneratörleri ve ADC'ler ve DAC'ler ile arayüz oluşturmak için kod yazarken kullanılır. Mikrodenetleyiciler için "Veri Sayfaları", her kaydın her bitini tanımladıkları için genellikle yüzlerce sayfaya girer. 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 sadece birkaç KB RAM ve belki de 64 KB program belleğiniz olabilir. (Bu sınırlar daha küçük 8 veya 16 bitlik mikrolar üzerinde programlama yaptığınızı varsayar; 32 bit işlemcide gömülü Linux ile çalışıyorsanız, aynı bellek kısıtlamalarına sahip olmayacaksınız, ancak yine de herhangi bir özel Linux dağıtımınızın sürücüleri sağlamadığı çevresel donanım.)

Hem EE hem de CS'de bir arka planım var, bu yüzden madalyonun her iki tarafının tadını çıkarı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ü projelerde çalışmaktan keyif aldım.

33
tcrosley

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

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

  • Eşzamanlı algoritmalar - Eşzamansız donanım seviyesi kesintileriyle uğraşmak, bir OS iş parçacığı modeli kullanmak kadar ilginç zorluklara sahiptir.

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

  • Çerçeve geliştirme - Kontrol edin. Çıplak kemik sistemlerinde, bir mini OS tasarlayabilirsiniz.

  • Bir derleyici yazma - belki değil, ancak bir derleyicinin Montaj oluşturma adımına benzer düşük düzeyli kod optimizasyonu yapabilirsiniz.

Herhangi bir gün kodlama arayüzleri üzerinden gömülü sistemler üzerinde çalışmayı seçerdim. Bir makineyi ilk programladığınız şekilde hareket etmeye başladığınızı asla unutmayacaksınız. Pikselleri itmekten çok daha tatmin edici.

20
AShelly

Gömülü bir programcı olarak görevim özel donanımların çalışmasını sağlamak. Tipik olarak, bir geliştirici kartında veya bir önceki donanım sürümünde bir grup yazılım geliştirdim. Yeni kart geldiğinde, işim yazılımımı tahtaya koymak ve her şeyin işe yaradığını göstermek.

Neredeyse her zaman bir tür problem olduğundan, hata ayıklama becerileri önemlidir. Harici çevre birimi çalışmazsa, kötü bir yonga, yongaya kötü bağlantı, buggy kodu veya yonga üzerindeki çevresel aygıtın yanlış kullanımı mıdır? Anlatmanın tek yolu kapsamlı hata ayıklamaktır. Bu, osiloskoplar, ağ analizörleri, mantık analizörleri ve hedef hata ayıklayıcıları ile rahat olmak anlamına gelir. Hata ayıklama süreci neredeyse bilimsel hale gelir. Bir hipotez geliştiririm, hipotezime karşı veya ona 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 fiziksel dünyalarla arayüz oluşturmaya başladığınızda, bu sorunların çeşitliliği katlanarak artar. İşimin özü, kavram ve gerçeklik arasındaki uzun problemleri çözmek.

6
Ben Gartner

Deneyimlerime göre, bir "elektronik mühendisi" şapka yerine bir "yazılım geliştirici" şapka ile gömülü sistem yazılımı geliştirme yaklaşırken daha iyi sonuçlar alır. (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 onu daha iyi hale getirdiğini düşünüyorum; daha çok yönlü yazılım geliştiricisi.

5
William Payne

Ben yaklaşık 8 yıl önce benzer bir durumdaydım. Bu noktada uygulama ve sunucu ortamlarında 7 yıllık yazılım geliştirdim. Daha önce donanımla ilgili tek deneyimim Z80 montajcısında ZX spektrumunda genç olarak yazıyordu.

Kesinlikle bir meydan okumaydı. Montajcıdaki yonga setleri ile uğraşmayı çok keyifli buldum ve donanım hakkında kesinlikle çok şey öğrendim. Rolümün önemli bir kısmı, yazılımı kullanarak donanımı test etmektir, bu nedenle programlama ile başa çıkmayı öğrenmek ve yazılım hatanızın aslında bir donanım hatası olduğunu tanımak. Aslında bazen bir hatanın donanım mı yoksa yazılım mı olduğunu belirlemek için yazılım ve donanım çalışanları tarafından biraz çalışmak gerekebilir.

Teslim edemediğim bir yönü, aygıt sürücüsü çalışmasıydı. Kendimi ve şirket müdürünün nedenini asla anlamadığı bir şey olan bunu gerçekten hiç anlamadım. Sadece kabul edilmiş bir gerçek oldu.

Bir oksiloskop ve bir lehim iyonuna aşina olmak esastır. bir donanım görevlisi 26 sayısını söylediğinde HER ZAMAN 0x26 anlamına gelir. Donanım mühendislerinin yazılımla uğraşmayı çok sinir bozucu bulduklarını fark etmelerine yardımcı olur, ancak daha sonra yazılım içermeyen bir donanım projesine kablo denir.

4 Yıl boyunca bu rolü kaldı ve gerçekten harika bir fırsat için haşlanmış çünkü sadece yaptı.

3
Michael Shaw

Ben 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 arka plana sahip olduğum ve bu yüzden karmaşık bir dizi gelişmiş matematiksel algoritmanın çok fazla yardım almadan koda nasıl kolayca bölüneceğini bilmiyorum.

Sinyal ile oynamak, girdi değerlerini okumak, çıktılara veri göndermek ve tüm bu tür şeyler için ihtiyaç duyduğum tüm şeyler için, kavramsal olarak günden güne yaptığımdan iyi bir şey olarak biraz farklı buldum eski moda Yazılım Geliştirici. Yazılım yazmak gerçekten budur. Gerçek yazılımın ötesine geçmeniz gerektiğinde, şeylerin zorlandığını görüyorum, çünkü doğrudan donanımla uğraşacak bilgiye sahip değilim. Bu genellikle kodu hata ayıklamaya veya test etmeye çalışırken olur. Gerçekten harika bir araç zinciriniz varsa, ağrının çoğunu ortadan kaldırmak için hata ayıklama ve simülasyon ortamını entegre etmiş olabilirsiniz, ancak size yardımcı olacak tüm bunlarla bile, bazen temel bilgilere geri dönmeniz ve kodunuzu karşı test etmeniz gerekir. bir tür analizör ve gerçek şu ki, çoğu gömülü platform size yardımcı olacak temel bir derleyici ve bir EE'nin Ouija-Board'undan daha fazlasını sunmuyor.

Bu açıdan bakıldığında, eğer görevler basitse ve gerçek donanıma özgü gereksinimler minimumsa, gömülü programlama için elektrik mühendisi olmanın şart olduğunu düşünmüyorum. Bunun ötesinde, gömülü bir ortamda çalışırken, özellikle sorunların nerede olduğunu anlamak için gerçek bilim gerektiğinde, bir EE olmanın hayatı daha kolay hale getireceğini düşünüyorum.

2
S.Robins

İş düzeyinde gömülü programlama yapmadım, ancak Lisanslarım çoğunlukla birkaç yıllık gerçek deneyime sahip olduğum gömülü sistemlerle ilgiliydi. Atmel AVR'de C kullandık ve VHDL ile bazı Texas Instruments çiplerine dokunduk ve ARM'de bazı teorik şeyler vardı.

Sahip olduğumuz şeyde, kabaca yüzde 50-60 programlama (C), yüzde 20 planlama/tasarım (UML) ve geri kalanı fiziksel elektronikti (lehimleme, ölçme, kablolama, kablo yapma vb.). Ayrıca yapmanın çok ilginç ve eğlenceli olduğuna katılıyorum ve aslında gömülü sistemlerde de kariyer yapmayı diliyorum. Ne yazık ki, gömülü sistemlerde çok küçük bir pazar ile, düz eski Java EE) başvurmak zorunda kaldı.

Ama konuya giriyorum; Yukarıda bahsi geçen yüzdelerin gerçek dünyadaki işlere oldukça yakın olduğunu söyleyebilirim, çünkü öğretmenlerimizin kendi girişimleri vardır ve ayrıca bunu mümkün olduğunca gerçekçi yapmaya çalışacaklarını da belirtmişlerdir. Hatta proje ortasında gereksinimlerde rastgele 180 derece dönüşler yaptık, heh heh.

Yığına gelince. Gömülü programlamayı bilmek, Asya'daki gerçek tesislerde üretebileceğiniz kendi ve çok gerçek donanım ürünlerinizi yaratmanız, daha sonra bunları tesislerinizde (evde veya kendi şirketinizde) bir araya getirmeniz için büyük bir şans verecektir. Oldukça ilginç! Hareket kontrollü ev ışıkları, bir kahve makinesinin sabah joe'nizi otomatik olarak hazırlaması için zamanlayıcı gibi evde yardımcı olacak birçok gadget da yapabilirsiniz. Gerçekten heyecan verici şeyler!

2
Juha Untinen

Her şey gibi, dengeli bir yaklaşım gerektirir. Günlük işimde gömülü sistemlerle çalışmayı seviyorum. Elektrik mühendisliğinde beni daha iyi yapıyorlar. Fiziksel hesaplama ve otomasyon çok heyecan vericidir. Ö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 işleri daha akıllı ve daha iyi yapmanın yollarını arayacaktır. Donanım tarafınız, kaynaklara dikkat etmenizi ve süper verimli olmanızı sağlayacaktır.

2
mcotton