कोड MER ( आत्मा और अवसर ) पर आधारित है, जो कि उनके पहले लैंडर, MPF ( सोजॉर्नर ) पर आधारित थे । यह BAE और VxWorks ऑपरेटिंग सिस्टम द्वारा निर्मित RA50 प्रोसेसर पर चलने वाली, C की 3.5 मिलियन लाइनें (इसका ऑटोगेन्जेनेटेड) है। एक लाख से अधिक लाइनों को हाथ से कोड किया गया था।
कोड को 150 अलग-अलग मॉड्यूल के रूप में लागू किया जाता है, प्रत्येक एक अलग फ़ंक्शन करता है। अत्यधिक युग्मित मॉड्यूल उन घटकों में व्यवस्थित होते हैं जो उन मॉड्यूलों को अमूर्त करते हैं, और "या तो एक विशिष्ट फ़ंक्शन, गतिविधि या व्यवहार निर्दिष्ट करते हैं।" इन घटकों को आगे परतों में व्यवस्थित किया जाता है, और "10 से अधिक शीर्ष-स्तरीय घटक नहीं हैं।"
स्रोत: स्पेसक्राफ्ट फ़्लाइट सॉफ़्टवेयर (FSW-10) , स्लाइड्स, ऑडियो और वीडियो पर 2010 की कार्यशाला में बेंजामिन सिची द्वारा मुख्य चर्चा , (मिशन अवलोकन के साथ शुरू, स्लाइड 80 पर वास्तुकला चर्चा)।
हैकर न्यूज पर किसी ने पूछा "निश्चित रूप से इसका मतलब यह नहीं है कि अधिकांश सी कोड ऑटो उत्पन्न होता है। किससे?"
मुझे 100% यकीन नहीं है, हालांकि उस वर्ष या एक अलग वर्ष में एक अलग प्रस्तुति है जो उनकी ऑटो-पीढ़ी प्रक्रिया का वर्णन करती है। मुझे पता है कि FSW-11 सम्मेलन में यह सामान्य रूप से एक लोकप्रिय विषय था।
सिमुलिंक एक संभावना है। यह मैकेनिकल इंजीनियरों के बीच एक MATLAB घटक लोकप्रिय है, और इसलिए अधिकांश नेविगेशन और नियंत्रण इंजीनियर हैं, और उन्हें 'कोड' करने की अनुमति देता है और चीजों को बिना कोडित किए अनुकरण करता है।
मॉडल आधारित प्रोग्रामिंग निश्चित रूप से एक ऐसी चीज है जो उद्योग धीरे-धीरे जागरूक हो रहा है, लेकिन मुझे नहीं पता कि यह JPL पर कितना अच्छा है या यदि परियोजना शुरू होने पर उन्होंने इसका उपयोग करने के लिए चुना होगा।
तीसरी और सबसे अधिक संभावना संचार कोड के लिए है। सभी अंतरिक्ष प्रणालियों के साथ, आपको ग्राउंड सॉफ़्टवेयर से फ़्लाइट सॉफ़्टवेयर को कमांड भेजने और फ़्लाइट सॉफ़्टवेयर से टेलीमेट्री प्राप्त करने और इसे ग्राउंड सॉफ़्टवेयर के साथ संसाधित करने की आवश्यकता है। प्रत्येक कमांड / टेलीमेट्री पैकेट एक विषम डेटा संरचना है, और यह आवश्यक है कि दोनों पक्ष सटीक एक ही पैकेट परिभाषा से काम कर रहे हैं, और पैकेट को प्रारूपित करें ताकि यह एक तरफ सही ढंग से स्वरूपित हो, और दूसरी तरफ पार्स हो। इसमें डेटा प्रकार, आकार और एंडियननेस (हालांकि बाद आम तौर पर एक वैश्विक चीज है, सहित कई सही चीजें प्राप्त करना शामिल है; आपके पास अलग-अलग एंडियननेस के साथ कई प्रोसेसर हो सकते हैं)।
लेकिन वह सिर्फ सतह है। लॉगिंग, कमांड / टेलीमेट्री वेलिडेशन, लिमिट चेकिंग और एरर हैंडलिंग जैसी चीजों को संभालने के लिए आपको दोनों तरफ बहुत सारे दोहराए गए कोड की आवश्यकता होती है। और फिर आप अधिक परिष्कृत चीजें कर सकते हैं। मान लें कि आपके पास हार्डवेयर रजिस्टर मान सेट करने के लिए एक कमांड है, और उस मान को टेलीमेट्री में एक विशेष पैकेट में वापस भेज दिया जाता है। आप ग्राउंड सॉफ़्टवेयर उत्पन्न कर सकते हैं जो उस टेलीमेट्री को मॉनिटर करता है ताकि यह सुनिश्चित किया जा सके कि जब यह रजिस्टर वैल्यू सेट हो, तो अंततः टेलीमेट्री परिवर्तन को प्रतिबिंबित करे। और निश्चित रूप से, कुछ टेलीमेट्री पॉइंट दूसरों की तुलना में अधिक महत्वपूर्ण हैं (उदाहरण के लिए मुख्य बस चालू) और कई पैकेटों में नीचे आने के लिए नामित हैं, जिसमें फ्लाइट की तरफ अतिरिक्त कॉपी करना और जमीन पर डेटा डी-डुप्लिकेटेशन शामिल है।
उस सब के साथ, यह बहुत आसान है (मेरी राय में) स्थिर पाठ फ़ाइलों का एक संग्रह (एक्सएमएल, सीएसवी, या कुछ डीएसएल / व्हाट्स-यू-यू में) लिखने के लिए, उन्हें एक पर्ल / पायथन स्क्रिप्ट, और प्रेस्टो के माध्यम से चलाएं! कोड!
मैं JPL में काम नहीं करता, इसलिए मैं एक भी अपवाद नहीं दे सकता जो वीडियो में नहीं है, एक अपवाद के साथ। मैंने सुना है कि ऑटोजेनरेटेड सी कोड पायथन लिपियों द्वारा लिखा गया है, और एक प्रोजेक्ट में ऑटोकोडिंग की मात्रा इस बात पर निर्भर करती है कि एफएसडब्ल्यू लीड कौन है।