Pattern: Tabellengesteuerte Zustandsmaschine — 6 Zustände × 11 Ereignisse
"Jeder Übergang ist statisch definiert — keine Überraschungen zur Laufzeit"
static const uint8 transition_table[CVC_STATE_COUNT][CVC_EVT_COUNT] = {
/* CVC_STATE_INIT */
{
CVC_STATE_RUN, /* EVT_SELF_TEST_PASS -> RUN */
CVC_STATE_SAFE_STOP, /* EVT_SELF_TEST_FAIL -> SAFE_STOP */
CVC_STATE_INVALID, /* EVT_PEDAL_FAULT_SINGLE -> (invalid) */
CVC_STATE_INVALID, /* EVT_PEDAL_FAULT_DUAL -> (invalid) */
...
},
/* CVC_STATE_RUN */
{
CVC_STATE_INVALID, /* EVT_SELF_TEST_PASS -> (invalid) */
CVC_STATE_INVALID, /* EVT_SELF_TEST_FAIL -> (invalid) */
CVC_STATE_DEGRADED, /* EVT_PEDAL_FAULT_SINGLE -> DEGRADED */
CVC_STATE_SAFE_STOP, /* EVT_PEDAL_FAULT_DUAL -> SAFE_STOP */
CVC_STATE_LIMP, /* EVT_CAN_TIMEOUT_SINGLE -> LIMP */
CVC_STATE_SAFE_STOP, /* EVT_CAN_TIMEOUT_DUAL -> SAFE_STOP */
CVC_STATE_SAFE_STOP, /* EVT_ESTOP -> SAFE_STOP */
CVC_STATE_SAFE_STOP, /* EVT_SC_KILL -> SAFE_STOP */
...
},
/* ... DEGRADED, LIMP, SAFE_STOP, SHUTDOWN */
};