Mã này dựa trên mã của MER ( Tinh thần và Cơ hội ), được dựa trên tàu đổ bộ đầu tiên của họ, MPF ( Sojourner ). Đó là 3,5 triệu dòng C (phần lớn được tự động hóa), chạy trên bộ xử lý RA50 được sản xuất bởi BAE và hệ điều hành VxWorks . Hơn một triệu dòng đã được mã hóa bằng tay.
Mã được triển khai dưới dạng 150 mô-đun riêng biệt, mỗi mô-đun thực hiện một chức năng khác nhau. Các mô-đun kết hợp cao được tổ chức thành các thành phần trừu tượng hóa các mô-đun mà chúng chứa và "chỉ định một chức năng, hoạt động hoặc hành vi cụ thể". Các thành phần này được tổ chức thành các lớp và có "không quá 10 thành phần cấp cao nhất".
Nguồn: Bài phát biểu quan trọng của Benjamin Cichy tại Hội thảo về Phần mềm Chuyến bay Tàu vũ trụ (FSW-10) năm 2010 , các slide, âm thanh và video (bắt đầu với tổng quan về nhiệm vụ, thảo luận kiến trúc tại slide 80).
Một người nào đó trên Hacker News đã hỏi "Không chắc điều gì có nghĩa là hầu hết mã C được tạo tự động. Từ cái gì?"
Tôi không chắc chắn 100%, mặc dù có thể có một bài thuyết trình riêng trong năm đó hoặc một năm khác mô tả quá trình tạo tự động của họ. Tôi biết rằng đó là một chủ đề phổ biến nói chung tại hội nghị FSW-11.
Simulink là một khả năng. Đây là một thành phần MATLAB phổ biến trong các kỹ sư cơ khí, và do đó, hầu hết các kỹ sư điều hướng & điều khiển, và cho phép họ 'mã hóa' và mô phỏng mọi thứ mà không nghĩ rằng họ đang mã hóa.
Lập trình dựa trên mô hình chắc chắn là điều mà ngành công nghiệp đang dần nhận thức được, nhưng tôi không biết nó bắt kịp như thế nào tại JPL hoặc liệu họ có chọn sử dụng nó khi dự án bắt đầu hay không.
Khả năng thứ ba và rất có thể là cho mã truyền thông. Với tất cả các hệ thống không gian, bạn cần gửi lệnh đến phần mềm máy bay từ phần mềm mặt đất và nhận từ xa từ phần mềm chuyến bay và xử lý nó bằng phần mềm mặt đất. Mỗi gói lệnh / từ xa là một cấu trúc dữ liệu không đồng nhất và cần thiết là cả hai bên đều làm việc từ cùng một định nghĩa gói chính xác và định dạng gói để nó được định dạng chính xác ở một bên và được phân tích cú pháp ở phía bên kia. Điều này liên quan đến việc có được rất nhiều thứ đúng, bao gồm loại dữ liệu, kích thước và độ bền (mặc dù cái sau thường là một thứ toàn cầu; bạn có thể có nhiều bộ xử lý trên tàu với độ bền khác nhau).
Nhưng đó chỉ là bề mặt. Bạn cần rất nhiều mã lặp đi lặp lại ở cả hai bên để xử lý những việc như ghi nhật ký, xác thực lệnh / từ xa, kiểm tra giới hạn và xử lý lỗi. Và sau đó bạn có thể làm những điều tinh vi hơn. Giả sử bạn có một lệnh để đặt giá trị thanh ghi phần cứng và giá trị đó được gửi lại từ xa trong một gói cụ thể. Bạn có thể tạo phần mềm mặt đất theo dõi điểm từ xa đó để đảm bảo rằng khi giá trị đăng ký này được đặt, cuối cùng thì từ xa sẽ thay đổi để phản ánh sự thay đổi. Và tất nhiên, một số điểm từ xa quan trọng hơn các điểm khác (ví dụ: dòng xe buýt chính) và được chỉ định để đi xuống trong nhiều gói, bao gồm sao chép thêm ở phía chuyến bay và sao chép dữ liệu ở phía mặt đất.
Với tất cả những điều đó, theo ý kiến của tôi, việc viết một tập hợp các tệp văn bản tĩnh (bằng XML, CSV hoặc một số DSL / những gì bạn có) sẽ dễ dàng hơn nhiều, chạy chúng thông qua tập lệnh Perl / Python và uy tín! Mã!
Tôi không làm việc tại JPL, vì vậy tôi không thể cung cấp bất kỳ chi tiết nào không có trong video, với một ngoại lệ. Tôi đã nghe nói rằng mã C được tạo tự động được viết bởi các tập lệnh Python và số lượng tự động mã hóa trong một dự án thay đổi rất nhiều tùy thuộc vào người dẫn đầu của FSW.