5 Temmuz 2013 Cuma

pointere mauel adres vermek

http://www.picproje.org/index.php/topic,35908.90.html

Pointerler üzerine konuşmaya devam edelim.

Çipinizin dokumanında, adresi atıyorum 0x42345678 olan bir register gördünüz.

Fakat #include ile programınıza dahil edilmiş olan çipin register tanımlamalarının bulunduğu dosyada her nedense bu 0x12345678 adresli register yer almamış.

Sizin de bu registeri kullanmanız gerekiyor. Ne yapacağız?

---------------------------------------------------------------

Programlarda int A yada char A vs bir tanım yaptığınızda, A değişkenin adresi derleme aşamasında C tarafından belirlenir.

Halbuki registerlerin adreslerini çip üreticisi belirler. Dolayısı ile bu gibi durumlarda adres belirleme işini derleyicinin inisiyatifinden almamız gerekir.

---------------------------------------------------------------

Şimdi daha önceki pointer anlatımımızı hatırlayın ve aşağıdaki satırları takip edin.

int A;           // Ben integer bir değişkenim
int *P;         // Ben integer değişkenin adresini saklayabilirim

      P=&A;    // Pointer'a A değişkeninin adresini yazdık
    *P=0x12;  // pointerin gösterdiği int alana  0x12 değerini yani 0x00000012 yükleyeceğiz demektir.

//    Yukarıdaki satırlar A=0x12 demekle aynı şeydir.

---------------------------------------------------------
     
Yukarıdaki örnekte pointera A değişkeni, hangi adresde ise o atandı ve kullanıldı. Şimdi yok kardeşim A nın adresini değil benim vereceğim sayısal adresi kullan diyelim.

Sonrada bu adrese örnek olarak 0x12345678 değerini yazalım.

int *P;

       P=(int*) 0x42345678; 
     *P=0x12345678;

----------------------------------------------------------------

Fakat ben P nin önüne her defasında * koymak istemiyorum.

#define P  (*((int*) 0x42345678)) tanımlarsak

        P=0x12345678;     

yazarız.

Eğer yakışıklı görünmesi şart değil derseniz

        (*((int*) 0x42345678))=0x12345678; de yazabilirsiniz.

Verilen örnekler 0x42345678 adresine 0x12345678 sayısını yazar.

----------------------------------------------------------------------------

Yukarıdaki örneklerde pointeri integer tanımladık.

Bir portu, bu şekilde pointer ile kullanmak için portu int tanımlamak sakıncalıdır. unsigned int tanımlanmalıdır. Neden?

Hiç yorum yok:

Yorum Gönder