Picproje Elektronik Sitesi

DERLEYİCİLER => MikroC - PIC => Konuyu başlatan: universitelim54 - 04 Haziran 2018, 00:18:51

Başlık: Bu komutları bilen varmı?
Gönderen: universitelim54 - 04 Haziran 2018, 00:18:51
 mrb arkadaşlar aşagıdaki komutları bilen bir arkadaş yorumlayabilir mi .


1 soru 
byte intsayi1 = (deger1   & 0xFF);
byte intsayi2 = ((deger1 >> 8) & 0xFF);

2 soru
if(d & 0x80 ==0x80 )
{
}



Saygılarımla
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: Mucit23 - 04 Haziran 2018, 00:34:22
16 bitlik bir sayı(deger1) 2 adet 8 bitlik parçaya bölünmüş

LowByte intsayi1
HighByte intsayi2
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: universitelim54 - 04 Haziran 2018, 00:41:52
mucit23 süpersin tşk 2 sorudaki cevabınız  nedir acaba

Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: Kabil ATICI - 04 Haziran 2018, 01:05:10
bunlar C'de kullanılan genel kodlar

ikincisi herhangi bir değişkenin en anlamlı bitinin 1 olup olmadığını kontrol etmek üzere kullanılıyor.
giriş değişkeninin önce en anlamlı bitini izole (AND işlemi ile) ediyor, sonra bu değerin 1 olup olmadığını kontrol ediyor..
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: foseydon - 04 Haziran 2018, 11:14:01
ikinci sorudaki ifade bence hatalı. yanlış hatırlamıyorsam == operatörü & operatöründen önce hesap ediliyor, bu durumda ifade her türlü doğru çıkar.
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: mir_as82 - 04 Haziran 2018, 16:13:57
İf içindeki d nin ne olduğu belli olmadığından compile time hatası alırsın bence
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: sadogan - 04 Haziran 2018, 16:54:56
Alıntı yapılan: foseydon - 04 Haziran 2018, 11:14:01ikinci sorudaki ifade bence hatalı. yanlış hatırlamıyorsam == operatörü & operatöründen önce hesap ediliyor, bu durumda ifade her türlü doğru çıkar.
Yanlış hatırlıyorsunuz.
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: foseydon - 04 Haziran 2018, 16:57:15
Alıntı yapılan: sadogan - 04 Haziran 2018, 16:54:56Yanlış hatırlıyorsunuz.

siz söyleyince kontrol ettim, doğru hatırlıyormuşum.

http://en.cppreference.com/w/c/language/operator_precedence

önemi de yok, parantez işareti ile niyet açıkça belli edilmeli bence.
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: universitelim54 - 04 Haziran 2018, 19:35:42
d 8 bit int değerdir cevaplar için herkese teşekkürler kabil kardeşimizin dediği gibi bir sonuç aldım
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: sadogan - 05 Haziran 2018, 12:11:41
Alıntı yapılan: foseydon - 04 Haziran 2018, 16:57:15siz söyleyince kontrol ettim, doğru hatırlıyormuşum.

http://en.cppreference.com/w/c/language/operator_precedence

önemi de yok, parantez işareti ile niyet açıkça belli edilmeli bence.
Kontrol ettim , ben yanlış hatırlıyormuşum.
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: ete - 05 Haziran 2018, 12:28:04
Kodların yanlış yada doğruluğu konusunda bir yorum yapmadan yapılmak istenenleri açıklamayı tercih ediyorum.
1 soru
byte intsayi1 = (deger1   & 0xFF);
Burada Deger1 ile $FF sayısı AND işlemine sokuluyor ve sonuç Byte değişkeni olan sayı1 değişkenine veriliyor.Burada temel amaç deger1 değişkeninin HIGH olan bitleri kopyalanıp Sayı1 değişkenine aktarılıyor.

byte intsayi2 = ((deger1 >> 8) & 0xFF);
Burada Önce deger1 8 bit sağa kaydırılıyor sonra elde edilen bu sayı $FF ile AND işlemine sokuluyor ve sonuç Sayı2 ye veriliyor. Yine amaca bakarsak Muhtemelen 16 bitlik olan deger1 değişkeninin Yuksek değerlikli kısmı düşük değerlikli kısama kaydırılıyor ve sayı otomatikman 8 bite indirgenip o kısmı alınıp Sayı2 değişkenine aktarılıyor.

2 soru
if(d & 0x80 ==0x80 )
Burada Şayet d AND $80=$80 şeklinde bir ifade var. Bunu binary yazarsak daha iyi anlaşılır. d AND %10000000=%10000000 kısaca bu işlem d isimli değişkenin 7 ci bitinin HIGH olup olmadığına bakıyor.

Ete
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: fide - 05 Haziran 2018, 18:25:35
@ete hocam güzel açıklamışsınız. Teşekkürler
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: devrecii - 05 Haziran 2018, 21:54:59
İkinci problemi  şu şekilde yaparsanız optimizasyon yapmış olursunuz

Sadece bu kadar
  if( d & 0x80)
   {     
   
   }

Birincide eğer direk hafızadan byte olarak alrısanız optimizasyon yapmış olursunuz. 16bit iki byte dir tek tek alabilirsiniz.



Mcu lar yavaş biliyorsunuz optimizasyon şart.
Başlık: Ynt: Bu komutları bilen varmı?
Gönderen: universitelim54 - 05 Haziran 2018, 23:48:02
32bitlik bir veri spi haberlesme ile birsensore atilmak isteniyor buyuzden veri8 bite parcalaniyor