Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: gold3nnn - 13 Mayıs 2021, 14:43:56

Başlık: İnt eksi işaretli değişkenin 16lık Tabanda 0xfff4 gibi görünmesi
Gönderen: gold3nnn - 13 Mayıs 2021, 14:43:56
Hayırlı bayramlar.

Keil kullanarak Stm32f103 programlıyorum. 1 tane encoderim var okumada hiç bir sıkıntım yok, yalnız encoder saat yönü tersine yani eksi değere doğru giderken DEBUG tan izliyorum.

Counter değişkenim decimal gösterirken eksi değerleri görebiliyorum. Ama Hexadecimal şeklinde baktığımda 0xfff4 gibi görünüyor.

if(counter < 0 ){...} dediğimde counter değerini sürekli sıfırdan büyük görüyor. Bunun çözümü nedir?

İYİ BAYRAMLAR...
Başlık: Ynt: İnt eksi işaretli değişkenin 16lık Tabanda 0xfff4 gibi görünmesi
Gönderen: bayelektronik - 13 Mayıs 2021, 16:53:27
Derleyiciler negatif bilgisini 16 bitlik değişkenin 15. bitinde saklar. 0 dan 32767 kadar ilk dönem sayılar pozitif iken 32768 den 65535 kadar sayılar negatif anlam taşır. -1 bilgisi 65534 tür. Derleyici bu bilgileri desimal olarak kendi işler fakat siz bunu  hex olarak alırsanız direk hex görünür ve gerekli hesaplamaları sizin eklemeniz gerekir. Bu şekilde olduğunu biliyorum yanlışım varsa düzeltiniz.
Başlık: Ynt: İnt eksi işaretli değişkenin 16lık Tabanda 0xfff4 gibi görünmesi
Gönderen: z - 13 Mayıs 2021, 16:56:29
Counter degiskenini unsigned tanimlamissindir.
Başlık: Ynt: İnt eksi işaretli değişkenin 16lık Tabanda 0xfff4 gibi görünmesi
Gönderen: gold3nnn - 13 Mayıs 2021, 17:37:36
Tanımlamam şu şekilde işaretsiz değil diye biliyorum bu tanımlamayı yanlışım varsa düzeltin lütfen

int counter = 0;
Başlık: Ynt: İnt eksi işaretli değişkenin 16lık Tabanda 0xfff4 gibi görünmesi
Gönderen: gold3nnn - 13 Mayıs 2021, 17:38:34
Alıntı yapılan: bayelektronik - 13 Mayıs 2021, 16:53:27Derleyiciler negatif bilgisini 16 bitlik değişkenin 15. bitinde saklar. 0 dan 32767 kadar ilk dönem sayılar pozitif iken 32768 den 65535 kadar sayılar negatif anlam taşır. -1 bilgisi 65534 tür. Derleyici bu bilgileri desimal olarak kendi işler fakat siz bunu  hex olarak alırsanız direk hex görünür ve gerekli hesaplamaları sizin eklemeniz gerekir. Bu şekilde olduğunu biliyorum yanlışım varsa düzeltiniz.

Bu mantıklı geldi bana... eksili değerleri karşılaştırabilmem için ne yapmam gerekiyor hangi değerden hangisini çıkartmam gerek ?
Başlık: Ynt: İnt eksi işaretli değişkenin 16lık Tabanda 0xfff4 gibi görünmesi
Gönderen: z - 13 Mayıs 2021, 21:59:00
if (Counter>32767) Counter=Counter-65536;

dene.
Başlık: Ynt: İnt eksi işaretli değişkenin 16lık Tabanda 0xfff4 gibi görünmesi
Gönderen: gold3nnn - 14 Mayıs 2021, 11:59:59
Teşekkürler Konu Kilitlenebilir. Sorun Çözüldü.