reliability_lib — это модульная библиотека на языке C для встраивания в системы с повышенными требованиями к надежности. Библиотека реализует различные механизмы обнаружения, локализации и обработки ошибок, включая поддержку контрольных сумм, дублирования вычислений, N-версионного программирования, блоков восстановления и других.
- Поддержка платформ с ограниченными ресурсами (в т.ч. микроконтроллеры)
- Явная модульность и масштабируемость
- Механизмы охватывают все этапы обработки ошибок: от обнаружения до восстановления
| Механизм | Назначение |
|---|---|
| Встроенные утверждения | Проверка инвариантов и предусловий |
| Контроль потока выполнения (CFC) | Детектирование сбоев потока инструкций |
| Контрольные суммы и коды (CRC, Хэмминг) | Обнаружение и коррекция ошибок в данных |
| Мониторинг поведения (сторожевой таймер) | Контроль активности и таймаутов |
| Проверка временных ограничений (deadline monitor) | Контроль времени выполнения операций |
| Валидация входных данных | Диагностика некорректных параметров |
| Проверка свойств структур данных | Контроль инвариантов и логической целостности |
| Дублирование вычислений | Защита от транзиентных сбоев |
| N-версионное программирование | Защита за счёт программного разнообразия |
| Recovery Block и CRB | Последовательное восстановление с альтернативами |
| Парные процессы | Active/Passive и Active/Active схемы |
| Обработка исключений | Централизованное реагирование на ошибки |
| Контрольные точки и перезапуск | Сохранение состояния и возврат к нему |
| Разнообразие данных | Обработка данных в разных представлениях |
#include "cfc_monitor.h"
void example_fsm() {
cfc_monitor_t monitor;
cfc_monitor_init(&monitor);
CFC_ENTER(&monitor, 0x10);
if (!CFC_CHECK(&monitor, 0x10)) return;
CFC_ENTER(&monitor, 0x20);
if (!CFC_CHECK(&monitor, 0x20)) return;
CFC_ENTER(&monitor, 0x30);
if (!CFC_CHECK(&monitor, 0x30)) return;
CFC_ENTER(&monitor, 0x40);
if (!CFC_CHECK(&monitor, 0x40)) return;
}git clone https://github.com/scarletshroud/reliability_lib.git
cd reliability_lib
git checkout mk32_platform