Komplex C ifadelerini Anlamaya Çalışalım

Başlatan fatihvelid, 13 Haziran 2007, 14:21:07

fatihvelid

Merhaba Arkadaşlar, C'de komplex ifadelerle karşılaşıyorsunuzdur zaman zaman. Bazen bu komplex ifadeler kısa yoldan işlem yapmamızı sağlar.  Komplex C ifadelerini araştırıyorum. Karşılaştığınız komplex C ifadelerini buraya yazarmısınız. Tartışalım, ve anlamaya çalışalım.

Ben de daha önce hiç karşılaşmadığım bir yapıya, bir kaynak kodunu incelerken karşılaştım. İfadenin bir kısmını anlayamadım.

Bu nasıl bir tanımlamadır.

Alıntı Yap

typedef struct __attribute__((__packed__)) _NODE_INFO
{
DVALUE Value;
WDEF WDef;
} NODE_INFO;


Alıntı Yap

DVALUE ve WDEF daha önce tanımlanmış bir yapıdır. __packed__ hiçbir yerde tanımlanmamış.

Anlamadığım kısmı "_attribute__((__packed__)) _NODE_INFO" ifadesinin ne anlama geldiği.



Ama __attribute aşağıdaki şekilde tanımlanmış preprocessor'dur.
#define __attribute__(a)

Bu ifadenin ne olduğunu bilen varsa, açıklarsa sevinirim.


Daha farklı, ve komplex C ifadelerini bu başlık altında tartışabiliriz.
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

yasinbirol

__attribute__((__packed__)) ifadesi gnu gcc compiler a özgüdür. gcc de #pragma yerine kullanılır. senin örnekte hizalama yapmaktadir. emin olmamakla beraber x86 işlemciler için #pragma pack 1 yazarsan yapin byte alignment  yani hizalama olmaz.
Yaşasin Cortex-M3 :D

fatihvelid

Belirttiğim ifadeyi, C18 ve Hitect derleyebiliyor. Yani bir derleyiciye özgü bir ifade değil. Diğer derleyiciler de derleyip derleyemeyeceğini denemedim.

Alıntı Yap
gcc de #pragma yerine kullanılır. senin örnekte hizalama yapmaktadir

Bunu biraz daha açıklarmısınız ? Hızalama derken, nasıl bir hızalama.
Hızalama ile kastettiğiniz sıralama ise bu kodun yaptğı iş bellekte bir kritere göre değişkenleri sıralamak mıdır ?

İlgileriniz için teşekkürler
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

fatihvelid

Size bir başka karışık görünen ifade daha,
Alıntı Yap
volatile unsigned int __attribute__((__section__(".stack_kernel"))) stack_k[128];
Bu ifadeyi açıklayabilecek birisi var mı ?
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

fatihvelid

Alıntı yapılan: "yasinbirol"__attribute__((__packed__)) ifadesi gnu gcc compiler a özgüdür. gcc de #pragma yerine kullanılır. senin örnekte hizalama yapmaktadir. emin olmamakla beraber x86 işlemciler için #pragma pack 1 yazarsan yapin byte alignment  yani hizalama olmaz.

Bu hızalama bize ne tür bir avantaj sağlar. Niçin ihtiyaç duyulur ?
Teşekkürler
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

gallavi

Bu tarz ifedeleri tam anlamamkla beraber dsPICler için Run Time Self Programin işlemlerinde kullanmak zorunda kaldım sanırım arkadaşın söylediği gibi fiziksel olarak belirli bir adrese yerleştirilmiş değişken tanımlamaya yarıyo bendeki kodda program memory de belli bi alanda yer ayırarak oranın program kodu yerleştirilmesini ölemeye yarıyodu böylece o alanı eeprom gibi kullana biliyodum dsPIC lerde EEprom yok RTSP sayesinde program memory eeprom gibi kullana biliyoruz.

Not : Acele bi cevap oldu kususra bakmayın
DemirHan=gallavi;

gallavi

Şu koda da bakabilirsiniz



//Run Time Self Programming
unsigned int pageMirrorBuff[64*8];
#define PM_ROW   __attribute__((space(prog), aligned(512)))
const PM_ROW MyRowData1InFlash[] =
{   0x1376,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};   


const PM_ROW MyRowData2InFlash[] =
{   0x1376,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};   


const PM_ROW MyRowData3InFlash[] =
{   0x1376,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};   

const PM_ROW MyRowData4InFlash[] =
{   0x1376,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};   

const PM_ROW MyRowData5InFlash[] =
{   0x1376,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};   

const PM_ROW MyRowData6InFlash[] =
{   0x1376,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};   

const PM_ROW MyRowData7InFlash[] =
{   0x1376,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};   
const unsigned int PM_ROW MyRowData8InFlash[] =
{   0x1376,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1376
};
DemirHan=gallavi;