MISRA C

Başlatan Klein, 31 Mayıs 2014, 08:32:34

Klein

Yazdığım bir kod paracığının MISRA C kurallarına uygunluğunu araştırırken, Türkçe kaynak sıkıntısını farkettim. Bu konuda yazılmış bir sürü yazı var. Ancak toplu halde değiller.  Ya da ben bulamadım.
Bu sebeple aklıma geldike kuralları buraya yazıp, toplu kaynak oluşturmayı hedefledim.  Eğer siz de aklınıza geldikçe  buraya ekleme yaparsanız, toplu halde bulabiliriz.

Kural 5.2 Blok dışında kullanılmış bir tanımlayıcıyı, blok içerisinde tekrar kıllanmayın. 
örnek:
int16_t i;
{
    int16_t i;  /* uyumsuz */
    i = 3; 
}
Bu şekilde bir tanımlama hata ya da uyarı vermez.  Hem blok içinde hem blok dışında aynı isimle tanımlanmış değişkeniniz varsa, işleme girecek olan blok içindekidir. Ancak kafa karıştırabilir.

Kural 5.7 Tanımlayıcı adlarını tekrar kullanmayın ( Tavsiye niteliğinde kural)
örnek:
struct ortam_basinci
{
   uint16_t basinc; /* milibar */
} * x;
struct kazan_basinci
{
   uint16_t basinc; /* MegaPascal */
   /* Uyumsuz - basinc birimleri aynı değil*/
} * y;

tanımın ifade ettği birim aynı değise bu şekilde kullanmaktan kaınmak gerek.

 

Burak B

#1
@Klein hocam PC-Lint veya benzeri araçlar ile bunun kontrolünü yapabilirler. Zira yakın zamanda PC-Lint için en son bir beta yama ile MISRA 2012 ve C11 ile alakalı güncellemeler yaptılar.

Okumak için arkadaşlara tavsiyelerim,
MISRA-C:2004 Guidelines for the use of the C language in critical systems - Lisanslı bir döküman olduğundan burada link veremiyorum ancak google yoluyla temin edebilirsiniz.
Michael Barr' ın Kitap ve Makaleleri

Türkçe kaynak zor iş. Bu işi yapacak kişiler için ingilizce zorunlu birşey.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

Klein

Alıntı yapılan: ByteMaster - 31 Mayıs 2014, 10:40:34
@Klein hocam PC-Lint veya benzeri araçlar ile bunun kontrolünü yapabilirler.
Türkçe kaynak zor iş. Bu işi yapacak kişiler için ingilizce zorunlu birşey.

PC-Lint yapar ama,  yazarken bunun kontrolünü  programcı yapmalı. Yoksa kod yaz, PC-Lint kontrol etsin, yaz kontrol ettir şeklinde program bitmez. 

İngilizce illa ki önemli. Ama Türke açıklaması bile bazen zor anlaşılan konuların İngilizcesini herkesin anlamalasını beklemek haksızlık olur diye düşünüyorum.   
MISRA-C:4004 Guidelines dokümanını fırsat buldukça çevirmeye çalışıyorum.  Fırsat buldukça çevirdiğim bölümleri buraya eklemeye çalışacağım.

pisayisi

Toyota nın kazalara sebeb olan Ecu kontrol firmware nin de misra c kodlarına uygun yazılmadığı için kazalara neden olduğu vurgulanmıştır.  Burda sorun sürücünün pedala basma task i X olarak tanımlanırsa, X task inin Ecu da işlem görmemesine neden olan bir bug kullanıcı pedala basmasa da aracın istemdışı olarak hızlanmasına yolaçıyordu. Eğer misra c kuralına uyulsa ve X taskinin çalışıp çalışmadığı belli aralıklarla denetlenebilse kazaya neden olmadan araç arıza moduna geçebilecekti...
Murat