Voici quelques idées et des idées:
Utiliser la ROM de manière plus créative.
Stocker tout ce que vous pouvez dans la ROM. Au lieu de calculer les choses, de les stocker look-up tables dans la ROM. (Assurez-vous que votre compilateur est sortie de look-up tables à la lecture seule de la section! Imprimer les adresses de mémoire lors de l'exécution à vérifier!) Magasin de votre vecteur d'interruption de la table dans la ROM. Bien sûr, faire quelques tests pour voir quelle est la fiabilité de votre ROM est par rapport à votre RAM.
Servez-vous de votre RAM pour la pile.
SEUs dans la pile sont probablement la source la plus probable d'un accident, parce que c'est là que les choses comme indice de variables, les variables relatives à l'état, les adresses de retour, et les pointeurs de diverses sortes, généralement en direct.
Mettre en œuvre la minuterie-tique et le minuteur de surveillance de routine.
Vous pouvez exécuter une vérification générale" routine chaque cycle d'horloge, ainsi que d'une surveillance de routine pour gérer le système de verrouillage vers le haut. Votre code principal pourrait aussi régulièrement incrémenter un compteur pour indiquer les progrès, et de la santé mentale-contrôle de routine pourrait s'assurer que cela a eu lieu.
Mettre en œuvre la correction d'erreur les codes dans le logiciel.
Vous pouvez ajouter de la redondance de vos données pour être en mesure de détecter et/ou corriger les erreurs. Cela va ajouter de temps de traitement, qui risque de laisser le processeur exposés à des rayonnements pendant un temps plus long, ce qui augmente les risques d'erreurs, de sorte que vous devez prendre en compte le compromis.
Rappelez-vous les caches.
Vérifiez la taille de vos caches CPU. Les données que vous avez consulté ou modifié récemment sera probablement à l'intérieur d'un cache. Je crois que vous pouvez désactiver certains au moins des caches (à une grande performance de coût); vous devez l'essayer pour voir comment sensibles les caches sont à SEUs. Si les caches sont plus résistants que la RAM, alors vous pourriez régulièrement lire et à re-écrire des données critiques pour s'assurer qu'elle reste dans le cache et apporter de la mémoire vive (RAM) en ligne.
Utilisation de la page de gestionnaires d'erreur intelligemment.
Si vous marquez une page de mémoire que n'est pas présent, le CPU sera question d'un défaut de page lorsque vous essayez d'y accéder. Vous pouvez créer une page-gestionnaire de défauts qui effectue une vérification avant l'entretien de la requête de lecture. (Systèmes d'exploitation pour PC utiliser ce connecter de manière transparente à charger les pages qui ont été échangés sur le disque.)
L'utilisation de langage d'assemblage pour des choses critiques (qui pourrait être tout).
Avec le langage d'assemblage, vous savez ce qui est dans les registres et qu'est-ce que dans la mémoire vive; vous savez quelles sont les particularités de RAM tables de la CPU est à l'aide, et vous pouvez concevoir les choses dans un rond-point façon de garder votre risque.
Utiliser objdump
de vraiment regarder les générées langage d'assemblage, et le code de chacune de vos routines.
Si vous utilisez un gros OS comme Linux, alors vous êtes d'avoir des ennuis; il y a juste tellement de complexité et donc beaucoup de choses à aller mal.
Rappelez-vous que c'est un jeu de probabilités.
Un intervenant a dit
Chaque routine de vous écrire pour attraper les erreurs seront soumises à défaut de lui-même à partir de la même cause.
Si cela est vrai, le risque d'erreurs dans le (dire) de 100 octets de code et les données nécessaires pour un contrôle de routine pour fonctionner correctement est beaucoup plus petite que les risques d'erreurs commises ailleurs. Si votre ROM est assez fiable et presque tout le code/données est en fait dans la ROM alors vos chances sont encore mieux.
L'utilisation du matériel redondant.
Utiliser 2 ou plus identiques les configurations des matériels avec un code identique. Si les résultats diffèrent, une réinitialisation doit être déclenchée. Avec 3 ou plusieurs appareils, vous pouvez utiliser un "vote" pour essayer d'identifier ce qui a été compromis.