다음은 몇 가지 생각과 아이디어입니다.
보다 창의적으로 ROM을 사용하십시오.
ROM에 가능한 모든 것을 저장하십시오. 계산하는 대신 룩업 테이블을 ROM에 저장하십시오. (컴파일러가 조회 테이블을 읽기 전용 섹션으로 출력하는지 확인하십시오! 런타임에 메모리 주소를 인쇄하여 확인하십시오!) 인터럽트 벡터 테이블을 ROM에 저장하십시오. 물론 ROM과 RAM이 얼마나 안정적인지 확인하기 위해 몇 가지 테스트를 실행하십시오.
스택에 가장 적합한 RAM을 사용하십시오.
스택의 SEU는 아마도 인덱스 변수, 상태 변수, 반환 주소 및 다양한 종류의 포인터와 같은 것들이 존재하기 때문에 충돌의 원인 일 가능성이 높습니다.
타이머 틱 및 워치 독 타이머 루틴을 구현하십시오.
시스템 잠금을 처리하기위한 워치 독 루틴뿐만 아니라 타이머 틱마다 "위생 검사"루틴을 실행할 수 있습니다. 메인 코드는 정기적으로 카운터를 증가시켜 진행 상황을 표시 할 수 있으며, 온 전성 검사 루틴이이를 수행 할 수 있습니다.
오류 수정 코드 구현 소프트웨어를.
데이터에 중복성을 추가하여 오류를 감지 및 / 또는 수정할 수 있습니다. 이로 인해 처리 시간이 추가되어 프로세서가 방사선에 더 오랫동안 노출 될 수 있으므로 오류 가능성이 높아 지므로 절충을 고려해야합니다.
캐시를 기억하십시오.
CPU 캐시의 크기를 확인하십시오. 최근에 액세스하거나 수정 한 데이터는 캐시 내에있을 수 있습니다. 나는 적어도 일부 캐시를 비활성화 할 수 있다고 생각합니다 (성능 비용이 많이 듭니다). 캐시가 SEU에 얼마나 취약한 지 확인하려면이를 시도해야합니다. 캐시가 RAM보다 어려운 경우 중요한 데이터를 정기적으로 읽고 다시 쓰기하여 캐시에 유지되고 RAM을 다시 온라인 상태로 만들 수 있습니다.
페이지 오류 처리기를 영리하게 사용하십시오.
메모리 페이지를 존재하지 않는 것으로 표시하면 CPU는 액세스하려고 할 때 페이지 결함을 발행합니다. 읽기 요청을 처리하기 전에 몇 가지 검사를 수행하는 페이지 오류 처리기를 만들 수 있습니다. (PC 운영 체제는이를 사용하여 디스크로 스왑 된 페이지를 투명하게로드합니다.)
중요한 것 (모든 것이 될 수 있음)에 어셈블리 언어를 사용하십시오.
어셈블리 언어를 사용하면 레지스터의 내용과 RAM의 내용 을 알 수 있습니다 . 당신 은 알고있다CPU가 사용하는 특수 RAM 테이블 있으며 위험을 줄이기 위해 로터리 방식으로 물건을 설계 할 수 있습니다.
사용하다 objdump
사실에 어셈블리 생성 언어에서보고, 루틴 각각 차지하는 코드 해결.
Linux와 같은 큰 OS를 사용하는 경우 문제가 있습니다. 너무 많은 복잡성과 잘못 될 많은 것들이 있습니다.
그것은 확률 게임이라는 것을 기억하십시오.
한 논평자는 말했다
오류를 포착하기 위해 작성하는 모든 루틴은 동일한 원인으로 인해 실패 할 수 있습니다.
이것이 사실이지만, 검사 루틴이 올바르게 작동하는 데 필요한 100 바이트 코드 및 데이터의 오류 가능성은 다른 곳의 오류 가능성보다 훨씬 작습니다. ROM이 꽤 안정적이며 거의 모든 코드 / 데이터가 실제로 ROM에 있으면 확률이 훨씬 좋습니다.
중복 하드웨어를 사용하십시오.
동일한 코드로 2 개 이상의 동일한 하드웨어 설정을 사용하십시오. 결과가 다르면 재설정이 트리거되어야합니다. 3 개 이상의 장치를 사용하면 "투표"시스템을 사용하여 손상된 장치를 식별 할 수 있습니다.