Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC8 => Konuyu başlatan: ahmetbudak - 05 Şubat 2014, 21:08:47

Başlık: optimize kod
Gönderen: ahmetbudak - 05 Şubat 2014, 21:08:47
arkadaşlar iyi akşamlar aşağıda 16f877 için  XC8 ve proton örneği var ikiside aynı görsün yazıp derledim
XC8 yazıp derlenen kod  %28 RAM   % 44 flash kullandı
proton da ise %3 ve %5 mertebesinde
bu durum nasıl açıklanabilir (özellikle float değişken kullanımında C de bu değerler yükseliyor)
kod 1:
int main() {
    float a=14.15;
 
   char text1 [1];

    TRISA = 0x00;
    PORTA = 0x00;
    TRISB = 0x00;
    PORTB = 0x00;
        lcd_init();
        lcd_goto(0); // select first line
sprintf(text1,"%.2f",a);
        lcd_puts(text1);
         while(1);

}


kod 2:
Device=16F877
Dim a As Float
a=14.15
Declare LCD_Lines=2
Declare LCD_DTPin PORTB.0
Declare LCD_ENPin PORTB.5
Declare LCD_RSPin PORTB.4
Declare LCD_CommandUs 2000
Declare LCD_DataUs 50
basla:
  Print At 1,1 , a
  GoTo basla
Başlık: Ynt: optimize kod
Gönderen: LukeSkywalker - 05 Şubat 2014, 21:12:00
Xc8 full degilse kod optimizasyonu da iyi olmuyor.
Başlık: Ynt: optimize kod
Gönderen: ahmetbudak - 05 Şubat 2014, 21:13:55
Alıntı yapılan: LukeSkywalker - 05 Şubat 2014, 21:12:00
Xc8 full değilse kod optimizasyonu da iyi olmuyor.
full optimizasyonda pro seçili ama..
Başlık: Ynt: optimize kod
Gönderen: subram - 05 Şubat 2014, 21:46:35
Aynı sorunu ben de yaşadım ama detayını araştırmadım.
%18 olan kod float kullanınca %68'lere çıkıyor.
Başlık: Ynt: optimize kod
Gönderen: ahmetbudak - 05 Şubat 2014, 21:54:12
acaba proton nasıl bu kadar optimize kod üretebilmiş?
Başlık: Ynt: optimize kod
Gönderen: Burak B - 05 Şubat 2014, 22:22:21
Kesin float diye fixed point kullanıyordur protonu yazan amca. :)
Başlık: Ynt: optimize kod
Gönderen: Mr.Java - 05 Şubat 2014, 23:11:24
Bu XC8 derleyicisinde bir bug.Mail atıp derleyicinin gelişmesinde yardımcı olabilirsiniz.
Başlık: Ynt: optimize kod
Gönderen: LukeSkywalker - 05 Şubat 2014, 23:29:12
Printf komutu ve türevleri zaten çok yer kaplar. Mümkün olduğu kadar bu komutları kullanmamak lazım. Ben sizin terinizde olsam LCD'ye veri yazma işini kendim LCD_out gibi bir fonksiyon oluşturarak yapardım.
Başlık: Ynt: optimize kod
Gönderen: Erol YILMAZ - 06 Şubat 2014, 00:18:13
Her iki derleyiciye de,

a = a+0.001

komutunu ekleyerek, toplamda...

C için;

a=a+0.001;
sprintf("");
lcdputs("");



BASIC için;

a=a+0.001
Print At 1,1 , a

komut dizisini 5 kere ardı ardına çağırarak derler misiniz ?
Başlık: Ynt: optimize kod
Gönderen: Mucit23 - 06 Şubat 2014, 00:28:24
Bu konuyu bende çok merak ediyorum.
Başlık: Ynt: optimize kod
Gönderen: sadogan - 06 Şubat 2014, 00:38:29
#include <16f877.h>     
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                      //HACİRİCİ KRİSTAL OSİLATÖR KULLANILACAK
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#use delay(clock=4000000)
#include <lcd.c>
int main(void) {
    float a=14.15;
   char text1 [1];
        lcd_init();
      lcd_gotoxy(1,2);   // select first line
    sprintf(text1,"%.2f",a);
        lcd_putc(text1);
         while(1);

    }

CCS ne yapıyor diye merak ettim
sonuc RAM %10 ROM %9
Başlık: Ynt: optimize kod
Gönderen: LukeSkywalker - 06 Şubat 2014, 02:04:37
// Lcd pinout settings
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;

// Pin direction
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;

void main() {
   float a=14.15;
   char *text1;
   lcd_init();
   floattostr(a,text1);
   lcd_out(1,1,text1);
   while(1);
    }


MikroC Pro, ram %10 - rom %13
Başlık: Ynt: optimize kod
Gönderen: ahmetbudak - 06 Şubat 2014, 09:12:44
Alıntı yapılan: Allegro - 06 Şubat 2014, 00:18:13
Her iki derleyiciye de,

a = a+0.001

komutunu ekleyerek, toplamda...

C için;

a=a+0.001;
sprintf("");
lcdputs("");



BASIC için;

a=a+0.001
Print At 1,1 , a

komut dizisini 5 kere ardı ardına çağırarak derler misiniz
kodlar derlendiğinde basicte  %7 ve %8
c de %29 %44 oldu
Başlık: Ynt: optimize kod
Gönderen: ahmetbudak - 06 Şubat 2014, 23:25:50
kodlar derlendiğinde basicte  %7 ve %8
c de %29 %44 oldu