Sdcc ile pic programı geliştirmek

Başlatan engin_, 04 Mayıs 2006, 19:02:37

engin_

Başlığın tam yeri değil ama ben linux da kullandığım için ayrıca burda derleyiciler bölümünde konu başlığı olmadığı için buraya yazıyorum. Tabi doğal olarak kendi kullandığım dağıtıma destek veriyorum ama diğer dağıtımları kullananlar içinde elimden geldiğince yardımcı olmaya çalışırım. Bu arada pek linux kullanan yok sanırım burda ya neyse...

Sdcc ile ansi c uyumlu kodlar yazarak aşağıdaki mcu ları kullanmak mümkün.
Intel 8051, Zilog Z80 tabanlı mcu lar, Amtel AVR, DS390, Microchip PIC serisi

Bende yeni kullanıyorum. Programın kurulmasından bahsetmiyeceğim. Archlinux kullanıcıları lapis depoyu kullanabilirler. Burda programı kurduğunuzda pic16f serisinin tüm üyeleri için başlık dosyaları mevcut olmadığından bu dosyaları kendimiz oluşturmamız gerekiyor. Bunun için gputils paketindeki başlık dosyaları kullanılıyor. Bunun için bir perl betiği hazırlanmış. Bu arada gputils paketini de lapis depoda bulabilirsiniz. Sdcc'yi windows da kullanmak da mümkün ama bu konuda deneyimim yok.

lapis depo: http://arch.linux-sevenler.org/

Kullanımı ise şöyle:
-----------------------------------------------------------------------------------
cd /usr/share/sdcc
wget http://cvs.sourceforge.net/viewcvs.py/*checkout*/sdcc/sdcc/support/scripts/inc2h.pl
mkdir pic
cd pic
for file in `ls /usr/share/gputils/header/p*.inc`
do export picstring=`echo $file | sed "s/\/usr\/share\/gputils\/header\/p//; s/.inc//"`
../../inc2h.pl $picstring /usr/share/gputils > pic$picstring.h
done
-----------------------------------------------------------------------------------

tabi burda /usr/share/sdcc ve /usr/share/gputils/header/  gibi path kısımları kullandığınız dağıtımlara göre uyarlamanız gerekiyor.

Evet bundan sonrası sdcc'yi kullanmaya kalıyor. Hemen basit bir uygulama yapalım.
/*

 Compile: sdcc --debug -mpic14 -p16f84 karasimsek.c
 Simulate: gpsim -pp16f84 -s karasimsek.cod karasimsek.asm

*/

#define __16f84
#include"pic/pic16f84.h"

typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF;

	char i;

void ileri(void){
	for(i=0;i<7;i++)
		PORTB = PORTB << 1;
}

void geri(void){
	for(i=0;i<7;i++)
		PORTB = PORTB >> 1;
}

void main(void) {

	TRISB = 0;       // PortB çıkış olarak ayarlanır
	PORTB=1;       // PortB'ye 1 yüklenir. Yani PortB.0 biti yüksek seviye

	while(1) {          // Sürekli döngü
		ileri();
		geri();
	}
}


Açıklama kısmında belirttiğim gibi derlemek için:
Alıntı Yapsdcc --debug -mpic14 -p16f84 karasimsek.c

komutunu veriyoruz. Burda 16f84a için derlemeye uğraştıysamda başarılı olamadım. Gerekli başlık dosyalarının olmasına rağmen yok diyor. Aslında sonu "a" ile biten piclerin hepsinde aynı sorunu veriyor. Neyse bunu düzeltmek mümkün gözükmüyor. Ama üretilen hex kodu 16f84a'da büyük ihtimalle çalışır sanırım.

Ve programımızı test etmek için gpsim'i kullanıyoruz.
gpsim -pp16f84 -s karasimsek.cod karasimsek.asm


Gpsim'i de lapis depodan indirebilirsiniz. Gpsim de PIC'in portb bacaklarının sırayla sağdan sola, soldan sağa yandığını görmeniz gerekiyor. :)

Bunun dışında piklab adında güzel bir ide keşfettim.
http://piklab.sourceforge.net/index.php

Piklab kullanarak istediğiniz PIC'i bellek veya çalışma gerlimi gibi özelliklerine bakarak seçebilirsiniz. C ile yazdığınız programı sdcc veya desteklediği diğer compiler'lar ile derleme imkanınızda var. Derleme sonucu oluşan dosyaları da kontrol edebilirsiniz. Örneğin ne kadar bellek kullandığınız vb. Ve PIC'e yazılımı yükleyebilirsiniz. Archlinux kullanıcıları için aur da paketi mevcut. (Çeşke aur'a daha önce baksaydım, boşuna derledim)

Kaynak: http://ubicomp.lancs.ac.uk/%7Emartyn/sdcc_linux/

Bu arada bazı karekterler site gösteriminde kendiliğinden bozuluyor....

Ziya

sdcc ilk z80 için çıkmıştı. Sonra 8051 serisini destekledi. Ne de olsa parser ANSI C için yazılmış. Pic için bir grup destek atmıştı ama geçen yıldı sanırım, henüz geliştiriliyordu. Aslında sdcc güzel bir dil ve Dallas DS80c390 ve c400 için tavsiye ediyordu.

Pic ve AVR için yeni olduğundan belki biraz buglı olabilir. Sizin bu buglar konudaki deneyiminizi öğrenmek isteriz.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

engin_

Ben Sdcc'yi ilk dün kullandım. Daha önceden paketlemiştim ama başka işlerle uğraşmaktan vakit olmadı.

sourceforge bazı konularda bug bildirileri olmuş ama patch'lere bakılınca PIC konusunda destek sürdüğü gözüküyor.

Ben şuana kadar önemli bir sorunla karşılaşmadım ama önemli birşey de yapmadım.

birkan

Yukardaki kodları ben yazmıştım, ilk olarak boreas.gen.tr adresine göndermiştim. Aslında kodlarda hiç bir hata gözükmemesine ragmen  simulasyonda istediğim sonucu alamamıstım. Başlangıç niteliği taşıması açısından yinede yayınlanması için siteye vermiştim. Umarım artık düzelmiştir. Benim o kodları yazdığım dönemlerde sdcc c kodlarını doğru dürüst pic assembly koduna çeviremiyordu.

engin_

@birkan vermiş olduğum kodları herhangi bir yerden bakmış değilim. Aynı şeyleri yazmış olmamız çok ilginç.

birkan

Alıntı yapılan: "engin_"@birkan vermiş olduğum kodları herhangi bir yerden bakmış değilim. Aynı şeyleri yazmış olmamız çok ilginç.

haklısın, uzun zaman geçti, sdcc ile karaşimşek denemesi yapmıştım ama oraya gönderdim kodla alakası yokmuş. afedersin

boreas