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 if zinciri bir else ile bitmeli (Rule 15.7); switch içinde default olmalı (Rule 16.4).
  • Essential type kuralları: farklı işaretli/genişlikteki tipler arasında örtük dönüşüm yapılmamalı (Rule 10.x).
  • goto kullanılmamalı (Rule 15.1, advisory).
  • Fonksiyonun tek çıkış noktası olmalı (Rule 15.5, advisory).
  • Her if, for, while gö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.

  1. C dilinde volatile anahtar kelimesi ne işe yarar?OrtaC ProgramlamaEmbedded
  2. Bir yazmaçtaki belirli bir biti set, clear ve toggle eden C kodunu yazın.KolayC ProgramlamaEmbedded
  3. Stack ile heap arasındaki fark nedir? Gömülü sistemlerde dinamik bellek kullanımından neden kaçınılır?OrtaC ProgramlamaEmbedded
  4. Endianness nedir? Little-endian ile big-endian farkı nedir?KolayC ProgramlamaEmbedded
  5. Bit field nedir? Donanım register'larına erişimde bit field mi yoksa bit maskesi mi kullanılmalı?OrtaC ProgramlamaEmbedded
  6. Fonksiyon pointer'ları ve callback tabloları gömülü sistemlerde nasıl kullanılır? Bir state machine örneği verin.OrtaC ProgramlamaEmbedded

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle