Dưới đây là một số suy nghĩ và ý tưởng:
Sử dụng ROM sáng tạo hơn.
Lưu trữ bất cứ điều gì bạn có thể trong ROM. Thay vì tính toán mọi thứ, hãy lưu trữ các bảng tra cứu trong ROM. (Hãy chắc chắn rằng trình biên dịch của bạn đang xuất các bảng tra cứu của bạn sang phần chỉ đọc! In ra các địa chỉ bộ nhớ trong thời gian chạy để kiểm tra!) Lưu bảng vectơ ngắt của bạn vào ROM. Tất nhiên, hãy chạy một số thử nghiệm để xem ROM của bạn đáng tin cậy như thế nào so với RAM của bạn.
Sử dụng RAM tốt nhất của bạn cho ngăn xếp.
Các SEU trong ngăn xếp có lẽ là nguồn có khả năng xảy ra sự cố nhất, bởi vì đó là nơi những thứ như biến chỉ số, biến trạng thái, địa chỉ trả về và con trỏ thuộc nhiều loại khác nhau thường sống.
Thực hiện thói quen hẹn giờ tick-tick và watchdog.
Bạn có thể chạy thói quen "kiểm tra vệ sinh" mỗi lần bấm giờ, cũng như thói quen theo dõi để xử lý việc khóa hệ thống. Mã chính của bạn cũng có thể tăng định kỳ một bộ đếm để chỉ ra tiến trình và thói quen kiểm tra độ tỉnh táo có thể đảm bảo điều này đã xảy ra.
Thực hiện sửa lỗi mã trong phần mềm.
Bạn có thể thêm dự phòng vào dữ liệu của mình để có thể phát hiện và / hoặc sửa lỗi. Điều này sẽ thêm thời gian xử lý, có khả năng khiến bộ xử lý tiếp xúc với bức xạ trong thời gian dài hơn, do đó làm tăng khả năng xảy ra lỗi, do đó bạn phải xem xét đánh đổi.
Nhớ bộ nhớ cache.
Kiểm tra kích thước bộ nhớ CPU của bạn. Dữ liệu mà bạn đã truy cập hoặc sửa đổi gần đây có thể sẽ nằm trong bộ đệm. Tôi tin rằng bạn có thể vô hiệu hóa ít nhất một số bộ nhớ cache (với chi phí hiệu năng lớn); bạn nên thử điều này để xem mức độ nhạy cảm của bộ nhớ cache đối với SEU. Nếu bộ nhớ cache cứng hơn RAM thì bạn có thể thường xuyên đọc và ghi lại dữ liệu quan trọng để đảm bảo nó lưu trong bộ nhớ cache và đưa RAM trở lại hàng.
Sử dụng xử lý lỗi trang một cách khéo léo.
Nếu bạn đánh dấu một trang bộ nhớ là không có mặt, CPU sẽ phát sinh lỗi trang khi bạn cố truy cập nó. Bạn có thể tạo một trình xử lý lỗi trang để thực hiện một số kiểm tra trước khi phục vụ yêu cầu đọc. (Hệ điều hành PC sử dụng điều này để tải trong suốt các trang đã được hoán đổi vào đĩa.)
Sử dụng ngôn ngữ lắp ráp cho những thứ quan trọng (có thể là tất cả mọi thứ).
Với ngôn ngữ lắp ráp, bạn biết những gì trong thanh ghi và những gì trong RAM; bạn biết CPU nào đang sử dụng các bảng RAM đặc biệt và bạn có thể thiết kế mọi thứ theo cách vòng để giảm rủi ro.
Sử dụng objdump
để thực sự nhìn vào ngôn ngữ lắp ráp được tạo và tìm ra bao nhiêu mã mỗi thói quen của bạn chiếm.
Nếu bạn đang sử dụng một hệ điều hành lớn như Linux thì bạn sẽ gặp rắc rối; có quá nhiều phức tạp và rất nhiều điều sai lầm.
Hãy nhớ rằng nó là một trò chơi của xác suất.
Một bình luận nói
Mỗi thói quen bạn viết để bắt lỗi sẽ phải chịu lỗi từ cùng một nguyên nhân.
Mặc dù điều này là đúng, nhưng khả năng xảy ra lỗi trong (nói) 100 byte mã và dữ liệu cần thiết cho một thói quen kiểm tra để hoạt động chính xác là nhỏ hơn nhiều so với khả năng xảy ra lỗi ở nơi khác. Nếu ROM của bạn khá đáng tin cậy và gần như tất cả mã / dữ liệu thực sự nằm trong ROM thì tỷ lệ cược của bạn thậm chí còn tốt hơn.
Sử dụng phần cứng dự phòng.
Sử dụng 2 hoặc nhiều thiết lập phần cứng giống hệt nhau với mã giống hệt nhau. Nếu kết quả khác nhau, thiết lập lại nên được kích hoạt. Với 3 thiết bị trở lên, bạn có thể sử dụng hệ thống "biểu quyết" để cố gắng xác định thiết bị nào đã bị xâm phạm.