質問: 高放射能環境で使用するためのアプリケーションのコンパイル 私たちは 電離放射線 で砲撃された環境の中で遮蔽された装置に配備された組み込みc/c++アプリケーションをコンパイルしています。 armではgccとクロスコンパイルを使用しています。デプロイされると、アプリケーションは誤ったデータを生成し、思ったよりも頻繁にクラッシュします。ハードウェアはこの環境用に設計されており、私たちのアプリケーションはこのプラットフォーム上で数年間実行されています。コードに変更を加えることはできますか、それとも ソフトエラー および シングルイベントアップセット によって引き起こされるメモリ破損を特定/修正するために行うことができるコンパイル時の改善はありますか?長期実行アプリケーションに対するソフトエラーの悪影響を減らすことに成功した開発者はいますか?
回答: あなたは放射線環境の外にマスターを持つ3台以上のスレーブマシンが欲しいです。すべてのi/oは投票および/または再試行メカニズムを含むマスターを通過します。スレーブはそれぞれハードウェアウォッチドッグを持っている必要があり、それらをぶつけるための呼び出しはcrcなどで囲まれる必要があります。バンピングはマスターが制御する必要があるため、マスターとの接続が失われると、数秒以内に再起動します。このソリューションの利点の1つは、スレーブと同じapiをマスターに使用できるため、冗長性が透過的な機能になることです。 編集: コメントから、「crcの考え方」を明確にする必要があると感じています。あなた自身のウォッチドッグをぶつけているスレーブの可能性は、あなたがcrcでバンプを囲むか、マスターからのランダムデータのダイジェストチェックをするならば、ゼロに近いです。このランダムデータは、精査中のスレーブが他のスレーブと整列している場合にのみマスターから送信されます。ランダムデータとcrc /ダイジェストは各バンプの後すぐにクリアされます。マスター/スレーブバンプ周波数は、 double / watchdogのタイムアウトを超えている必要があります。マスタから送信されたデータは毎回一意に生成されます。