Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Konuyu başlatan: apsis - 04 Ocak 2017, 14:16:22

Başlık: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 04 Ocak 2017, 14:16:22
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ı?
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: eeburakdemir - 04 Ocak 2017, 14:27:53
Deneme olarak aynı şekilde netbeans de aynı kısmı deneyebilir misin ? aynı sorunla karşılaşacak mısın acaba ?
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: vitruvius - 04 Ocak 2017, 14:28:31
Sorununuzu yansıtan  minimum uzunlukta bir örnek verirseniz biz de deneyip bakalım.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 04 Ocak 2017, 14:35:25
@vitruvius hocam normal değişken tanımladım. Özel bir şey yapmadım.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 04 Ocak 2017, 14:43:34
(https://s24.postimg.cc/w58dp86ld/Ekran_Al_nt_s.png) (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?
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: vitruvius - 04 Ocak 2017, 15:03:18
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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 04 Ocak 2017, 15:31:23
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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: eeburakdemir - 04 Ocak 2017, 15:39:24
Alıntı yapılan: apsis - 04 Ocak 2017, 14:43:34
(https://s24.postimg.cc/w58dp86ld/Ekran_Al_nt_s.png) (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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: HeCToR - 04 Ocak 2017, 19:52:05
@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
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 04 Ocak 2017, 23:54:23
@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
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: HeCToR - 05 Ocak 2017, 09:39:24
@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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: eeburakdemir - 05 Ocak 2017, 09:53:59
@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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: HeCToR - 05 Ocak 2017, 10:08:08
@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
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 05 Ocak 2017, 15:35:53
@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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: HeCToR - 05 Ocak 2017, 15:54:57
@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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: eeburakdemir - 05 Ocak 2017, 18:13:29
@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 ?
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: mehmet - 05 Ocak 2017, 19:35:27
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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: HeCToR - 05 Ocak 2017, 20:11:13
@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
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 06 Ocak 2017, 01:11:24
@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;

          }



        }
}
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 06 Ocak 2017, 01:15:23
@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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: baran123 - 06 Ocak 2017, 01:33:19
Hocam fonksiyondaki tanımlamayı şöyle yapıp bir deneyebilir misiniz ?

signed int i = -1;
signed int k = -1;
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 06 Ocak 2017, 02:20:32
@baran123 bunu da denedim normal yazımdan farkı olmuyor.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: mehmet - 06 Ocak 2017, 03:12:27
Uyuzluk yapan değişkenleri volatile olarak
tanımlayıp deneyiniz...
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: eeburakdemir - 06 Ocak 2017, 09:25:47
@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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: HeCToR - 06 Ocak 2017, 10:19:49
@apsis böyle denersen ne oluyor ?

signed int i = -1, k;
k = i;
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 07 Ocak 2017, 00:22:05
@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? :)
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: eeburakdemir - 07 Ocak 2017, 00:36:03
@apsis artık diyebileceğim birşey gelmiyor şuanda aklıma . Olursa yazarım yine.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: HeCToR - 07 Ocak 2017, 00:44:37
@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;
}
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: 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
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: eeburakdemir - 07 Ocak 2017, 03:50:31
Rica ederim @apsis ne demek kolay gele  ;)
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: HeCToR - 07 Ocak 2017, 09:45:04
@apsis dalga geçtiğini düşünmeye başlayacağım :D nasıl olmuyor
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: PROTECH_ - 07 Ocak 2017, 13:52:45
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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: HeCToR - 07 Ocak 2017, 14:10:53
@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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: PROTECH_ - 07 Ocak 2017, 15:56:18
@HeCToR
Ben yıllardır iksini birden kullanmış biri olarak, böyle bir tercihte ve izlenimde bulunuyorum.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: mehmet - 07 Ocak 2017, 21:25:51

  (http://www.zimagez.com/miniature/ekrangrnts2017-01-0721-25-16.php)
(http://www.zimagez.com/zimage/ekrangrnts2017-01-0721-25-16.php)
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: 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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: PROTECH_ - 08 Ocak 2017, 09:24:19
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.
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: HeCToR - 08 Ocak 2017, 11:52:04
@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 ;)
Başlık: Ynt: XC8'de sinir bozucu değişken problemi
Gönderen: apsis - 08 Ocak 2017, 17:57:29
@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 :)