Kod, ilk lander'ları olan MPF'lerin ( Sojourner ) temel alan MER ( Ruh ve Fırsat ) koduna dayanıyor . BAE ve VxWorks işletim sistemi tarafından üretilen bir RA50 işlemcide çalışan 3,5 milyon C satırı (çoğu otomatikleştirilmiş) . Bir milyondan fazla satır el kodlandı.
Kod, her biri farklı bir işlev gerçekleştiren 150 ayrı modül olarak uygulanır. Yüksek derecede bağlı modüller, içerdikleri modülleri soyutlayan ve "belirli bir işlev, aktivite veya davranış belirten" bileşenler halinde düzenlenir. Bu bileşenler ayrıca katmanlar halinde düzenlenir ve "en fazla 10 üst düzey bileşen" yoktur.
Kaynak: tarafından Keynote konuşma Benjamin Cichy de Uzay Uçuş Yazılımı (FSW-10) üzerinde 2010 Workshop , slaytlar, ses ve video (misyon genel, slayt 80 mimarisi tartışması ile başlar).
Hacker News’dan biri "C kodunun çoğunun otomatik olarak üretildiğinden emin değil. Ne?" Diye sordu.
% 100 emin değilim, muhtemelen o yıl içinde ayrı bir sunum veya otomatik üretim süreçlerini tanımlayan farklı bir yıl olmasına rağmen. FSW-11 konferansında genel olarak popüler bir konu olduğunu biliyorum.
Simulink bir olasılıktır. Makine mühendisleri arasında popüler olan bir MATLAB bileşenidir ve bu nedenle çoğu navigasyon ve kontrol mühendisleri ve kodladıklarını düşünmeden şeyleri 'kodlamalarına ve simüle etmelerine izin verir.
Model tabanlı programlama kesinlikle endüstrinin yavaşça farkına vardığı bir şeydir, ancak JPL'de ne kadar başarılı olduğunu bilmiyorum veya proje başladığında kullanmayı tercih ederlerdi.
Üçüncü ve en muhtemel olasılık iletişim kodu içindir. Tüm uzay sistemlerinde, uçuş yazılımına yer yazılımından komutlar göndermeniz ve uçuş yazılımından telemetri almanız ve yer yazılımı ile işlemeniz gerekir. Her komut / telemetri paketi, heterojen bir veri yapısıdır ve her iki tarafın da aynı paket tanımından çalıştığı ve paketi bir tarafta doğru şekilde biçimlendirildiği ve diğer tarafta ayrıştırıldığı şekilde biçimlendirmesi gerekir. Bu, veri türü, boyut ve endianness dahil olmak üzere pek çok şeyin doğru yapılmasını içerir (ikincisi genellikle küresel bir şey olsa da, farklı endianness ile birden fazla işlemciniz olabilir).
Ama bu sadece yüzey. Günlük kaydı, komut / telemetri doğrulaması, limit kontrolü ve hata işleme gibi şeyleri işlemek için her iki tarafta da çok sayıda tekrarlayan kod gerekir. Ve sonra daha sofistike şeyler yapabilirsiniz. Bir donanım kayıt defteri değeri ayarlama komutunuz olduğunu ve bu değerin telemetride belirli bir pakette geri gönderildiğini söyleyin. Bu kayıt değeri ayarlandığında, nihayetinde telemetri değişikliği yansıtacak şekilde değiştiğinden emin olmak için bu telemetri noktasını izleyen zemin yazılımı oluşturabilirsiniz. Ve elbette, bazı telemetri noktaları diğerlerinden (örneğin ana veri yolu akımı) diğerlerinden daha önemlidir ve uçuş tarafında ekstra kopyalama ve zemin tarafında veri kopmasını içeren çoklu paketlerde düşmek üzere tasarlanmıştır.
Bütün bunlarla, (bence) bir statik metin dosyası (XML, CSV veya bazı DSL / what-you-you) bir koleksiyon yazmak, bunları bir Perl / Python betiği üzerinden çalıştırmak ve presto! Kod!
JPL'de çalışmıyorum, bu nedenle videoda olmayan herhangi bir ayrıntıyı bir istisna dışında sağlayamıyorum. Otomatikleştirilmiş C kodunun Python komut dosyaları tarafından yazıldığını ve bir projedeki otomatik kodlamanın FSW liderinin kim olduğuna bağlı olarak büyük ölçüde değiştiğini duydum.