Hi tech C volatile ?

Başlatan XX_CİHAN_XX, 24 Temmuz 2008, 11:12:15

XX_CİHAN_XX

Arkadaşlar uzun sayılabilecek bir asm geçmişinden sonra C ye hızlı bir giriş yaptım. Sizlerin sayesinde eksik bilgilerimi kapatmaya çalışıyorum. Bu anlamda bir sorum var.
Başına VOLATILE yazarak açılan bir global değişken ile yazmadan açılan bir global değişken arasında ne fark vardır bunu öğrenmek istiyorum.
Gözlemlediğim kadarıyla başında volatile ifadesi bulunan gobal değişkenler hem kesme vektörlerinde hemde ana program döngülerinde ortak kullanılıyor. Bunla bir bağlantısı var mı merak ettim. Bildiğim kadarıyla normal olarak açılan global değişkenlerde aynı şekilde kullanılabiliyor. Bu VOLATILE ifadesinin espirisi nedir acaba  :?:
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

F493


CoşkuN

Yukarıdaki linkteki makalede konuyu çok güzel açıklamışlar.
Volatile için kısa bir açıklama yapmak gerekirse, bu anahtar kelimeyle derleyiciye ilgili değişkenin derleyicinin haberi olmadan değişebileceğini bildiriyoruz.Derleyici de bu değişkenin değerini "garanti" olarak saymıyor.Dolayısıyla hep kendi adresinden okuyor.

Erol YILMAZ

VOLATILE hakkında kısa bir senaryo:

2 byte uzunluğunda bir değişkenimiz olsun,
Normal program akışımızda bu sayıya başka bir sayıyı ilave ediyoruz.
ilk byte ile işimiz bitip 2. byte i yerine koyacakken
bir interrupt oluştu.

Interruptta bu sayı ile ilgili bir işlem yapsın.

Değişkenin hiç alakasız değerlere taşınabileceğini tahmin edersiniz.

Bunu nasıl engellediği konusunu tabi ki derleyici yazan firma daha iyi
bilir ama bu değişkeni VOLATILE olarak isimlendirmemiz gerekiyor !!!

Konu hakkında 3 farklı yerden derlediğim kısa metinleri de
anlamaya çalışırsanız Volatile ekinin hangi probleme çözüm
olduğunu görebilirsiniz.

Global variables that are accessed by both an ISR and mainline
functions should be declared volatile.


These lines use the volatile keyword to denote that these variables are
used by both the main line code and the interrupt service routines. The
volatile keyword tells the compiler that it should not optimize accesses
to these variables.



the main program could write the first of two modified bytes to RAM, and get interrupted
before writing the second byte to RAM - in this case, the interrupt routine gets corrupt data
.