MPLABX 'de XC8 ile 16F serisi kullanımı

Başlatan fryrmnd, 26 Temmuz 2012, 13:02:50

z

Bu kod en optimize su sekilde yazilir.

   

         ;main.c: 55: Zurna = Zurna ^ 1;

         movf   _Zurna,w
         xorlw   1
         movwf   _Zurna
 
        ;main.c: 57: i=Zurna & 0xF0;

         andlw   240
         movwf   isr@i


Hatali dusunmuyorsam 5 satirda biter is.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

AsHeS

Hocam hatta kürek lazımsa şu işinizi görür.
Alıntı yapılan: files - 02 Ağustos 2013, 02:41:50
sonsivrideki ekli dosyanın içeriği;

Fix for MPLAB® XC v1.10 Compilers
=================================

Windows, Linux & Mac OS X

August 13, 2012	Updated for v1.10 compilers.
August 14, 2012	MPLAB XC32 C++ license activated.

http://filesmelt.com/dl/MXCF11011.7z
http://mir.cr/0XGTYNWW
http://www.multiupload.com/Y7RGAZP2C2

Password: sonsivri


Tagli

XC8'in asm ciktisinda bana da cok gereksiz satirlar var gibi gelmisti. Ozellikle arka arkaya gelen 3-4 tane goto komutu surekli tekrarlaniyor. Benzer yapilar goto tablosu icin kullanilir normalde ama bu komutlarin ustunde PC'yi degistiren bir komut da gozukmuyor, bu durumda birkac tanesi cop gibi.

z'nin de dedigi gibi, sanki ucretsiz versiyonda kodu sisirmek icin araya rasgele gereksiz kodlar atiyor gibi.

Ama z'nin verdigi ornekteki fazladan birkac tasima isleminde art niyet olmayabilir. Derleyici tasarimi konusunda pek bilgili degilim ama bildigim kadariyla derleyiciler her islemin sonucunu bir yerlerde (muhtemelen stack'ta) saklamak ister, belki sonradan kullanilir diye. Optimizasyonlar acik olmayinca, daha sonradan kullanilmadigini da farketmedigi icin o kisimlari silmiyor tahminimce.

Tek basina yazilan ++i; ve i++; satirlari arasindaki farki duymussunuzdur belki. Optimizasyon yapilmazsa, ++i; ifadesinin daha iyi oldugu soylenir. Cunku i++; ifadesinde i'nin eski degeri isleme girecegi icin oncelikle o bir yerde saklanir, daha sonda i arttirilir. Elbette ki tek basina kullanildigi zaman i'nin eski degeri kullanilmadigi icin bu eskiyi saklama isi gereksiz bir yuk oluyor. Optimizasyon bu gibi durumlari farkedip siliyor.

Belki XC8'de de buna benzer bir durum vardir. Gunahini aliyor olabiliriz yani.
Gökçe Tağlıoğlu

sadogan

 Aynı işlemi ccs de test edeyim dedim

  char i,zurna;
   zurna^=1;
   i=Zurna & 0xF0;
çıkan asm:
0026:  MOVLW  01
0027:  XORWF  22,F
....................    i=Zurna & 0xF0;
0028:  MOVF   22,W
0029:  ANDLW  F0
002A:  MOVWF  21
002B:  GOTO   026

z

XC8 daha bebek. Biraz daha buyumesi lazim.

Benzer tartismalar microchipn sitesinde de yapiliyormus.

http://www.microchip.com/forums/m707047.aspx
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

Maksimum  optimizasyonu ayarlayınca XC8 canavar gibi oldu.

Bedava modu çok pis uzun kod üretir işe yaramaz. mutlaka optimizasyonlu kullanılmalıdır.

Sorun bundan kaynaklanıyor olsa gerek. Belki de bilmeden sallamışlar.

Tagli

Tesekkurler z. O fazlalik goto'lardan nasil kurtulacagimi ogrenmis oldum.
Gökçe Tağlıoğlu