MISRA C nedir? Neden kullanılır ve kurallarına birkaç örnek verebilir misiniz?
Cevap
MISRA C, güvenlik kritik gömülü sistemlerde C dilinin tanımsız, belirsiz ve hataya açık özelliklerini kısıtlayan bir kodlama standardıdır. Başta otomotiv için yazılmıştır, bugün havacılık, medikal, demiryolu ve endüstriyel kontrol alanlarında da yaygın olarak kullanılır. Yaygın sürüm MISRA C:2012'dir (eklemeleriyle). Bunlar MISRA C:2023 ve MISRA C:2025 sürümlerinde birleştirilip güncellenmiştir.
Neden kullanılır?
- ISO 26262 (otomotiv), IEC 61508 (endüstriyel), IEC 62304 (medikal), DO-178C (havacılık) gibi fonksiyonel güvenlik standartları bir kodlama standardı kullanılmasını ister. Bunun için en sık MISRA C seçilir.
- Kodu daha öngörülebilir, taşınabilir ve statik analizle doğrulanabilir hale getirir.
Kural kategorileri
- Mandatory: Asla ihlal edilemez.
- Required: Ancak belgelenmiş bir deviation (sapma) süreciyle ihlal edilebilir.
- Advisory: Önerilir, gerekçesi kayıt altına alınarak esnetilebilir.
Örnek kurallar (MISRA C:2012 numaralandırması)
- Dinamik bellek (
malloc/free) kullanılmamalı (Rule 21.3). if ... else ifzinciri birelseile bitmeli (Rule 15.7);switchiçindedefaultolmalı (Rule 16.4).- Essential type kuralları: farklı işaretli/genişlikteki tipler arasında örtük dönüşüm yapılmamalı (Rule 10.x).
gotokullanılmamalı (Rule 15.1, advisory).- Fonksiyonun tek çıkış noktası olmalı (Rule 15.5, advisory).
- Her
if,for,whilegövdesi süslü parantez içinde olmalı (Rule 15.6).
/* MISRA uyumsuz */
if (x > 0) y = 1;
uint8_t a = 300; /* örtük daraltma */
/* MISRA uyumlu */
if (x > 0) {
y = 1u;
}
uint8_t a = (uint8_t)44u;Araçlar
PC-lint Plus, Polyspace, Helix QAC, Parasoft C/C++test, Cppcheck Premium gibi statik analiz araçları kuralları otomatik denetler. CERT C ise güvenlik (security) odaklı benzer bir standarttır.
İlgili C Programlama soruları
- C dilinde volatile anahtar kelimesi ne işe yarar?
- Bir yazmaçtaki belirli bir biti set, clear ve toggle eden C kodunu yazın.
- Stack ile heap arasındaki fark nedir? Gömülü sistemlerde dinamik bellek kullanımından neden kaçınılır?
- Endianness nedir? Little-endian ile big-endian farkı nedir?
- Bit field nedir? Donanım register'larına erişimde bit field mi yoksa bit maskesi mi kullanılmalı?
- Fonksiyon pointer'ları ve callback tabloları gömülü sistemlerde nasıl kullanılır? Bir state machine örneği verin.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.