Derleyici hatası ccs pic c

S.Ahmet

Üye
Katılım
5 Ağu 2011
Mesajlar
9
Puanları
1
Arkadaşlar ccs Pic c de grph_img.rtf.c dosyasının bulunamadığını söyleyen bir hata alıyorum. Anladığım kadarıyla kütüphaneyi bulamıyor ancak bu kütüphanenin adı hiç kodlar arasında geçmiyor zaten.

Yardımcı olabilirseniz Sevinirim

Kodlar
Kod:
#include <16f727.h>
#fuses NOWDT,NOPROTECT,MCLR
#use delay (INTERNAL=4M)
#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#define use_portb_lcd TRUE   // LCD B portuna bağlı
#include <lcd.c>   // lcd.c dosyası tanıtılıyor
#use TOUCHPAD (PIN_D0='A',PIN_D1='B',PIN_D2='C',PIN_D3='D',)
#define LED1 PIN_C2
#define LED2 PIN_C1
#define ZURNA PIN_C3




int ok==0;
int deger==0;
int zaman==0;
int z;
int y;
int g;
int p;
lcd_send_byte(0, 1); //LCD TEMİZLE
output_high(LED1);
output_low(LED2);


void OK1(int a, int b, int c,){
     if (a==1){
         printf(lcd_putc,"\f MERHABA"); // LCD'ye veri gönderiliyor
         delay_ms(3500);
         printf(lcd_putc,"\f SICAKLIK GiRiNiZ"); // LCD'ye veri gönderiliyor
         lcd_gotoxy(1,2);   // Kursör 1.sütun, 2.satıra konumlandırılıyor.
         printf(lcd_putc,"\f 0 ");
         lcd_gotoxy(1,1);
         return;
         }
      else if (a==2) {
           for(z=0, z<5, ++z){
                    printf(lcd_putc,"\f                     "); // LCD'ye veri gönderiliyor
                    lcd_gotoxy(1,2);   // Kursör 1.sütun, 2.satıra konumlandırılıyor
                    printf(lcd_putc,"\f                     "); // LCD'ye veri gönderiliyor
                    output_low(LED2);
                    delay_ms(1000);
                    lcd_gotoxy(1,1);   // Kursör 1.sütun, 2.satıra konumlandırılıyor
                    printf(lcd_putc,"\f   ISITILIYOR   "); // LCD'ye veri gönderiliyor
                    output_high(LED2);
                    delay_ms(1000);
                    }
             printf(lcd_putc,"\f   HAZIR   "); // LCD'ye veri gönderiliyor
             output_high(LED2);
             return;
             }
       else {
             printf(lcd_putc,"\f   Kapatatılıyor   "); // LCD'ye veri gönderiliyor
             delay_ms(1500);
             output_low(LED2);
             delay_ms(1500);
             lcd_send_byte(0,0x08); //display off display
             reset_cpu(); // reset atmak için
       }
}


 void DEGER1(int e, int f, int g,){
      if(e==1){
               y=50*f;
               lcd_gotoxy(1,2);   // Kursör 1.sütun, 2.satıra konumlandırılıyor.
               printf(lcd_putc,"\fX DEGERI=%d",y);
               lcd_gotoxy(1,1);
               }
      else {
               y=5*f;
               lcd_gotoxy(1,2);   // Kursör 1.sütun, 2.satıra konumlandırılıyor.
               printf(lcd_putc,"\fX DEGERI=%d",y);
               lcd_gotoxy(1,1);
               }
      return;
      }
      
 void ZAMAN1(int h, int l, int m,){
      if (m==1){
                if(h==2){
                         printf(lcd_putc,"\f Zaman Ayari"); // LCD'ye veri gönderiliyor
                         lcd_gotoxy(1,2);   // Kursör 1.sütun, 2.satıra konumlandırılıyor.
                         printf(lcd_putc,"\f 0 ");
                         lcd_gotoxy(1,1);
                         }
                }
      else {
           for (p=m*5;p>0;--p){
               printf(lcd_putc,"\f Kalan Süre"); // LCD'ye veri gönderiliyor
               lcd_gotoxy(1,2);   // Kursör 1.sütun, 2.satıra konumlandırılıyor.
               printf(lcd_putc,"fX DEGERI=%d",p);
               delay_ms(1000);
               }
           lcd_gotoxy(1,1);
           output_high(ZURNA);
           delay_ms(1000);
           output_low(ZURNA);
           printf(lcd_putc,"\f   HAZIR   "); // LCD'ye veri gönderiliyor
           lcd_gotoxy(1,2);
           printf(lcd_putc,"\f                      ");
           lcd_gotoxy(1,1);
     
           }
}


         
         




void main() {
        char k;
        enable_interrupts(GLOBAL);
        
        for (;;){
                if (TOUCHPAD_HIT()){
                        k=TOUCHPAD_GETC();
                        if(k=='A'){
                                ok == ok+1;
                                OK1(ok, deger, zaman);
                        }        
                        else if (k=='B'){
                                deger == deger+1;
                                if (deger>>3){
                                   deger ==3;
                                   DEGER1(ok, deger, zaman);
                                   }
                        }        
                        else if (k=='C'){
                                deger == deger-1;
                                if (deger<<0){
                                deger ==0;
                                DEGER1(ok, deger, zaman);
                                }
                        }                
                        else if (k=='D'){
                                zaman==zaman+1;
                                ZAMAN1 (ok, deger, zaman);
                                if (zaman==2){
                                   zaman=0;
                                   }
                                if (ok == 2){
                                   }
                                else {
                                      zaman= 0;
                                     }
                                }
                                
                        }        
                } 




        }        
}

 
Atama operatörü = yerine bir çok yerde == kullanmışsın. Zaman==zaman+1 gibi. Bunları düzelt ve yeniden dene.

KontrolKalemi Mobile ile gönderildi.
 
aynı sorun bende de var, o mesaj hatasını düzeltseniz bu sefer de "16f727.h" dosyasını açamıyorum mesajı alacaksanız büyük ihtimalle. Ya bir program kurulum hatası ya da yazılım dili ile kullanılan program arasında uyumsuzluk olabilir mi? Örnek ben MPLAB üzerinden bir proje deniyorum, microchip üzerinden CCS C ile uyumlu çalışması için bir dosya yükledim, (ledin yanıp sönme projesi-high/delay/low/delay şeklinde) 16f877.h dosyası okunamıyor mesajı alıyorum. Belki de dosya uzantıları ile bir sorun yaşıyorum.
Not: Biraz önce sorun düzeldi ancak şimdi de crg dosyası istiyor. Yaptığım işlem: mplab'ın "language tool suit"ine ccsc yi girmek ve doğru adımları takip etmek. Konuyu google da bulmak mümkün ya da kaynak "ccs c ile pic programlama" kitabı (belki yazar adı vermek yasaktır bilmiyorum)
 
Son düzenleme:
Hamdisuat bende de dediğin gibi oldu şu an dosya hatası alıyorum. c compiler kullanıyorum. Sanırım benim sorunum 16f727 nin kütüphanede tanımlı olmamasından kaynaklanıyor. Desteklenen device lara baktığımda 727 yi göremedim. Kütüphaneyi nasıl güncelleyebilirim biliyormusun
 
ben şimdi cd içerisinde HI-TECH compiler ı kurdum ve derleme (build) komutu çalıştı;
bu dosyada
#include <htc.h>


/*
* Example code for using timer0 on a 16F84
* Just sets up a 1 second interrupt and increments a variable
*/


/*
* Calculate preload value for one second timer
*/


#define PERIOD 1000000 // period in uS - one second here
#define XTAL 4000000 // crystal frequency - 4MHz


#define IPERIOD (4 * 1000000 / XTAL) // Period of instruction clock in uSeconds


#define SCALE 256 // Timer 0 prescaler
#define T0_TICKS 256 // Number of counts for interrupt


#define TICK_PERIOD (SCALE * IPERIOD) // Period (uSec) of one increment of timer 0


#define RELOADS ((PERIOD/T0_TICKS)/TICK_PERIOD)


unsigned long seconds; // second count
near char reload = 0;


/* service routine for timer 0 interrupt */
void interrupt
timer0_isr(void)
{
if(reload == 0){
// effect a change on PORTB whenever our desired period is reached.
// Note this timing will contain a margin of error.
reload = RELOADS + 1;
seconds++;
PORTB++; // effect a change on PORTB
}
reload--;
T0IF = 0;
}


main()
{
// initialize timer 0;

OPTION = 0b0111; // prescale by 256
T0CS = 0; // select internal clock
T0IE = 1; // enable timer interrupt
GIE = 1; // enable global interrupts
TRISB = 0; // output changes on LED

for(;;)
continue; // let interrupt do its job
}
hata vermesi nedeni ile "option" satırını kaldırdım ve "derleme başarılı" bilgisini aldım. Bilgisayarında *.h komutlarını tara ve ilgili klasör altına atmayı bir dene.
 
benim yazdığım program 16f727.h dosyasını çağırıyor. Hatayı bu dosyada veriyor. çağrının içindeki

# device 16f727

satırı işaret edilerek bilinmeyen device hatası veriyor. Bunu sildiğimde de device tanımlaması yapılmadı diyor. device seçeneklerine girdiğimde 16f727 nin compiler listesinde yer almadığını gördüm. Yani compiler ürünü bilmiyor ama arayüz kodlarını içeriyor. daha önceden ccs c de 727 için derleme yapıldığını biliyorum. Ya derleyiciye 727 yi tanıtmanın bir yolu var yada daha güncel bir sürümünde bu hata düzeltilmiş. derlemeyi daha yeni bir sürümle deneyeceğim bendeki 4,05 sanırım
 
bence sorun şu, bir derleyiciler (mplab gibi) var bir de komut programları (CCS C ve HI-TECH C gibi) var ve bunlar arasında uyuşmazlık söz konusu. CCS C dll cfr dosyalarını bulamıyorum diyor, HI TECH de "failed" hatası veriyor. Örneğin; #include <pic16fxxx.h> birinde çalışırken, diğerinde, <pic.h> gibi genel bir komut çalışıyor (tahmindir) . Bazı sitelerde uyumla çalışan programları kontrol edip, sonra da o dil üzerinde uzmanlaşmak gerekiyor benim anladığım.
 
Derleyici hatasından önce kullanıcı hatasını göz önüne alın.
C nin ve kullanılan derleyicinin ve elbette elemanın özellikleri yani help leri pdf leri çoğu zaman iplenmez.
Bir yerlerden alınmış az değiştirilmiş derlenmemiş..
Grafik dosyası yokmuş geçmiyormuşmuş ama her nasılsa touchpad kullanılıyor - pin tanımlanmış ?
Sizdeki lcd.c ile yazanın lcd.c dosyasının içeriği aynı mı ?

Ya da verilen satırlarda gözükmese de Project wizard da neler seçildi ve o 16f677.h nin içinde neler var.
Bazı arkadaşlar dosyanın tamamını bilerek veya bilmeyerek vermezler.
Ve ayrıca kullanılan versiyon Nuh nebiden sonraki devirlere ait olup olmadığı kontrol edilmelidir .
Hali hazırda 5.017 var..
Tabii bug ( hatada ) olabilir.
Ama yazan paylaşmış olduğuna göre bir şekilde derlenmiş varsayabiliriz.


Derleyici bulamadım diyorsa nereye bakacağını söylemeniz gerekir.

#include <lcd.h> ile #include "lcd.h" için farklı dosyalar yoklanır !
 
Sn.Uğur üstadım, ben 50 yaşımdan sonra bu işe gönül verdim. Bu nedenle de çok yanlış yapma olasılığım var. Anladığım, "xxx" ifadesi sanırım çalışma yapılan klasörde .h uzantılı dosyayı arıyor. Bu gün bir başka .as dosyasında "processor pic16fxxx" gibi bir satır komutunun geçerli olduğunu gördüm. Sonuç olarak, aygıt ile (brenner8 gibi) irtibatı sağlayan program ile (örnek MPLAB-donanım yazılımı dersek)) kodların yazıldığı bir program var. (CCS C vb-buna derleyici dersek). Eğer bir kişi filanca uzantılı dosya yok mesajı alıyor ise, derleyici yüklenmemiş ya da eksik yüklenmiş demektir. Ancak, "failed" mesajı alıyor ise yüklemelerde değil de derleyici kodlarının yazılımında bir hata var demektir. Bu örneklerde verilenler üzerinden açıklama yaparsam, MPLAB içinde de hangi derleyici kullanılacağı da ayrıca belirtilmelidir. Burada sorum şudur, MPLAB'ın kendi derleyici dili de var sanırım, bu konuda bilgi verebilir misiniz-Saygılarımla
 
Derleyici programlar , header-driver dosyalarına bakarlar ve kullanılan dil kuralları çerçevesinde çeşitli uzantılarda dosyalar üretirler.
Yani sadece derleyici yetmiyor.
Örnekdeki ccsc için kendi derleyicisi ve header driver dosyaları gerekiyor.
Ya da mplab kullanıyorsanız kurulumda ccsc yi tanıyor ve (tabii ccsc kurulu olmalı) ona göre derleme yapıyor.
Ccsc derleyicisi varken mplab kullanmanın bir avantajı yok.
Kendi derleyicisi help leri kuralları filan daha kullanışlı olur.
Aynı şekilde Hi-Tech içinde yazabiliriz.
Özellikle iyi derece C bilmeyenler için kullanışlı olmayan ve desteği kesilmiş bir program.
Kurulduğunda çeşitli örnek dosyalarında birinde lcd.c diğerinde math.c-.h ara ki bulasın derleme dosyasına koyasın bir program.
Kendi derleyicisi güzel bir ara yüze sahipti.
Şimdilerde microchip in özellikle c için derleyicisi var mplabx ide.
Diller arası fark çok azdır.
CCSC gibilerde kendilerine has komutları ile bir takım rutinleri tek komutla halletme açısından kolaylık sağlar farklar bunlardır.
Ama temel c kuralları aynıdır.

Özet olarak sonuç da mcu ya yüklenecek dosya .hex uzantılıdır ve bunu yüklemek için derleyiciye ihtiyaç yoktur.
Yükleme programına doğrudan bu .hex dosyasını göstermeniz yeterlidir.

Yükleyici olarak microchip in kendi cihazlarını ya da clone lerini öneririm.
Acemilerin zaten bir çok problemi olur birde bunlarla uğraştımı işin içinden çıkamaz.
PicKit2 ve pickit3 özellikle pk3 öneriyorum.
Bunların kendi yükleme ara yüzleri-programları var.

Debug hata ayıklama için derleyici programlayıcı bağlantısı yerine simulator programları daha bir kolaylıktır.
Bu mcu için tek program proteus malum.
Bazıları kullanmasını iyi öğrenmedikleri için mok atarlar ama sorun yok , gayet güzel iş görür.
Tabii son olarak devre teknikleri ve hataları için pcb şarttır , yani deney board u bile uygun değildir...
 

Forum istatistikleri

Konular
128,185
Mesajlar
915,694
Kullanıcılar
449,956
Son üye
CharmanDear

Yeni konular

Geri
Üst