TBD-020 이 "외부 기능 ECU Heartbeat/Timeout 및 복구 정책"으로 확정할 항목이다.
타임아웃은 주기의 3배 + α
heartbeat 주기 100 ms
heartbeat 타임아웃 350 ms (3회 연속 유실 + 여유)
2배면 한 번 유실 + 지터로 오탐이 나고, 5배면 검출이 너무 늦다. 3배가 관행이다.
진입은 즉시, 복구는 보수적으로
유효성 3축 의 비대칭이 여기에도 적용된다.
/* 타임아웃 → 즉시 불신 */
if (alive && (now - last_rx) > HB_TIMEOUT_MS) { alive = false; fault_set(...); }
/* 복구 → 연속 N회 수신 후 (TBD-038) */
if (!alive && ok_streak >= HB_RECOVER_N) {
alive = true;
fault_clear(...);
arbiter_request_reevaluate(...); /* ★ 재개가 아니라 재평가 요청 */
}
마지막 줄이 §6.4.4 의 구현이다. 복구했다고 하던 동작을 재개하지 않고 "다시 판단해라"만 요청한다.
heartbeat 만으로는 부족하다
노드는 살아서 프레임을 보내는데 센서 태스크만 죽은 고장이 있다. 그건 alive counter 로 잡는다. 감시가 세 층(노드 · 신호 age · 태스크)이어야 하는 이유.