Merhabalar,
Son zamanlarda xc8 de int değişkenleri tanımlarken sıkıntı yaşıyorum. Değişkenker hiç bir şekilde negatif olmuyor. Ayrıca <stdint.h> kütüphanesiyle de denedi olmadı. Normalde başına signed ya da normal int yazdığımda negatif sayıları tanıması gerekli. Önceden böyle bişey başıma gelmiyordu. Aynı durum char değişkenleri için de geçerli. Sinirlerim bozuldu >:( . Bu durumu yaşayan ya da yardım edebilecek var mı?
Deneme olarak aynı şekilde netbeans de aynı kısmı deneyebilir misin ? aynı sorunla karşılaşacak mısın acaba ?
Sorununuzu yansıtan minimum uzunlukta bir örnek verirseniz biz de deneyip bakalım.
@vitruvius hocam normal değişken tanımladım. Özel bir şey yapmadım.
(https://postimg.cc/image/w58dp86ld/)
sağda değişkenlerden biri -1 biri 0 gözüküyor. iki değişkeni yer değiştridiğimde bu sefer diğeri -1 diğeri de 0 oluyor. Yav arkadaş neden öyle bir saçmalık var. Kürekli diyemi hep bunlar.
@eeburakdemir dediğin gibi netbeans a geçtim en azından yukarıdaki gibi oldu. yani birisi eksiye indi. Bunun netbeans profiliyle ne alakası var?
Birazdan bakacağım da Proteus'u salla, MPLAB ile debug yaparken de böyle mi görüyorsun değerleri?
Bu arada şunu söylemeliyim ki
char tipi değişken için işaret bildirmezsen otomatik olarak
unsigned tanımlanır.
Alıntı yapılan: MPLAB® XC8 C Compiler User's Guide, Bölüm: 5.4.2, Sayfa: 143If no signedness is specified in the type, then the type will be signed except for the char types which are always unsigned.
char'ı işaretli belirttiğim halde de tanımıyor. Proteus değişken değerlerini doğru gösteriyor. Değişkenleri aynı şekilde global tanımladığımda bu sorun ortadan kalktı. Ancak yerel değişkenlerde bu sorun oluşuyor.
Alıntı yapılan: apsis - 04 Ocak 2017, 14:43:34
(https://postimg.cc/image/w58dp86ld/)
sağda değişkenlerden biri -1 biri 0 gözüküyor. iki değişkeni yer değiştridiğimde bu sefer diğeri -1 diğeri de 0 oluyor. Yav arkadaş neden öyle bir saçmalık var. Kürekli diyemi hep bunlar.
@eeburakdemir dediğin gibi netbeans a geçtim en azından yukarıdaki gibi oldu. yani birisi eksiye indi. Bunun netbeans profiliyle ne alakası var?
@apsis mplabx netbeans arayüzünü ve temelini kullanıyor. Bazı güncellemelerde pc inde netbeans varsa onuda güncelliyor. Ben bazı programlar için denemelerimi burada yapıyorum daha rahat oluyor , o yüzden tavsiye ettim. Şunu dener misin birde, CTRL basılı tutup int üzerine tıkladığında kaynak koduna gitmen gerekiyor. Seni acaba doğru yere götürüyor mu ? Hepsi tamam yine de aynı ise , sanırım bu tanımlamalar bir alt fonksiyonda gerçekleşiyor, bu yüzden int başına static yazıp denemeni tavsiye ederim.
@apsis main içerisinde import ederken sıralamaya uymanda fayda var.
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
<stdint.h> içerisine başlıkları import edip satır sonuna 2 #endif atıp denermisin.
#ifndef __STDINT_H
#define __STDINT_H
/*
*
* tipler vs.
*
*/
#endif
#endif
@eeburakdemir normal "int" içinCTRL tuşuyla fonksiyon ya da kütüphane kaynak dosyalarına geçiş yapılabiliyor. "int8_t" şeklindeki yazımda ilgili .h doyasında gösteriyor ve burada
#ifndef int8_t
typedef signed char int8_t;
#define int8_t int8_t
#define INT8_MIN (-128)
#define INT8_MAX (127)
#endif
şeklinde aralıklarla tanımlanıyor ancak yine de yerel değişknlerde bu sıkıntı oluşuyor.
@HeCToR bende sadece aşağıdakiler ekli.
#include <xc.h>
#include <stdint.h>
#include "lcd.h"
senin gösterdiğin kütüphaneleri denediğimde de düzelme olmadı.
MPLAB'de debug'da da proteusta gözüktüğü biçimde gözüküyor
@apsis library içeriğini denedinmi main içinde import ettikten sonra yine olmazsa pc ile alakalı bir sıkıntı var compilerı ilaçlı kullanıyorsun değilmi optimizasyonu pro olarak seçtinmi çalışmış olduğun proje başlığı altında son ihtimal komple silip ideyi ve compilerı yeniden kur.
@apsis şimdi compiler direk suçlamak istemiyorum. Kütüphanedeki tanımı direk yaptığında olmuyorsa yazılımı biraz daha kontrol etmek gerekebilir. Biliyorsun ki insan böyle durumlar da biraz daha dikkatsiz olabiliyor ve gözden kaçma ihtimali artıyor :) . Duruma göre artık silip tekrar yükleyeceğim dersen bilemem. Önce yazılımın hatasız olması lazım. Bunu takip etmek amacıyla led vs takip edebileceğiniz olaylar ile kontrol etmekte fayda var. Tabi compiler yüzde yüz haklıdır demiyorum , crack işini tam yaptınız mı ? Ayrıca güncellendi ya mplabx 3.5 geldi geçenlerde. Bu farkı optimizasyon ettikten sonra derleyince alt kısımda pro yada free yazısından ayırt edilebiliyor.
@apsis xc8 compilerda çok sıkıntılar ve hatalar var daha oturtamadılar bu yüzden sürekli güncellemeler geliyor zaten :D kodunuzu paylaşın deneyelim daha önceki yazımdada kurulum hatası yapmış olabilirsiniz bana sorarsanız hi-tech kullanın derim
@HeCToR H-TECH kullanmak isterim ama full kürekli bulamıyorum. Varsa paylaşırsanız makbule geçer. Optimizasyon pro'da
@eeburakdemir IDE versiyon 2.2 compiler ise 1.33 hiç güncellemedim. Kürek uygulamasını ise forumdaki bir konudan yararlanarak yapmıştm. İki yıldır kullanıyordum böyle bir olay başıma ilk kez geldi. Son versiyon için kürekli bir bağlantı varsa deneyebilirim.
@apsis eve geçince bakıyım hi-tech için var bende xc8 için aynı kürek bütün versionlarda geçerli.
@apsis versiyonları güncellesen kesin düzelir mi bilemem ama gerçekte denemiştiniz değil mi ? O halde biryerde işleri bozan bir durum var. Dediğim şekilde led vs kontrol ettiniz mi ?
Havanda su dövene kadar kodlarınızın basit
halini yayınlasanız. Bunun üzerinden gidebiliriz.
Biraz önce deneme yaptım, bir sıkıntı çıkmadı
negatif sayı ile ilgili.
@mehmet hocam bizdede çıkmıyor ne yazıkki :D :D bir defa karşılaştım bende başıma geldi kendi kendine düzeldi boşunamı söylüyoruz daha oturtamadılar diye hi-tech var mis gibi :D
@eeburakdemir basit programlar çalışıyor.
@mehmet bu fonksiyon içindeki değişkenden bahsediyorum. Diğer fonksiyonlarda global, mainde yerel değişkenler kullanıyorum
void ayar(void)
{
int i=-1,k=-1; // burada i=0, k=-1 gözüküyor. ikisinin yerini değiştirdiğimde k=0,i=-1 oluyor.
lcd_gotoxy(1,1);
lcd_yaz("Aciyi Seciniz: ");
lcd_gotoxy(2,1);
lcd_yaz("1:30 2:60 3:80");
while(1)
{
if((RD4 || RD5 || RD6 || RD7)!=0);
i=key_pad();
if(i==1)
{
lcd_clear();
lcd_gotoxy(1,1);
lcd_yaz("30 Derece Secili");
__delay_ms(1000);
i=-1;
key=-1;
lcd_clear();
lcd_gotoxy(1,1);
lcd_yaz("Sureyi Giriniz:");
lcd_gotoxy(2,1);
lcd_yaz("00 Saniye");
while(1)
{
while(1)
{
i=key_pad();
if(i>-1)
{
key=-1;
break;
}
}
i=i*10;
lcd_gotoxy(2,1);
veri_yolla(i/10+48);
while(1)
{
k=key_pad();
if(k>-1)
{
key=-1;
break;
}
}
lcd_gotoxy(2,2);
veri_yolla(k%10+48);
m=k+i;
i=-1;
key=-1;
if(m>0)
{
lcd_gotoxy(2,1);
veri_yolla(m/10+48);
veri_yolla(m%10+48);
lcd_gotoxy(2,4);
lcd_yaz("saniye");
__delay_ms(1000);
break;
}
}
k=-1;
break;
}
if(i==2)
{
lcd_clear();
lcd_gotoxy(1,1);
lcd_yaz("60 Derece Secili");
__delay_ms(1000);
i=-1;
key=-1;
lcd_clear();
lcd_gotoxy(1,1);
lcd_yaz("Sureyi Giriniz:");
lcd_gotoxy(2,1);
lcd_yaz("00 Saniye");
__delay_ms(1000);
while(1)
{
while(1)
{
i=key_pad();
if(i>-1)
{
key=-1;
break;
}
}
i=i*10;
lcd_gotoxy(2,1);
veri_yolla(i/10+48);
while(1)
{
k=key_pad();
if(k>-1)
{
key=-1;
break;
}
}
lcd_gotoxy(2,2);
veri_yolla(k%10+48);
n=k+i;
i=-1;
key=-1;
if(n>0)
{
lcd_gotoxy(2,1);
veri_yolla(n/10+48);
veri_yolla(n%10+48);
lcd_gotoxy(2,4);
lcd_yaz("saniye");
__delay_ms(1000);
break;
}
}
k=-1;
break;
}
if(i==3)
{
lcd_clear();
lcd_gotoxy(1,1);
lcd_yaz("80 Derece Secili");
__delay_ms(1000);
i=-1;
key=-1;
lcd_clear();
lcd_gotoxy(1,1);
lcd_yaz("Sureyi Giriniz:");
lcd_gotoxy(2,1);
lcd_yaz("00 Saniye");
__delay_ms(1000);
while(1)
{
while(1)
{
i=key_pad();
if(i>-1)
{
key=-1;
break;
}
}
i=i*10;
lcd_gotoxy(2,1);
veri_yolla(i/10+48);
while(1)
{
k=key_pad();
if(k>-1)
{
key=-1;
break;
}
}
lcd_gotoxy(2,2);
veri_yolla(k%10+48);
j=k+i;
i=0;
key=-1;
if(j>0)
{
lcd_gotoxy(2,1);
veri_yolla(j/10+48);
veri_yolla(j%10+48);
lcd_gotoxy(2,4);
lcd_yaz("saniye");
__delay_ms(1000);
break;
}
}
k=-1;
break;
}
}
}
@HeCToR programı önceden yazmıştım. Normalde çalışıyordu, bazı değişiklikler yapıp tekrar derlediğimde bu sorunla karşılaştım. yaptığım değişiklik programın bu kısmıyla ilgili de değildi. Sadece main fonksiyonunun başında LCD'ye bazı yazılar yazıyordu onu değiştirdim.
Hocam fonksiyondaki tanımlamayı şöyle yapıp bir deneyebilir misiniz ?
signed int i = -1;
signed int k = -1;
@baran123 bunu da denedim normal yazımdan farkı olmuyor.
Uyuzluk yapan değişkenleri volatile olarak
tanımlayıp deneyiniz...
@apsis senin kodda break komutları biryerde fazla mı yoksa ben mi yanılıyorum :/ attığın fonksiyonda 69.satırdaki ve 131. satırdaki break hangi while döngüsünü kırıyor orayı göremedim.
@apsis böyle denersen ne oluyor ?
signed int i = -1, k;
k = i;
@eeburakdemir break komutlarında fazlalık yok. 131 satırdaki break fonksiyonda sonsuz döngüye girdiği için işlem gerçekleştiğinde bu döngüyü kırmak için kullandım.
@HeCToR değişen birşey olmadı. Bana hi-tech c atacaktınız ne oldu? :)
@apsis artık diyebileceğim birşey gelmiyor şuanda aklıma . Olursa yazarım yine.
@apsis sormayınca bende sorma gereği duymadım özelden mail adresi atarsan gönderirim.
signed int i = -1, k;
k = i;
Bu şekilde denedinmi sonuç ne çıkıyor.
yada
signed int i, k;
void main(){
i = -1;
k = -1;
}
@HeCToR gösterdiğin şekilde yaptım olmadı. ÖZelden mailimi yazıyorum :)
@eeburakdemir çok teşekkür ederim ilgin ve alakan için
Rica ederim
@apsis ne demek kolay gele ;)
@apsis dalga geçtiğini düşünmeye başlayacağım :D nasıl olmuyor
Alıntı yapılan: apsis - 07 Ocak 2017, 03:20:03
@HeCToR gösterdiğin şekilde yaptım olmadı. ÖZelden mailimi yazıyorum :)
@eeburakdemir çok teşekkür ederim ilgin ve alakan için
apsis geç arm çekirdekli bir işlemciye mesela stm32f0 serisi fiyat olarak 8-16 bit aratmaz, en azından bu sıkıntılardan emin olursun.
Bende bazen garip garip problemlerle karşılaştığım oldu, devşirme yollarla çözmek zorunda kaldım, 32 bit o konularda bir gömlek üstte.
@PROTECH_ 2 dakikada yerle bir ettin yıllarını vermiş koskoca microchipi ne alakası var arm geçmekle sorun arkadaşın pcden veya başka birşeyden kaynaklı bizlerde sorun yok milyonlarca kullanıcıda akıl yok kullanıyor hemde 8 bit ve 16 bit dünyada satışı en çok olan ürün lütfen insanların aklını böyle düşüncelerle kurcalamayalım sanki keil dört dörtlük hiç bir sıkıntı çıkarmıyor arkadaşın paylaşmış olduğu kodu gördünüzmü 32 bit kullanmasını gerektirecek ne var ? ayrıca derleyici sıkıntısı ile arm kullanmanın ne alakası var.
@HeCToR Ben yıllardır iksini birden kullanmış biri olarak, böyle bir tercihte ve izlenimde bulunuyorum.
(http://www.zimagez.com/zimage/ekrangrnts2017-01-0721-25-16.php)
@HeCToR ne dalga geçmesi :)). hocam volatile şeklinde tanımladım oldu. Sonra normal bir şekilde int olarak tanımladım yine oldu.
@PROTECH_ STM discovery ile alıştırmalar yapıyorum. Ama bu problem ide ya da compiler ile alakalı bir durum.
Alıntı yapılan: apsis - 08 Ocak 2017, 08:43:55
@HeCToR ne dalga geçmesi :)). hocam volatile şeklinde tanımladım oldu. Sonra normal bir şekilde int olarak tanımladım yine oldu.
@PROTECH_ STM discovery ile alıştırmalar yapıyorum. Ama bu problem ide ya da compiler ile alakalı bir durum.
Hangi tool kullanion onunla ilgili. Farklı bir düşünce yok, sadece hangisi daha güzeldir mevzu bundan ibarettir. 32 bit tool lar stabil bana göre.
@apsis tamamen tesadüf :D önceki mesajımda yazdığım gibi ilk versiyondan bir sonrakinde başıma geldi aynı sendeki hadise gibi geri düzeldi eski versiyonlarda bazı fonksiyonlar için warning veriyordu son ve ondan önceki versiyonlarda warninglerde düzeldi eksikler var sonuçta yeni git gide sorun kalmıyor ;)
@PROTECH_ https://www.picproje.org/index.php/topic,35721.0.html buradaki linkten başladım. şimdilik port kontrolü yapıyorum. Register seviyesinde kalmak istiyorum şimdilik. Bunun için önerilere açığım. Daha sonra diğer platformlarda yine aynı işlemci için farklı denemeler yapabilirim.
@HeCToR bazen insanı böyle çileden çıkarabiliyor :). İlgin ve alakan için çok teşekkür ederim. Ve tabi diğer arkadaşlar içinde :)