Berikut ini beberapa pemikiran dan ide:
Gunakan ROM lebih kreatif.
Simpan apa pun yang Anda bisa di ROM. Alih-alih menghitung, simpan tabel pencarian di ROM. (Pastikan kompiler Anda mengeluarkan tabel pencarian Anda ke bagian hanya baca! Cetak alamat memori saat runtime untuk memeriksa!) Simpan tabel vektor interupsi Anda di ROM. Tentu saja, jalankan beberapa tes untuk melihat seberapa andal ROM Anda dibandingkan dengan RAM Anda.
Gunakan RAM terbaik Anda untuk tumpukan.
SEU dalam stack mungkin merupakan sumber crash yang paling mungkin, karena di situlah hal-hal seperti variabel indeks, variabel status, alamat pengirim, dan pointer dari berbagai jenis biasanya hidup.
Terapkan timer-tick dan rutinitas timer watchdog.
Anda dapat menjalankan rutinitas "pemeriksaan kewarasan" setiap tanda centang waktu, serta rutin pengawas untuk menangani penguncian sistem. Kode utama Anda juga dapat secara bertahap menambah penghitung untuk menunjukkan kemajuan, dan rutinitas pemeriksaan kewarasan dapat memastikan ini telah terjadi.
Menerapkan kode koreksi kesalahan dalam perangkat lunak.
Anda dapat menambahkan redundansi ke data Anda untuk dapat mendeteksi dan / atau memperbaiki kesalahan. Ini akan menambah waktu pemrosesan, berpotensi membuat prosesor terkena radiasi untuk waktu yang lebih lama, sehingga meningkatkan kemungkinan kesalahan, jadi Anda harus mempertimbangkan pertukarannya.
Ingat cache.
Periksa ukuran cache CPU Anda. Data yang telah Anda akses atau modifikasi baru-baru ini mungkin akan berada dalam cache. Saya percaya Anda dapat menonaktifkan setidaknya beberapa cache (dengan biaya kinerja besar); Anda harus mencoba ini untuk melihat seberapa rentan cache terhadap SEU. Jika cache lebih sulit daripada RAM maka Anda dapat secara teratur membaca dan menulis ulang data penting untuk memastikannya tetap dalam cache dan membawa RAM kembali ke jalur.
Gunakan penangan kesalahan halaman dengan cerdik.
Jika Anda menandai halaman memori sebagai tidak ada, CPU akan mengeluarkan kesalahan halaman ketika Anda mencoba mengaksesnya. Anda dapat membuat penangan kesalahan halaman yang melakukan beberapa pengecekan sebelum melayani permintaan baca. (Sistem operasi PC menggunakan ini untuk memuat halaman secara transparan yang telah ditukar dengan disk.)
Gunakan bahasa rakitan untuk hal-hal penting (yang bisa menjadi segalanya).
Dengan bahasa assembly, Anda tahu apa yang ada di register dan apa yang ada di RAM; kamu tahu tabel RAM khusus apa yang digunakan CPU, dan Anda dapat mendesain berbagai hal secara tidak langsung agar risiko Anda tetap rendah.
Menggunakan objdump
untuk benar-benar melihat bahasa assembly yang dihasilkan, dan cari tahu berapa banyak kode yang digunakan setiap rutinitas Anda.
Jika Anda menggunakan OS besar seperti Linux maka Anda meminta masalah; ada begitu banyak kerumitan dan banyak hal yang salah.
Ingat itu adalah permainan probabilitas.
Seorang komentator berkata
Setiap rutin yang Anda tulis untuk menangkap kesalahan akan mengalami kegagalan dari penyebab yang sama.
Meskipun ini benar, kemungkinan kesalahan dalam (katakanlah) 100 byte kode dan data yang diperlukan untuk pemeriksaan rutin agar berfungsi dengan benar jauh lebih kecil daripada kemungkinan kesalahan di tempat lain. Jika ROM Anda cukup andal dan hampir semua kode / data sebenarnya dalam ROM maka peluang Anda bahkan lebih baik.
Gunakan perangkat keras yang berlebihan.
Gunakan 2 atau lebih pengaturan perangkat keras yang identik dengan kode yang sama. Jika hasilnya berbeda, reset harus dipicu. Dengan 3 perangkat atau lebih, Anda dapat menggunakan sistem "memilih" untuk mencoba mengidentifikasi mana yang telah dikompromikan.