Gömülü bir yazılım geliştiricisi nasıl olunur?


22

İyi bir gömülü yazılım geliştiricisi olmak ya da bu alanda geliştirmek isteyenler için bazı ipuçları istiyorum.

Donanım, yazılım hakkında neye ihtiyacım var?

Hangi kitaplar en çok tavsiye edilir? Bloglar?

Sonunda, acemi bir hobistten mükemmel bir profesyonele nasıl gidebilirim?

Yanıtlar:


39

Tüm cevaplar şimdiye kadar iyiydi, ama iki sentimi atacağım.

İşte bir twist ve bazı ekstra ile bazı ipuçları tekrarı:

  • C Öğrenin: Hala taşınabilir olan donanımın temel dili (bir dereceye kadar). Sadece öğrenmekle kalmaz, aynı zamanda uçucu gibi tüm özelliklerinin uzmanı ve neden aygıt sürücüleri yazmak için önemli olduğunu da öğrenin.
  • Arduino gibi iyi bir geliştirme kitiyle başlayın, ancak daha önce de belirtildiği gibi, daha önce iyi bir fikir edindikten sonra diğer mimarileri öğrenin. Neyse ki, diğer işlemcilerle oluşturulmuş bazı Arduino uyumlu kartlar var, bu şekilde aynı tasarımı farklı bir uC'ye yeniden yazabilirsiniz, tüm tasarımınızı karıştırmaz ve yeni bir şey hissedersiniz.
  • Öğrenme aşamasında, tekerleği aygıt sürücülerine veya diğer kod parçalarına yeniden icat etmekten çekinmeyin. Sadece başka birinin sürücü kodunu oraya yazmayın. Öğrenirken tekerleği yeniden icat etmenin değeri var.
  • Kodunuzu hız ve bellek kullanımı açısından daha verimli bir şekilde yeniden yazmak için kendinize sorun.
  • Farklı gömülü sistemler yazılım mimarileri stillerine aşina olmak. Temel kesme tahrikli / arka plan döngü işleme ile başlayın, ardından arka plan zamanlayıcılara, ardından gerçek zamanlı işletim sistemlerine geçin.
  • Kaynak kontrolü iyi olsun! Mercurial'ı kendim tercih ederim .
  • Üzerinde çalışılan tek kişi bile olsa, projenizi barındırmak için Sourceforge.net veya Bitbucket.org gibi ücretsiz kaynak kontrolü barındırma sitelerine kaydolun . Kodunuzu yedeklerler; bu nedenle, sabit disk sürücüsü çökmesiyle ilgili endişelenmenize gerek yok! Dağıtılmış bir VCS kullanmak çok kullanışlı çünkü sabit sürücünüzdeki değişiklikleri kontrol edebilir ve hazır olduğunuzda ana siteye yükleyebilirsiniz.
  • Üzerinde çalıştığınız çip için araçlarınızı iyi öğrenin! Derleyicinin nasıl montaj oluşturduğunu bilmek önemlidir. Kodun ne kadar verimli olduğu konusunda bir fikir edinmeniz gerekir, çünkü montajda yeniden yazmanız gerekebilir. Linker dosyasının nasıl kullanılacağını bilmek ve bellek haritası çıktısını yorumlamak da önemlidir! Az önce yazdığınız rutinin çok fazla ROM / Flash kullanmanın suçlu olup olmadığını başka nasıl öğreneceksiniz?
  • Tasarımlarınızda yeni teknikler öğrenin ve bunlarla deneyimleyin!
  • Hata ayıklama yaparken hiçbir şey varsaymayın. Doğrula!
  • Hataları yakalamak ve varsayımları doğrulamak için nasıl defanse programlanacağını öğrenin (assert kullanmak gibi)
  • Bir O kapsamındaki kesme gecikmesini değiştirmek ve ölçmek için zamanlayıcılarla bellek tüketimi veya profil kodunu kodlamak veya uC üzerindeki yedek pimleri kullanmak gibi kodunuzda bir hata ayıklama bilgisi oluşturun.

İşte bazı kitaplar:

İşte bazı web siteleri:

  • Gömülü Gurus
  • Ganssle Group Jack Ganssle'ın anlatacak harika tarihi hikayeleri var. Makaleleri oku. Yine de bazı şeyler hakkında biraz vaaz veriyor.
  • Embedded.com Ganssle, Barr ve diğer endüstri uzmanlarından en son teknikler ve ipuçları için iyi bilgi.

1
@Adam: Bu kitabı seviyorum! Pragmatik Programcı! Unuttuğuma inanamıyorum!
Jay Atkinson

1
Mercurial için +1. Bunu sevdim, fakat git ile olan uzmanlığımın daha değerli olacağını hissediyorum. Diğer projelere katkıda bulunmak veya bunlardan yararlanmak istiyorsanız SVN ile ilgili temel bilgileri bilmek oldukça önemlidir.
tyblu

17
  • Unutmayın, "Gümüş mermi yoktur" , tüm sorunları çözebilecek tek bir araç, yöntem, dil veya sistem olduğuna inanmanın tuzağına düşmeyin
  • C konusunda uzman olun
    • Malloc () ve POSIX olmadan geçmeyi öğrenin
  • Tek bir mimariye takılmayın, kazayla PIC veya AVR veya ARM hayranı olmak çok kolay
  • Bir şeyler yap, hata ayıkla, çalışmasını sağla Pratik yapmak mükemmelleştirir
  • En az bir kaynak kontrol sistemi (SVN / git / etc) öğrenin ve kullanın
  • Her zaman varsayımlarınızı test etmeye hazır olun. Hata genellikle çalıştığını düşündüğünüz şeydedir.
  • Hata ayıklayıcılara fazla güvenme, her sistemde ve değişkenlikte güvenilirliği farklı
  • Zekice düşün. Problem çözerken, kod ayak izi, RAM ayak izi ve donanım maliyeti hakkında düşünün.

Kitaplar için tarih boyunca kazmayı tavsiye ederim. Günümüzün gömülü yazılım tekniklerinin çoğu, geçmişin kanamasından geliyor.

Her şey gibi, günlük pratik yapın.


5
Öğrendiğim her şeyden, sürüm kontrolü (şu anda yıkımı kullanıyorum) üretkenliğim için en değerli şey. Buraya başladığımda Microsoft tarafından veri kaynağımız vardı, bu yüzden kötü bir çözüm kullandım, sonra da iyi.
Kortuk

Kaynak kontrol sistemi olmadan hayatımı hayal edemiyorum. Şu anda da SVN kullanıyorum. SVN'yi bilmeden önce işlerin nasıl yürüdüğünü bilmiyorum.
Daniel Grillo

1
+1 "Hata genellikle çalıştığını
düşündüğün şeydedir

"Malloc olmadan geçinmeyi öğrenin" - Neden? Yığın / yığın çarpışma riskini en aza indirmek için?
rzetterberg

@rzetterberg Birçok gömülü sistem, yığın parçalanmasına ve belirsizliğe neden olabileceği için dinamik bellek tahsisi kullanmaktan kaçınıyor
Toby Jaffey,

8

Diğer cevaplar harika, ancak bir hobi ile profesyonel arasındaki en büyük fark, kalite konusunda bir zihniyet olmalıdır. Bu yüzden, projenizin sonuna kadar devam etmesini sağlayın,% 80 oranında bir projeyle işiniz bittiğinde durmayın. Tamamen götürün, çalıştığını ispatlayın ve doğru bir şekilde belgeleyin.

Kodunuzun okunabilir ve bakımının yapıldığından emin olun.

Ve biraz eğlenmeyi de unutmayın :)


7

Açıkçası, C öğrenme ve bazı geliştirici kurulu ile başlama gibi, mikrodenetleyici veri sayfalarını okumayı öğrenmek isteyeceksiniz .
Üreticiler mikrodenetleyicilere gittikçe daha fazla özellik ekliyor, bu nedenle daha da karmaşık hale geliyor. Formu yalnızca ayrıca vb kayıtları, hafıza haritalar, içinde detaylı açıklama (yazılım geliştiricisi daha elektronik mühendisi için daha ilginç olan) elektriksel özelliklerini sağlamak değil,
ilk ürkütücü görünebilir veri sayfası okuma, ama onları anlamaya başarısız Açık hata ayıklama aşamasında daha ciddi bir baş ağrısına neden olabilir.


3

'Gömülü' yüklü bir terimin bir parçasıdır ..

Bazı açılardan, tek bir uygulamayı çalıştırmaya adanmış herhangi bir sistem, kontrol edilecek bir donanım olduğu sürece gömülü bir sistem olarak adlandırılabilir. Yerel bir G / Ç modülleriyle bir işlemi kontrol ediyorsa, linux üzerine bir java uygulaması çalıştıran 2GB RAM ile bir 400MHz PPC604'ü kavrayabilirsiniz. Öte yandan, sadece bir tür minimal ağ uygulaması çalıştıran bir arduino gömülü bir sistem olmazdı. Fakat muhtemelen 'gömülü' çoğu insanın sadece birkaç yüz byte RAM'e sahip, flash işletim sistemi olmayan ve çip üstü çevre birimlerinden oluşan çok sayıda flaş tabanlı denetleyicileri düşünmesini sağlıyor.

Olduğu söyleniyor, muhtemelen gömülü olmayan programcılar genellikle gömülü sistemlerin öğrenilmesiyle karşı karşıya olan en büyük iki engel, G / Ç kayıtları ve kesmelerdir.

Kesintiler, gömülü olmayan programcıların başa çıkması için iki kavramdan daha kolay olabilir, çünkü bunlarla ilgili ana konular, eşzamanlılık ve olaya dayalı programlama, çoğunlukla ana uygulamalarda görülür. Bir kesintiye neden olan şey, bir sistemin kesme işleminin kalitesine olan aşırı hassasiyetini ve kesme koşulunu ortadan kaldırmak ve bir sonraki için ayarlanmak için donanımla uğraşmanın inceliklerini anlamaktır. Bir GUI ile bir kilitlenme sadece uygulamayı öldürür. Bir kesinti işleyicisi ile bir kilitlenme, tüm sisteminizin kilitlenmesine neden olur.

G / Ç cihazları en fazla zorluğa neden olan alan gibi görünmektedir. Uninitiated için, bunu register okuma keşfetmeye oldukça sürpriz olabilir burada o kayıt üzerinde bir etkisi vardır orada . Bitleri temizlemek için 1'leri yazmak. Bir veri kaydı, vb. Okuduğunuzda kendilerini temizleyen durum bitleri. G / Ç donanımında, cihaz veri sayfalarının nasıl bulunacağını ve yorumlanacağını öğrenmek dışında, bununla başa çıkmanın genel bir kuralının bulunmadığı pek çok olasılık vardır. Seri port için bir aygıt sürücüsü yazmak, düşük seviyeli G / Ç programlama hakkında size çok şey öğretecektir.

Bunları öğrenmek için kişinin kollarını sarmaktan ve çıplak metal üzerinde düz bir C ve / veya birleştirme dili programlamaktan başka bir seçenek yoktur. Yukarıda belirtilen java tabanlı gömülü sistem bile sonunda G / Ç için bir aygıt sürücüsüne ihtiyaç duyar ve bu sonuçta C ile başa çıkmak anlamına gelir. Deneyim en iyi öğretmendir. Bir mikroişlemci seçin, MSP430, TMS320, AVR, ARM, PIC, 68HC11, ne olursa olsun, bir değerlendirme seti bulun ve bazı sistemler oluşturun.


3

$50tO$ancak profesyonel mini için lehim gerekir. Ben PIC ailesinin bir hayranı değilim ama orada bir tarih dersi olarak bir şeyler almak isteyebilirsiniz, aynı 8051 için de geçerli, her iki aile hala popüler ve kullanımda, çok verimli değil ve başka mimariler tarafından ele geçirilmiş. Kesinlikle ARM ve başparmak, belki MIPS (eski bir PIC mimarisi ile karıştırılmaması için bir pic-32). ARMmite Pro, Stellaris de olsa iyi bir giriş seviyesi ARM kartıdır.

Burada öğrenmek istediğiniz, çeşitli platformlar için bir araya getiricidir. C. C ve montajcı etkileşimi. Farklı araçlar GCC ve GCC olmayan. Bir veri sayfası / programlayıcı referansı nasıl okunur (ve hepsinin bazı hataları olduğunu veya yanıltıcı olabileceğini fark et, onlara asla güvenme, donanım belgeler üzerinde kazanır) ve şematik okuma veya kullanma. Bunlar normalde karmaşık şemalar değildir. Bir dizi pano, projelerde arabirim yapmak için iyidir, bu şekilde tahtada çöp olmadığı anlamına gelir, sadece G / Ç pinlerine doğrudan erişim sağlar. Ancak bu öğrenme için en iyisi değildir. Stellaris gibi bir şeyProjeler için acı veren tahtada gömülü öğrenmek ve sürücüleri ödünç almak / kullanmak veya veri sayfalarından kendi yazmak için öğrenmek için çok eğlenceli şeyler var. Atmel AVR kelebeği, eğer hala mevcutsa iyi bir tahtadır, programlamak için kendi seri portunuzda lehim yapmanız veya sadece deliklerdeki bazı kabloları sıkmanız gerekebilir. Size verdiği şey, programlamayı öğrenebileceğiniz birkaç çevre birimidir.

Linux ya da RTOS’da SDK veya API çağrıları kullanarak uygulama yazmayı içeren (gömülü donanıma asla dokunmadan veya veri sayfalarını okumadan) dahil olmak üzere gömülü işler yapsanız bile, yukarıdaki bilgiler sizi gerisini daha ileriye koyacaktır.


3

Bu makale (Portekizce'den İngilizce'ye otomatik olarak çevrilmiştir), gömülü yazılım geliştiricisi olarak kariyer geliştirme konusunda iyi bir genel bakış sunar. Not: Orijinal burada .

Geliştirmeniz gereken bilgi alanlarını ana hatlarıyla açıklayarak başlar:

  1. Bilgi: Gömülü sistemlerde yer alan teoriyi bilmelisiniz. Bu donanım ve yazılım anlamına gelir. Çalışan donanım mimarisini tanımadan, gömülü yazılımların yetkin bir geliştiricisi olmak mümkün değildir.

  2. Beceri: Bu alanda tecrübe edinmen gerekiyor. Uygulamaya ihtiyaç var. Tüm PIC assembler anımsatıcılarını süsleyebilirsiniz, ancak bu bilgiyi kullanarak bir LED kullanamıyorsanız, bir faydası yoktur.

  3. Tutum: Her şeyden önce, bu alanda sizi büyütecek tutumlara ihtiyacınız var. Sık değişiklik ve gelişmelerle çok dinamiktir. Her zaman motive olmanız gerekir (a) kendini öğretmek, öğrenmekten zevk almak, "çimdiklemek" ve işlerin nasıl yürüdüğünü anlamak. Bu tür tavırlar olmadan en kısa zamanda size verecektir. Çünkü bu alanın çok ama çok ısrarcı olmanız gerekiyor.

Daha sonra bu alanların üstesinden gelmek için aşağıdaki ipuçlarını verir (ve onları daha fazla metinle geliştirir, bunlar sadece başlıklardır):

  1. Donanımı öğrenmek için neye ihtiyacınız var (en azından)
  2. Yazılımı öğrenmek için neye ihtiyacınız var (en azından)
  3. Ayrıca işletim sistemlerini inceleyin
  4. Bir eğitime ihtiyacın var
  5. Kesmeyin, öğrenmeye devam edin ve ağınızı geliştirin!

1
Bağlantı için teşekkürler! Google çeviri, bu soru için mükemmel bir seçim olduğunu gösteriyor. Bununla birlikte, (1) metnin İngilizce olmasını tercih ederdik ( çoğumuz en azından iki dilli olsa bile İngilizce konuşan bir toplulukuz ) - Yalnızca (2) cevabı içermesi durumunda otomatik çeviri yapın Bağın kesilmesi durumunda makalenin bir özeti. Postanızı bu kurallara uymak için düzenledim ve size bunun için bir puan verdim!
Kevin Vermeer

2

Gömülü bir yazılım mühendisi olmadan önce iki kez düşünün. Kariyerimde fazlarım oldu. Satış / pazarlamaya geçmekten ziyade ilk 5 yıl yazılım geliştirdim, 15 yıl boyunca 100 + M $ 'lık bir işi başardım ve şimdi yazılıma geri döndüm.

15 yıl sonra yazılıma geri döndüğümde, neden ilk etapta bıraktığımı hatırlıyorum. Bu zor. Konsantrasyona ihtiyaç var, yüzlerce kod satırı birbirine dokunuyor ve hepinizin hafızasında tutmanız gerekiyor. Gömülü özellikle zordur.

Kendini de anlamalısın. Genelde akıllı bir adam, titiz ve sabırlıysanız harika bir mühendis olursunuz. Bunlardan herhangi birini kaçırıyorsanız en iyi ihtimalle ortalama olacaksınız. Bunu bir düşün. Çok akıllıysanız ve sabırlı değilseniz, ne kadar akıllı olursanız olun, buna değer değil, iyi mühendislik sabır ve detaylara dikkat eder.

Ayrıca, konuşmadan bir defada kod saatlerine bakarken rahat olmanız gerekir. Sosyal becerileri iyi olan insanların bunu dayanılmaz bulduğunu gözlemliyorum.

Tüm bunlar kontrol edilirse, o harika kitapları okumaktansa, egzersizleri yapın, harika bir mühendis olursunuz .. İyi şanslar


1

Diğer herkes harika şeyler söylüyor. Bu yüzden size genel tavsiye vereceğim: oku oku oku oku oku oku oku oku!

Http://embeddedgurus.com adresindeki her makaleyi okuyun. Bir şey anlamıyorsanız, araştırın. Bu şeylerin açıklamasında, anlamadığınız bir şey bulursanız, biraz daha okuyun. Gömülü bir yazılım pozisyonuna girmek üzereyim ve deneyimlerim son birkaç yılda bir sürü profesyonel proje ve bir sürü okuma. Deneyim, bir şeyleri denemenize izin verir, ancak okuma, denediğin şeylerin daha önce yapılıp yapılmadığını, belki de yapabileceğinden daha iyi olduğunu bilmeni sağlar. Her durumda birlikte çalışabileceğiniz kavramları size tanıtır.

Sadece oku!


0

Bir uzman ol C Zamanlayıcıları ve seri iletişimi anlayın. Ellerini bununla kirletmelisin. RF protokollerini anlayın, gereksinimlerinize göre ince ayar yapın. Hata ayıklama sırasındaki kod kombinasyonlarını sadece kör olarak denemeyin. Kod tam olarak ne yapman gerektiğini yapıyor. Kullanım kılavuzunu ve veri sayfasını okuyun ve bir şeyler işe yaramazsa değişiklik yapın. Tüm söylenen ve yapılanlar, uzman olmanın tek gerçek yolu pratik yapmak. Bina uygulamalarına devam edin. Yakında ikinci doğa olacak.

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.