CCSC Basamak değeri

burakoguz

Üye
Katılım
16 Mar 2022
Mesajlar
5
Puanları
1
Yaş
31
Herkese selamlar . Birbirinden bağımsız 3 adet rakamı birleştirerek 3 basamaklı bir sayı elde etmeye çalışıyorum. Bir fonksiyon oluşturarak 0 ile 255 arasında hiç problemsiz olarak çalışıyor ancak 255'i geçtiği zaman tekrar 0 oluyor . Burada sormak istediğim , fonksiyonlar en fazla kaç bit değer alıyor ? fonksiyon tanımlarken unsigned int16 olarak tanımladım ama yinede 8 bit i geçmiyor .

basamakla ilgili olan kısım aşağıdadır .


unsigned int16 (unsigned int x, unsigned int y){
.
.
.

unsigned int basamak1,basamak2,basamak3;
unsigned int16 deger;
deger=((basamak1 * 1 )+(basamak2*10)+(basamak3*100));
.
.
.
return deger;

}
 
Donen degerin 8 bit olduguna nasil karar verdin? Fonksiyondan geri donen sonucu int16 degiskene atadigindan eminmisin?
 
Evet seri ekrandan takip ettim eminim int16 değişkenine de atadım malesef olmadı
 
unsigned int basamak1,basamak2,basamak3

bunun yerine

unsigned int16 basamak1,basamak2,basamak3

denermisin
 
yazdıgınız şekilde çalıştı fakat( Interrupts disabled during call to prevent re-entrancy: (@MUL1616) Hatası veriyor o şekilde yaptığımda . Kesme kurdugum zaman sorun olurmu ?
 
Son düzenleme:
yazdıgınız şekilde çalıştı fakat( Interrupts disabled during call to prevent re-entrancy: (@MUL1616) Hatası veriyor o şekilde yaptığımda . Kesme kurdugum zaman sorun olurmu ?

10 ve 100 ile carpma islemini Interrupt rutini icinde kullanmazsan sorun olmaz.

Eger ille de int rutini icinde kullanacaksan (Ana programda ve int rutininde carpma yapiyorsan) bu islem bitene kadar interruptlari disable etmen gerekecek.

Yada;

10 ile carpma islemi yerine (basamak2<<3)+(basamak2<<1)
100 ile carpma islemi yerine (basamak3<<6)+(basamak3<<5)+(basamak3<<2)

Seklinde yaparsan carpmaya gerek kalmaz. Eger 16 bit toplamada reentry problemi yoksa bu dertten de kurtulmus olursun.
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,308
Kullanıcılar
449,850
Son üye
umutbaysal9

Yeni konular

Çevrimiçi üyeler

Geri
Üst