Prototyp, který funguje na stole, ještě není firmware připravený na sériovou výrobu. U safety-relevantních výrobků normy jako IEC 61508 a ISO 26262 očekávají definovaný standard kódování – a v embedded C to obvykle znamená MISRA C. Přesně tímto krokem jsme nedávno prošli s firmwarem safety-relevantního výrobku. Takto při tom postupujeme.
Proč na MISRA C záleží
Jazyk C nechává hodně na kompilátoru: implicitní typové konverze, nedefinované chování a chování závislé na implementaci, ukazatelovou aritmetiku. MISRA C z těchto rizik dělá kontrolovatelná pravidla. Kód, který je dodržuje, je předvídatelnější, snáz se reviduje a snáz se obhajuje v safety argumentaci.
MISRA C:2012 dělí pravidla do tří kategorií:
| Kategorie | Význam |
|---|---|
| Mandatory (povinná) | Musí se dodržet – odchylka není povolena |
| Required (vyžadovaná) | Musí se dodržet, pokud není zdokumentována formální, zdůvodněná odchylka |
| Advisory (doporučená) | Doporučená dobrá praxe |
Náš postup v pěti krocích
- Výchozí stav. Nastavíme statický analyzátor na MISRA C a spustíme ho na celý kód. První report bývá dlouhý – to je normální.
- Třídění podle rizika. Oddělíme skutečné chyby od stylu. Nejdřív nedefinované chování, nekontrolované návratové hodnoty a nebezpečné konverze, čitelnost až potom.
- Opravy v malých, revidovatelných krocích. Každá změna je navázaná na svůj nález a revidovaná. Výrobek musí fungovat po každém kroku.
- Dokumentace odchylek. Kde vyžadované pravidlo rozumně dodržet nejde – třeba v kódu pro přímý přístup k hardwaru –, odchylku zdůvodníme a zdokumentujeme, místo abychom ji tiše přešli.
- Udržení čistoty. Analýza se stane součástí buildu, aby nový kód nevracel staré problémy.
Typické nálezy
- Implicitní konverze mezi znaménkovými a neznaménkovými typy nebo různými šířkami
- Návratové hodnoty funkcí, které se nikdy nekontrolují
- Příkazy
switchbez větvedefault - Vedlejší efekty skryté v podmínkách nebo makrech
- Rekurze nebo dynamická paměť v kódu, který musí mít omezené zdroje
- Nepoužívaný kód a proměnné, které ztěžují revize
Nic z toho není exotické – ale u safety-relevantního výrobku je každý z těchto bodů otázkou, kterou může položit posuzovatel.
Naplánujte to před sériovým nasazením
Práce na MISRA je nejlevnější na začátku a nejdražší těsně před sériovou výrobou, kdy každá změna vyžaduje nové kolo testů. Pokud je termín uvedení pevný, začněte hned výchozí analýzou: ukáže, jak velký úkol to doopravdy je.
Firmware Code Review
MISRA analýza, revize architektury a testovatelnosti jedné komponenty firmwaru – s prioritizovaným seznamem nálezů a konkrétními opravami.