Merhalar
#define TEMP110_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7C2))
#define TEMP30_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7B8))
((uint16_t*) ((uint32_t) 0x1FFFF7C2)) bu kısmı acıklayabilirmiyiz?
anlamadığım kısım (uint16_t*) ((uint32_t) ??
uint16_t türünde bir bir pointer tanımı yapılmış. Yanlış anlamadı isem
Alıntı yapılan: yldzelektronik - 21 Ocak 2017, 11:56:09
uint16_t türünde bir bir pointer tanımı yapılmış. Yanlış anlamadı isem
((uint32_t) 0x1FFFF7C2)) 32 bit olan adres icin neden 16 bitlik bir pointer tanımlansın ki?
Bende mantıgını anlamadım.
Platformun ne olduğunu bilmiyorum.Ama sanırım 32bit adres genişliği olan bir platform.
((uint32_t) 0x1FFFF7C2)
ile 32bit bir sayı olduğunu garantilemiş.
(uint16_t*)
ile uint16_t türünde pointer tanımı yapılmış.
Aslında uint16_t *p
tanımından farkı yok.
Zaten dikkat ederseniz definetion olarak tanımlanan isimde address yazıyor.
Selam,
Bu tanımlama şekline C proğramlama dilinde Macro adı verilir. Siz yazılımın her hangi bir satırında TEMP110_CAL_ADDR bu ifadeyi yazdığınız anda derleyici oraya ((uint16_t*) ((uint32_t) 0x1FFFF7C2)) bu kodu yapıştırır. Macroların amacı karmaşık ifadeyi yazıp onu basit bir anlamlı isimle ifade etmektir.
Bu tanımlamanın amacı anladığım kadarıyla ; kullanıcı normal şartlarda 0x1FFFF7C2 adresine yazma okuma yaparsa 32 bitlik bir erişim yapmış olur.
Fakat #define TEMP110_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7C2)) bu tanımlama sayesinde ilgili adrese 16bit High ve 16bit Low şeklinde erişebiliyor.
ör, Low16 = TEMP110_CAL_ADDR ;
High16 = TEMP110_CAL_ADDR + 1 ;
ya da, macrosuz biçimiyle,
Low16 = ((uint16_t*) ((uint32_t) 0x1FFFF7C2));
High16 = ((uint16_t*) ((uint32_t) 0x1FFFF7C2)) + 1;
aynı anlama gelir. Ama macro daha iyi bir yöntemdir.
gibi. Ama emin olmak icin denemek lazım. O adrese bir deger yazın ve bu şekilde erişin sonuçtan anlaşılır.
Esen kalın.
(uint16_t *) işaretçinin 1uint16_t tipinde olacağını söylüyor.
(uint32_t)sayı ise sayının 32 bit olarak değerlendirilmesi gerektiğini söylüyor.
32 bit işlemcide işaretçilerin tipi ne olursa olsun 32 bit. İşaretçiye sabit bir sayı ya da bir değişkenin içeriğini işaret adresi olarak verirseniz bu sayı 32 bit olmak durumunda. Sabit girilen bir sayının kaç bit olacağını derleyici bilemeyeceği için ona bizim bildirmemiz gerekiyor.