2009-06-11 15 views

cevap

25

olmayan struct alanlar birbirinin aynı:

#include <stdio.h> 
int main (int c, char *v[]) { 
    struct _a { 
     int a1; 
     volatile int a2; 
     int a3; 
    } a; 
    a.a1 = 1; 
    a.a2 = 2; 
    a.a3 = 3; 
    return 0; 
} 

Sen "volatile struct _a {...}" kullanarak tüm struct gibi uçucu işaretleyebilirsiniz ancak yukarıdaki yöntem bireysel alanlar içindir.

9

this makaleye göre oldukça yalındır olmalıdır:

Son olarak, bir yapı veya birliğe uçucu uygularsanız, tüm içeriği struct/birliğin uçucu bulunmaktadır. Bu davranışı istemiyorsanız, struct/union öğesinin bağımsız üyelerine bireysel üyelerini uygulayabilirsiniz.

1

Sadece C/C++ uçucu anahtar sözcüğündeki bir uyarı.

Ne yaptığınızı bilmiyorsanız, onu asla kullanmamalısınız.

C/C++ uçucu! = Java/Gerçekten sen, C++ 0x atomik şablonunu (ya da bir şey benzer) kullanmak gerekir ne yaptığını bilmiyorsanız dişli kodunda yardımcı olmuyor uçucu

uçucu C#.

Uçurumu kullanmak için kullanmam gereken tek zamandır, donanım kayıtlarını kontrol etmek.

+0

Sanırım kesinlikle gerekli olandan biraz daha güçlü olduğunu belirttiniz. Uçucu, özellikle tek çekirdekli gömülü platformlarda, dişli kodla yardımcı olur. Ama onu nasıl kullanacağını bilmek zorundasın. Ayrıca, DMA ile veya DMA olmaksızın donanım kayıtlarına başvururken, özellikle de statü için sorgulanacak bir kayıt olduğunda etkili bir şekilde zorunludur. Önbelleğinizi ve doğru bir şekilde nasıl yöneteceğinizi ve platformunuzda atomik işlemleri nasıl yapacağınızı anlamak da gereklidir. – RBerteig

+0

Haklısınız. DMA dediğimde düşündüğümü bilmiyordum, MMIO demek istedim. Cevabı daha iyi bir şeye düzenledim (umarım). –

+0

wikipedia (http://en.wikipedia.org/wiki/Volatile_variable) 'a göre C#, C/C++ ile aynı davranışı gösterirken, sadece Java'nın farklı bir semantiği vardır. –

0

Bazı kesilmelere (örneğin, bir sinyal işleyici veya başka (yakın) atomik değişken) hizmet verdiğinden, uçucu olarak bildirilen üyeler değişmezse, büyük olasılıkla uçucu olmamalıdır (çoğu derleyici, yeterince yakın). Diğerleri söylediler gibi derleyici aslında sizin :) Bazı durumlarda

, yani aynı fikirdeyse

Aksi halde .. sadece görmek için daha sonra asm incelemek dökümlerini kullanmak gcc belirli sürümleri .. o kontrol onun değerinde döker.

İlgili konular