화성 호기심 로버가 성공적으로 착륙했습니다 및 프로모션 비디오 '공포의 칠분 "하나의 코드 50 개 라인 인에 대한이 자랑. 복잡한 문제입니다. 의심 할 여지가 없습니다. 그러나 그것은 많은 코드이며, 그 뒤에는 상당히 큰 프로그래밍 노력이있었습니다. 이 프로젝트에 대해 아는 사람이 있습니까? 나는 그것이 일종의 임베디드 C라고 상상할 수 있습니다.
화성 호기심 로버가 성공적으로 착륙했습니다 및 프로모션 비디오 '공포의 칠분 "하나의 코드 50 개 라인 인에 대한이 자랑. 복잡한 문제입니다. 의심 할 여지가 없습니다. 그러나 그것은 많은 코드이며, 그 뒤에는 상당히 큰 프로그래밍 노력이있었습니다. 이 프로젝트에 대해 아는 사람이 있습니까? 나는 그것이 일종의 임베디드 C라고 상상할 수 있습니다.
답변:
BAE에서 제조 한 RAD750 프로세서 에서 250 만 라인의 C 를 실행하고 있습니다. JPL은 좀 더 정보를 가지고 있지만 많은 세부 사항이 공개되지 않은 의심 할. 테스트 스크립트는 Python으로 작성된 것으로 보입니다.
기본 운영 체제는 Wind River의 VxWorks RTOS 입니다. 문제의 RTOS 는 C, C ++, Ada 또는 Java로 프로그래밍 할 수 있습니다. 그러나 C 및 C ++ 만 OS에 표준이며 Ada 및 Java는 확장에서 지원됩니다. 윈드 리버는 VxWorks의 방법 과 이유에 대해 많은 세부 정보를 제공합니다 .
기본 칩셋은 거의 터무니없이 강력 합니다. 사양은 처음에는별로 좋아 보이지 않을 수도 있지만 15 년마다 하나의 "블루 스크린"만 가질 수 있습니다. 명심하십시오, 이것은 인간을 여러 번 죽이는 방사선으로 인한 충격을 받고 있습니다. 우주에서는 견고성이 속도보다 뛰어납니다. 물론 견고성은 비용이 많이 듭니다. 이 경우 멋진 $ 200,000 ~ $ 500,000입니다.
얼랑 프로그래머는 이야기 호기심에 컴퓨터와 코드베이스의 기능에 대해.
이 코드는 첫 번째 착륙선 인 MPF ( Sojourner )를 기반으로 한 MER ( Spirit and Opportunity ) 의 코드를 기반으로합니다 . BAE 와 VxWorks 운영 체제 에서 제조 한 RA50 프로세서에서 실행되는 350 만 라인의 C (대부분 자동 생성) 입니다. 백만 줄 이상이 직접 코딩되었습니다.
코드는 각각 다른 기능을 수행하는 150 개의 개별 모듈로 구현됩니다. 고도로 결합 된 모듈은 포함 된 모듈을 추상화하고 "특정 기능, 활동 또는 동작을 지정"하는 구성 요소로 구성됩니다. 이러한 구성 요소는 추가 계층으로 구성되며 "최상위 구성 요소는 10 개 이하"입니다.
출처 : 2010 년 FSW-10 (Spacecraft Flight Software) 워크샵 , 슬라이드, 오디오 및 비디오 워크숍 에서 Benjamin Cichy의 기조 연설 (미션 개요, 슬라이드 80의 아키텍처 토론으로 시작).
Hacker News의 누군가가 "대부분의 C 코드가 자동으로 생성된다는 것이 무엇인지 확실하지 않습니다. 무엇으로부터?"
그 해 또는 다른 해에 자동 생성 프로세스를 설명하는 별도의 프레젠테이션이있을지라도 100 % 확신 할 수는 없습니다. 나는 그것이 FSW-11 컨퍼런스에서 일반적으로 인기있는 주제라는 것을 알고 있습니다.
Simulink 가 가능합니다. 기계 엔지니어들에게 인기있는 MATLAB 구성 요소이므로 대부분의 내비게이션 및 제어 엔지니어이므로 코딩을 생각하지 않고 사물을 '코딩'하고 시뮬레이션 할 수 있습니다.
모델 기반 프로그래밍은 업계에서 천천히 인식하고 있지만 JPL 에서 얼마나 잘 파악하고 있는지 또는 프로젝트가 시작될 때 사용하기로 선택 했는지는 잘 모르겠습니다 .
세 번째로 가능성이 높은 통신 코드입니다. 모든 우주 시스템에서는 지상 소프트웨어에서 비행 소프트웨어로 명령을 전송하고 비행 소프트웨어에서 원격 측정을 수신하여 지상 소프트웨어로 처리해야합니다. 각 명령 / 텔레 메 트리 패킷은 이기종 데이터 구조이며, 양쪽이 정확히 동일한 패킷 정의에서 작동하고 패킷이 한 쪽에서 올바르게 형식화되고 다른 쪽에서 구문 분석되도록 패킷을 형식화해야합니다. 여기에는 데이터 유형, 크기 및 엔디안 (endianness)을 포함하여 많은 것들을 올바르게 얻는 것이 포함됩니다 (후자는 일반적으로 전역 적이지만 엔디안이 다른 여러 프로세서를 내장 할 수 있음).
그러나 그것은 단지 표면 일뿐입니다. 로깅, 명령 / 원격 분석 유효성 검사, 한계 검사 및 오류 처리와 같은 작업을 처리하려면 양쪽에 많은 반복 코드가 필요합니다. 그리고 더 정교한 일을 할 수 있습니다. 하드웨어 레지스터 값을 설정하라는 명령이 있고 해당 값이 특정 패킷의 원격 측정으로 다시 전송되었다고 가정하십시오. 이 레지스터 값이 설정 될 때 원격 측정이 변경 사항을 반영하도록 변경되도록 원격 측정 지점을 모니터링하는 접지 소프트웨어를 생성 할 수 있습니다. 물론 일부 원격 측정 지점은 다른 원격 측정 지점보다 중요하며 (예 : 주 버스 전류) 여러 패킷으로 다운되도록 지정됩니다. 여기에는 비행 측의 추가 복사와지면 측의 데이터 중복 제거가 포함됩니다.
이 모든 것, 정적 텍스트 파일 모음 (XML, CSV 또는 일부 DSL / What-have-you)을 작성하고 Perl / Python 스크립트를 통해 실행하는 것이 훨씬 쉽습니다 (제 생각에)! 암호!
JPL에서 일하지 않으므로 비디오에 포함되지 않은 세부 정보는 예외로 제공 할 수 없습니다. 자동 생성 된 C 코드는 Python 스크립트로 작성되며 프로젝트의 자동 코딩 양은 FSW 리더가 누구인지에 따라 크게 다릅니다.