Ось кілька думок та ідей:
Використовуйте ROM більш творчо.
Зберігайте все, що можна, в ROM. Замість обчислення речей зберігайте таблиці пошуку в ПЗУ. (Переконайтесь, що ваш компілятор виводить ваші таблиці перегляду в розділ лише для читання! Роздрукуйте адреси пам’яті під час виконання, щоб перевірити!) Зберігайте свою векторну таблицю переривань у ПЗУ. Звичайно, проведіть кілька тестів, щоб побачити, наскільки надійний ваш ROM в порівнянні з вашою ОЗУ.
Використовуйте найкращу оперативну пам’ять для стека.
SEU в стеці - це, мабуть, найбільш вірогідне джерело збоїв, оскільки саме там зазвичай проживають такі речі, як індексні змінні, змінні стану, зворотні адреси та вказівники різних типів.
Запровадьте таймер-контрольні та контрольні функції таймера.
Ви можете запустити процедуру "перевірки правильності" кожного галочки таймеру, а також розпорядження сторожового собаки для роботи із системою блокування. Ваш основний код також може періодично збільшувати лічильник, щоб вказувати на прогрес, і розпорядок перевірки правильності може забезпечити це.
Впроваджуйте коди на виправлення помилок у програмному забезпеченні.
Ви можете додати зайвих даних до своїх даних, щоб мати можливість виявляти та / або виправляти помилки. Це додасть часу на обробку, потенційно залишаючи процесор, що піддається впливу радіації на довший час, тим самим збільшуючи ймовірність помилок, тому потрібно враховувати компроміс.
Запам’ятайте кеші.
Перевірте розміри кеш-процесорів. Дані, до яких ви отримали доступ чи змінили нещодавно, ймовірно, будуть знаходитися в кеші. Я вірю, що ви можете вимкнути принаймні деякі кеші (з великою ціною продуктивності); Ви повинні спробувати це, щоб побачити, наскільки кеші сприйнятливі до SEU. Якщо кеші складніші за оперативну пам’ять, ви можете регулярно читати та переписувати критичні дані, щоб переконатися, що вони залишаються в кеші та повертають оперативну пам’ять у відповідність.
Використовуйте розумно оброблювачі сторінки.
Якщо ви позначаєте сторінку пам'яті як такою, що не є, CPU видасть помилку сторінки під час спроби доступу до неї. Ви можете створити обробник помилок сторінки, який здійснить деяку перевірку перед обслуговуванням запиту на читання. (Операційні системи ПК використовують це для прозорого завантаження сторінок, які були замінені на диск.)
Використовуйте мову монтажу для критичних речей (що може бути все).
З мовою складання ви знаєте, що є в регістрах, а що в оперативній пам’яті; ви знаєте, які спеціальні таблиці оперативної пам’яті використовує процесор, і ви можете спроектувати речі навколо, щоб уникнути ризику.
Використовуйте, objdump
щоб насправді переглянути сформовану мову складання, і розробити, скільки коду займає кожна з ваших процедур.
Якщо ви використовуєте велику ОС на зразок Linux, то ви просите проблем; просто так багато складностей і стільки речей, щоб піти не так.
Пам’ятайте, це гра ймовірностей.
- сказав коментатор
Кожна рутина, яку ви пишете, щоб виправити помилки, підлягає невдачі з тієї ж причини.
Хоча це правда, шанси помилок у (скажімо) 100 байтах коду та даних, необхідних для правильної роботи контрольної програми, значно менші, ніж шанси помилок в інших місцях. Якщо ваш ROM є досить надійним і майже весь код / дані є насправді в ROM, то шанси ще краще.
Використовуйте надмірне обладнання.
Використовуйте 2 або більше однакових налаштувань обладнання з однаковим кодом. Якщо результати відрізняються, слід здійснити скидання. За допомогою трьох або більше пристроїв ви можете використовувати систему "голосування", щоб спробувати визначити, який з них був порушений.