MCU Programlaması için RTOS ve Bare Metal'in Faydaları Nelerdir?


11

Lütfen dikkat: Bu soru özellikle iki RTOS'tan bahseder, ancak daha geneldir ve muhtemelen daha önce gömülü RTOS'lar için C kodu yazmış ve yazılımı doğrudan MCU'larda çalışmış olan herkes tarafından cevaplanabilir.

Gömülü RTOS'lar hakkında daha fazla bilgi edinmek ve onlar için uygulamalar yazmakla ilgileniyorum. Şu anda Embox ve RIOT'a bakıyorum çünkü açık kaynak, modern, aktif ve mükemmel belgelere sahipler. Amacımın iki aşaması var: Aşama 1, bu işletim sistemlerini bir MCU'ya (muhtemelen AVR veya ARM) nasıl derleyeceğinizi ve flash yapacağınızı bulmaktır. Faz 2 daha sonra zaman içinde bir "hobi uygulaması" olarak gelişecek olan basit bir C programı (temel olarak başsız bir arka plan programı) yazmaktır. Daha sonra bu programı aynı MCU'ya flash / dağıtacağım, böylece Embox / RIOT ve uygulamamın üstünde bulunan bir uygulama çubuğunu başarıyla dağıtacağım.

Sonuçta çıkmaz sokaklara giden herhangi bir yola girmeden önce , C / montajcıda yazılan ve MCU'lara yanıp sönen gerçek zamanlı uygulamaların neden altındaki RTOS'lara gerçekten ihtiyaç duymadıklarını açıklamak için oldukça iyi bir iş çıkaran bu makaleye rastladım. .

Şimdi gerçekten kafam karıştı ve bilgi işlem teorisine ilişkin temel anlayışımdan bazılarını sorguluyorum. Sanırım Embox / RIOT'u ilk etapta bile kullanıp kullanmayacağınıza karar vermeye çalışıyorum:

  • Kursta kalın ve her iki OS + uygulamasının MCU'sunda bir "uygulama yığını" ile devam edin; veya
  • Makalenin uyarısını dikkate alın ve sadece benim app "çıplak metal" çalışan bir MCU ile gitmek

Açıkçası, birincisi daha fazla iştir ve bu yüzden bu rotaya gitmek için iyi bir neden / kazanç olsaydı. Bu yüzden şunu soruyorum: bu (ve benzeri) gömülü RTOS'ların MCU / C uygulama geliştiricilerine sunduğu gerçek faydalar nelerdir? Bir RTOS kullanarak C uygulamam hangi özelliklerden (belki de tekerleği yeniden icat etmeyerek?) Yararlanabilir? RTOS'u terk edip çıplak metale giderek ne kaybedilir?

Burada somut örnekler istiyorum, RTOSes ;-) için wikipedia girişine gittiğinizde aldığınız medya hype değil.


3
Bir RTOS'un neler sunduğunu size açık değilse, neden onlar için başvuru yazmak istiyorsunuz? Bir RTOS'un size fayda sağlayıp sağlamayacağı tamamen ne yapmaya çalıştığınıza bağlıdır. Bununla birlikte, koşmadan önce yürümeyi öğrenmelisin. Çıplak metal için program ve problemlerle karşılaşıp çözdükçe, faydaların ve dezavantajların ne olduğunu gerçekten öğreneceksiniz.
whatsisname

Teşekkürler @whatsisname (+1) - bu sağlam bir tavsiye ve muhtemelen sizi ele alacağım. Hala edilecek, onun sahte bir yandan pas sanmıyorum ilgilenen Onları ihtiyaç duymaktan ay / yıl bitti bile RTOSes sunduğunuzla. Sanırım tüm resmi önden 30.000 ft görüşte görmek istiyorum. Tekrar teşekkürler!
smeeb

Yanıtlar:


11

Mikrodenetleyici programları bir dizi oluşur görevler . Bilgisayar kontrollü bir teleskop montajı yapmak istediğinizi varsayalım. Görevler şöyle olacaktır:

  • USB seri arabelleğinden yeni bir bayt giriş alın.
  • Tam bir komut alıp almadığımızı kontrol edin.
  • Öyleyse, bu komutu yürütün.
  • Mevcut teleskop konumu için sensörleri okuyun.
  • Motorların bir sonraki adımını kontrol etmek için uygun çıkışı ayarlayın.

Bu, bir mikrodenetleyici için kullanacağınız bir şey için oldukça tipik bir görev kümesidir ve sonsuz bir döngü ile yönetilmesi oldukça kolaydır:

while(TRUE) {
  uint8_t input = readUsbBuffer();
  parseCommand(input);
  readSensors();
  setMotors();
}

Özellik eklemeye ve eklemeye devam ederseniz, nihayetinde aşağıdaki gibi soyutlamalar oluşturmak istediğiniz yaygın sorunlarla karşılaşmaya başlarsınız:

  • Arabellek taşıyor, bu nedenle görevin taşmadan önce diğer görevleri kesebildiğinden emin olmak istiyorsunuz.
  • Hiçbir şey gerekmediğinde uyuyarak pilden tasarruf etmek istersiniz.
  • Tüm görevlerin adil bir şekilde çekildiğinden emin olmak istiyorsunuz. Eğer readSensorsçok uzun sürüyor, bunu kesmek ve daha sonra geri gelmek isterler.
  • Bir görevi başkalarını etkilemeden sıfırlamak istiyorsunuz.
  • Bir görevdeki bellek sızıntısının veya başka bir hatanın diğer görevleri yerine getirmemesini istiyorsunuz.
  • Farklı görevlere farklı öncelikler verebilmek istiyorsunuz.
  • Güvenilmeyen bir görevi sandbox etmek istersiniz.
  • Görevleri farklı hızlarda yürütebilmek istiyorsunuz. Belki sensörleriniz saniyede sadece 10 kez okunabilir, ancak saniyede 100 kez bir motor adımı yürütmek istersiniz.

Bu öğelerin biri veya ikisi nispeten kolay bir şekilde elle işlenebilir. Bu tür sorunlardan yeterince sık sık bunları kütüphanelere genelleştirmeye başlayacaksanız, temel olarak bir RTOS'u yeniden icat ettiniz. Programınızın görev yönetimi yeterince karmaşıksa, kullanıma hazır bir RTOS kullanmasanız bile, sonunda kötü birini yeniden keşfedeceksiniz.

Ancak, benim deneyimime göre, bir RTOS istediğiniz çizgi çok mikroişlemci yerine bir mikroişlemci istediğiniz hatta çok yakın. Ürün yazılımınızın bu kadar karmaşık olmasını bekliyorsanız, mikroişlemci yolunu en baştan gitmek genellikle daha iyidir.


Bu mükemmel bir analiz ve benim için gerçekten netleştirdi. Söylediklerinize katılıyorum, ama @Atsby'nin cevabına daha fazla katılıyorum. Özellikle hedef kendi becerilerimi öğrenmek / geliştirmekse. Bir üretim sisteminde, muhtemelen bir COTS ürünü veya RTLinux ile daha iyi durumdadır, ancak bir şey yanlış gittiğinde bu üründe düşük düzeyde hata ayıklamak için, şahsen bu listede birçok kez yazan bir kod yazmam gerekirdi mümkün.
Sam Hammamy

7

ARM Cortex-M0 için kendi kooperatif çoklu iş parçacığı kütüphanemi yazdım.

Birkaç sayfa kod vardı ve ilk sürümünün yazılması ve hata ayıklanması bir günden uzun sürmedi.

Kendinizin en büyük avantajı, kodu bilmeniz ve RTOS'un desteklemeyebileceği yongalara taşıyabilmenizdir. Ayrıca, "A ve B özelliklerini aynı anda kullanmaya çalışacağım çökecek mi?" Kodu yazdığınız için cevabı biliyorsunuz.

Diş açma, bir RTOS'tan aldığınız ana şeydir ve kendinizi uygulamak için çok büyük bir şey değildir. Bir RTOS'un birçok özelliğine ihtiyacınız olması nadirdir. Ancak gereksinimlerinizi sıkarsanız ve bunu yaparsanız, bir RTOS kullanın.


Teşekkürler @Atsby! Bu cevap, Bare Metal hakkında daha fazla bilgi edinmeye zaman ayırmaya değer olup olmadığına karar vermeme gerçekten yardımcı oldu. Pi için çıplak metal bir GPIO kütüphanesine ne kadar yazdım ve şimdi bir veya iki adım daha ileri gitmenin zamanı geldiğini düşünüyorum. Teşekkürler!
Sam Hammamy
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.