shift_left(&data,1,input(Dout));

Başlatan oyhan, 14 Ağustos 2006, 00:12:02

oyhan

Merhaba Arkadaşlar
shift_left(&data,1,input(Dout)); bana burdaki shift_left komutunun kullanımını parantez içindeki paramatreleri ile birlikte  açıklayabilirmisiniz.
BİRLİKTEN KUVVET DOĞAR:

Erkan Gench

Merhaba.

dout isimli girişten alınan biti sola kaydır ve data değişkeninin adresine yaz sonuçta ortaya çıkacak veri bir bayt olsun anlamına geliyor.

yani girişten gelen biti alıyor ve ikinci değişkende belirtilen bayt sayısı kadar yeni bir değişken oluşturup bunun içinde sola kaydırıyor sonrada sonucu data adlı değişkenin adresine yazıyor yani datayı okuduğunuzda kaydırma işleminin sonucunu görürsünüz. tabiki değişkenin bayt sayısı fonksiyona gönderdiğiniz bayt sayısıyla uyumlu olmalı.

ccs'nin helpinde yazıyor bunlar oradan faydalanabilirsiniz.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

oyhan

Sola kaydırma tamam &data demek ile data değişkenin adresimi akla geliyor pointerlardan fazla anlamıyorum. data değişkenin kendisi *data ise data değişkenin adresi oluyor &data nedir? Birde belirtilen girişden input(Dout) den yani giren bilgiyi yeni geçici oluşturulan bir bayte lık değişkenin içine yerleştiriyor. İkinci parametre 1 olduğu için anladığım kadarı ile ve sonra bunu oluştulan geçici dosyadan &adres ile belirtilen adrese yazıyor. Sanırım buda adres değişkenin adresi. Bu adrese yazılan bilgi adres değişkeni içerisine yazılmış oluyor yani öylemi? Sonuç olarak tüm bu işlemler sonucunda girişe göre bir sola ötelenmiş bir data değişkenimiz oluyor. Doğru anlamışımdır umarım. &data nın pointer ile farkı nedir?.  ///shift_left(&data,1,input(Dout)); ///
BİRLİKTEN KUVVET DOĞAR:

Erkan Gench

bu fonksiyonu kullanmadım, zaten uzun zamandır ccs ile program yazmıyorum ancak helpteki bilgilere göre anladığınız doğru. data'ya gelince zaten her pointer bir adres taşır onun için pointer derler zaten çünkü değişkenin kendisi değil onun adresini gösterir ve değişkene işaret eder. bundan dolayı pointer'ı bir arttırırsanız bellekteki bir sonraki ram adresini görürsünüz. neyse sizin kafanızı karıştıran şey & işareti. bunun kullanılmasının sebebi data değişkeninin bir pointer değilde normal bir değişken olması. yani data deyince karşımızda bir adres değil bir değişken var. fakat bize adres lazım olduğundan adres alma operatörü olan & kullanılıyor. yani data değişkenin kendisi, &data değişkenin adresi.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

oyhan

Farklı bir fonksiyon içerisinde bu değişkene ulaşmak zor olduğu için sanırım &data ile ramdeki yerine ulaşıyoruz ve içerisine dilediğimiz veriyi atıyoruz. Burada oluşurulan geçici bilgi, data değişkeninin adresi alınıp içerisine yazdırılıyor değilmi?

Hemen aklıma kafamdaki c ile ilgili sorunların çözülmesi amacıyla bir soru geliyor. Neden data değişkenine direk ulaşılamıyorum. Mesela bu program içerisinde data değişkenini global tanımlamıştım ama sonuç  hatalı oldu. Ancak şuanki şekilde yazınca normal çalıştı. Bende bunu anlamaya çalışıyorum. Bu kod satırı ayrı bir fonksiyon içerisinde yer alıyor.
BİRLİKTEN KUVVET DOĞAR:

Erkan Gench

hocam sorudan pek bişey anlamadım ama şöyle söyleyim burada datayı nasıl tanımladığınızın bir önemi yok fonksiyonun bir adrese ihtiyacı var sizde ona adres vermek zorundasınız. yani elinizde pointer varsa onu gönderirsiniz o zaten adrestir yok normal değişken varsa adresini aldırır onu gönderirsiniz. bunun sebebi zorluk falan değil adres alacak şekilde yapılmış fonksiyon o kadar.

ha derseniz ki niye adres almak için yapılmış bilmiyorum ama benim tahminim burada işlemleri birden fazla bayt ile yapabildiğinizden dolayı her bayta ayrı ayrı yazmak için elinizde adresin bulunması daha mantıklı çünkü tek yapacağınız adresi bir arttırmak. böylece bir sonraki bayta ulaşırsınız.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

Erkan Gench

Merhaba.

Tekrar düşününce global olmayan bir değişkene fonksiyon dışından erişmek mümkün olmadığı için fonksiyona o değişkenin adresinin gönderilmesi gerektiğini hatırladım.

Burada siz içeriği değiştirilmek üzere bir değişkeni fonksiyona bildiriyorsunuz fakat değişken yerel olarak tanımlanmışsa fonksiyon içinde buna erişilebilmesi için adresini göndermeniz gerekiyor. Yani adres gönderilmesinin asıl sebebi bu.

Gece vakti ancak bu kadar oluyor :)

Selamlar.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

kurumahmut

CCS nin helpinde yapılcak ufak bir araştırmayla kaydırma fonksiyonun

shift_left (address, bytes, value)

address is a pointer to memory, bytes is a count of the number of bytes to work with, value is a 0 to 1 to be shifted in.


şeklinde tanımlandığını görebiliriz. Yani data dedilen değişkene değil onun adresine ihtiyacı var bu fonksiyonun. data değişkeni ister global ister yerel ya da her ne olursa olsun onun adresini istiyor bu fonksiyon....