C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

Klein

Hayır iki satır aynı anlama gelmiyor.

char *p ="abcde";
p nin gösterdiği adres yani "abcde" katarı Ram'da değil Rom'da tanımlı.

char *p ="abcde";
hayır işaretçiyi sabit tanımlamıyoruz. İşaretçinin gösterdiği adres değişebilir. Rom da içerisinde "abcde" katarı olan bir alan açıp. işaretçiye de buranın adresini veriyoruz. 



Gökhan BEKEN

Alıntı yapılan: Klein - 05 Eylül 2013, 18:53:16
char *p ="abcde";
hayır işaretçiyi sabit tanımlamıyoruz. İşaretçinin gösterdiği adres değişebilir. Rom da içerisinde "abcde" katarı olan bir alan açıp. işaretçiye de buranın adresini veriyoruz. 
Hımm teşekkürler, bunu bilmiyordum.
Özel mesaj okumuyorum, lütfen göndermeyin.

yldzelektronik

Selamlar.

atof()


ile uarttan gelen virgüllü sayıyı bir değişkene almak istiyorum.Ancak kafamı karıştıran bir nokta var.Terminalden girilecek değeri alacağım ancak eğer kullanıcı rakam ve . yerine karaktere basarsa ne olacak?Bunu nasıl algılayabilirim?Yani;

10.54 yazarken kullanıcı oldu ya;
10.e4 yazdı.Bu durumu nasıl algılayabilirim? atof fonksiyonunu daha önce kullanmadım.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Klein

atof() fonksiyonuna verilen giriş geçerli bir float sayıyı göstermiyorsa, 0 döndürür.

JKramer

Fonksiyon e (ve E)'yi exponent olarak görüyor; bunların dışındaki karakterler en baştaysa sıfır döndürüyor, ortalardaysa o karaktere kadar olan kısmı float olarak alıyor. Rakam dışında girilen hatalı değerleri algılamak için kendi fonksiyonunuzu yazmanız gerekecek. "atof function implementation in c" aramasıyla bazı örnekler çıkıyor.

Gökhan BEKEN

c18 dilinde
putrsUSART("Merhaba ");

şeklinde veri gönderdiğimde:
Alıntı YapWarning [2066] type qualifier mismatch in assignment
uyarısı veriyor aşağıdaki gibi yazınca sorun yok.
putrsUSART((const rom far char *)"Merhaba ");

Burda anlamadığım, rom demek zaten değişmeyen sabit veriler demek, const demek de sabit demek, far ne anlama geliyor bilmiyorum...

gerçi
putrsUSART((rom far char *)"Merhaba ");

şeklinde de çalışıyor ama, aşağıdaki gibi çalışmıyor
putrsUSART((const far char *)"Merhaba ");

Demekki ikisi aynı şey değil...
Const değişkenler için olan, rom tanımsız katarlar olabilir mi?

const ve rom arasında ne fark var?
far ne demek?
Aydınlatırsanız sevinirim.
Özel mesaj okumuyorum, lütfen göndermeyin.

arslan74

Merhaba,

PIC ler Harvard mimarsine shaip işlemciler. Yani bunları üc tane farklı hafıza bölgeleri var. program memory, ram ve EEPROM gibi alanlar dır. Bu alanların erişim kanalları birbirinden farklı dır, ortak erişim kanalı yoktur. Dolaysıyla C de bir alan tanımladığımızda bunun hangi alanda olmasını istediğimizi sadece adres kullanarak ifade edemiyoruz. Hepsinde ortak adresler bulunabiliyor. Bu ayrımı yapabilmek için C18 dilinde standart C dilinin dışında RAM ve ROM kelimeleri eklendi. Bununla ben bu hafıza alanını nerede tanımlamak istiyorum diye belirte biliyorsun. Von Neumann mimarisinde bütün hafıza alanları tek bir adres blokunda gösterilmiştir. RAM ve FLASH gibi alanlar farklı adreslerle tanımlanmıştır. Bu yüzden Von Neumann mimarisinde adres bakarak bu bilgi hangi alanda olduğunu anlayabiliriz, ana harvard mimarisinde bunu yapmak mümkün değil. PIC32 serisinde Von Neumann mimarisi kullanılmıştır, o yüzden RAM ve ROM kelimelerini kullanmak gerekmiyor. Yada bir fonksiyonun RAM ve ROM için iki tane ayrı yazılmış fonksiyonlar yazılması gerekmiyor.

Alıntı Yapfar ne demek?

Bunlarda PIC18 serisine için özel ifadeler. Genel olarak hafıza erişimin iki farklı metodu var. Eğer hafıza alanı 64K üstünde ise far kullanmak gerekiyor. Altında ise near kullanmak işlem hızı artıracak. far kullanmamız sadece hız olarak etkileyecek.

Gökhan BEKEN

Teşekkür ederim çok güzel bilgiler verdiniz.
Özel mesaj okumuyorum, lütfen göndermeyin.

muhittin_kaplan

aslan hocam görüşemiyorz uzun zamandır. :)

yamak

Alıntı yapılan: arslan74 - 09 Eylül 2013, 09:55:26
Merhaba,

PIC ler Harvard mimarsine shaip işlemciler. Yani bunları üc tane farklı hafıza bölgeleri var. program memory, ram ve EEPROM gibi alanlar dır. Bu alanların erişim kanalları birbirinden farklı dır, ortak erişim kanalı yoktur. Dolaysıyla C de bir alan tanımladığımızda bunun hangi alanda olmasını istediğimizi sadece adres kullanarak ifade edemiyoruz. Hepsinde ortak adresler bulunabiliyor. Bu ayrımı yapabilmek için C18 dilinde standart C dilinin dışında RAM ve ROM kelimeleri eklendi. Bununla ben bu hafıza alanını nerede tanımlamak istiyorum diye belirte biliyorsun. Von Neumann mimarisinde bütün hafıza alanları tek bir adres blokunda gösterilmiştir. RAM ve FLASH gibi alanlar farklı adreslerle tanımlanmıştır. Bu yüzden Von Neumann mimarisinde adres bakarak bu bilgi hangi alanda olduğunu anlayabiliriz, ana harvard mimarisinde bunu yapmak mümkün değil. PIC32 serisinde Von Neumann mimarisi kullanılmıştır, o yüzden RAM ve ROM kelimelerini kullanmak gerekmiyor. Yada bir fonksiyonun RAM ve ROM için iki tane ayrı yazılmış fonksiyonlar yazılması gerekmiyor.

Bunlarda PIC18 serisine için özel ifadeler. Genel olarak hafıza erişimin iki farklı metodu var. Eğer hafıza alanı 64K üstünde ise far kullanmak gerekiyor. Altında ise near kullanmak işlem hızı artıracak. far kullanmamız sadece hız olarak etkileyecek.
Hocam normalde zaten const dediğimizde rom da diğer türlü ram de saklanmıyor mu veriler?

arslan74

Alıntı yapılan: yamak - 10 Eylül 2013, 10:00:43
Hocam normalde zaten const dediğimizde rom da diğer türlü ram de saklanmıyor mu veriler?

C dilinde öyle bir mecburiyet yok. Bu derleyicilerin var sayımı ile ilgili bir şey. const anlamı ben bu değişkene okuma yapacağım yazma yapmayacağım anlamı veriyor. illa yazma yapamıyorum anlamı yükleme. RAM de const değişken tanımlaya bilirsin, O zaman ben sadece bu RAM den okuma yapacağım yazma yapmayacağım diye ifade ediyorsun. kodda yazma yapacağın zaman uyarı veriyor. Bu okunurluğu artırıyor.


Not:
Alıntı Yapaslan hocam görüşemiyorz uzun zamandır. :)

Evet haklısınız uzun süredir. Forumlara pek takılmıyordum, 1.5 senelik yoğun bir işle uğraştım. O zaman zarfında forumlara girecek vakit bile bulamadım diyebilirim. Forumda görüştüğüm bir çok arkadaşlarla da irtibatım kesildi. Hafızam da zayıfladı. Sizinle görüştüğümü hatırlıyorum. Ama ayrıntıları pek fazla hatırlamıyorum. Bunun için kusura bakmayın, anlaşılan yaşlanıyoruz.

yldzelektronik

#596
Uzunluğu sabit olmayan string veriyi usart ile alırken hangi metodu kullanıyorsunuz?

gets kullandığımda sıkıntı yaşıyorum.Kullandığım terminal programlarıyla bu sıkıntıyı aşamadım.Siz nasıl metodlar kullanıyorsunuz?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

Hiç kimse uart/usart kullanmıyor mu?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Gökhan BEKEN

Alıntı yapılan: yldzelektronik - 10 Eylül 2013, 11:17:29
Uzunluğu sabit olmayan string veriyi usart ile alırken hangi metodu kullanıyorsunuz?

gets kullandığımda sıkıntı yaşıyorum.Kullandığım terminal programlarıyla bu sıkıntıyı aşamadım.Siz nasıl metodlar kullanıyorsunuz?
Burda c18 ile ilgili bir uygulama yapmıştım, terminalde de denedim isiste de denedim çalışıyor. CCS C ' de nasıl olur bilmiyorum.
http://gokhanbeken.com/?p=912


Aşağıdaki kısım ile enter tuşu kontrolü yapılıyor:
while(1)
{
while(BusyUSART()); // wait for input //while (!DataRdyUSART());
getsUSART(usart_ram, 1); //usart_ram değişkenine 1 karakterlik veri alıyoruz
putsUSART(usart_ram); //adam ne yazdığını bu kod sayesinde görüyor, eğer back spack tuşunuda enter gibi kontrol edersek silmesinide sağlayabiliriz, gerçi isiste backspack tuşu ile silebiliyoruz ama normalde oluyor mu bilmiyorum
if(usart_ram[0]==(char)13)
{
break;
}
*cevap=usart_ram[0];
cevap++;
}
}

Özel mesaj okumuyorum, lütfen göndermeyin.

berat23

Alıntı yapılan: yldzelektronik - 10 Eylül 2013, 11:17:29
Uzunluğu sabit olmayan string veriyi usart ile alırken hangi metodu kullanıyorsunuz?

gets kullandığımda sıkıntı yaşıyorum.Kullandığım terminal programlarıyla bu sıkıntıyı aşamadım.Siz nasıl metodlar kullanıyorsunuz?

karakter karakter alıp bitirme karakterini arıyorum, mesela \n\r gibi.