Pages

C PROGRAMLAMA - VOLATILE NEDİR ?


Bu yazımda daha önceden C dilini çalışırken ihmal ettiğim ve dikkatimi çekmeyen ancak gömülü yazılımlarda önemli bir role sahip olan volatile anahtar kelimesinden bahsedeceğim.


Volatile Nedir ? 

Volatile C dilindeki "type-qualifiers" diye adlandırılan tip niteliyicilerinden biridir. Volatile anahtar kelimesinin  yazım ve kullanımı " volatile değişken_tipi değişken_adı" ( volatile uint32_t flag = 0; ) şeklindedir. Volatile anahtar kelimesi derleyiciye tanımlanan değişkenin derleyici tarafından tanımlanmamış bir işlem tarafından değiştirilebileceğini bildirir. Peki buna neden ihtiyaç duyarız ?




Neden ve Nerelerde Kullanılır ?

Programlarda kullandığımız değişkenler derleyici tarafından optimize edilirler. Diyelim ki, yazdığımız 
programın başında " t " adında bir değişken tanımladık ve bu değişkene daha sonra 5 değerini verdik. Bu işlemden sonra " t  = 5 " değerini kullanmadan " t =10 " değerini aldığı satıra kadar " t " değişkeni hiç kullanılmadı. Program derlenirken derleyici kodu makina koduna çevirirken " t = 5 " komutunun hiç bir anlamının olmadığını varsayarak bu komutu makina koduna çevirmeyebilir. Bu optimizasyon sonucunda işlemcinin gereksiz yere fazladan işlem yapmasının önüne geçilmiş olur.

Bu optimizasyon temelde faydalı gibi gözükse de aslında istenmeyen sonuçlara neden olabilir. İşaretçi (pointer) kullanarak  " t " değişkeninin değerini dolaylı yoldan değiştirebiliriz. Gömülü yazılımlarda kesme işlemleri ile değişkenlerin değerleri değiştirilebilir, birden fazla task'ta erişilen değişkenler bu durumlara örnektir.

Kısacası derleyicinin optimizasyonu sonucu oluşabilecek durumlara karşı derleyici tarafından tanımlanmamış işlemlerde kullanılan değişkenleri " volatile " olarak tanımlarız. Bu sayede derleyiciye bu değişken üzerinde optimizasyon yapmasını engelleyen bir kod göndererek veri kayıplarının önüne geçeriz ve programımızın istediğimiz gibi çalışmasını sağlamış oluruz.


Emre Aytur

Gömülü Sistemler, Elektronik, Teknoloji