İlk etapta hemen
örnek kodumuzu bir editörde örneğin vi, gedit, kedit, pluma vs.
editörlerinden birinde yazıyoruz.
//*******************************************************
//
Copyright (C) 2015 Durali Kiraz
//
ilk sdcc pic uygulaması
#include
<pic14regs.h>
void
main(void)
{
}
//
Kodun sonu********************************************
Bu editörümüzdeki
kodu “bos_ana.c” olarak kaydediyoruz. Daha sonra Konsol ekranını
(ctrl+alt+t) açıyoruz. Buraya :
sdcc --use-non-free
-mpic14 -p16f628a bos_ana.c
ifadesini yazıp
Enter tuşuna basıyoruz. Sonuç aşağıdaki gibi bir çıktı olur.
message:
using default linker script "/usr/share/gputils/lkr/16f628a.lkr"
Bununla
beraber “bos_ana.c” dosyamızın bulunduğu dizinde 5 tane daha
dosya derleme esnasında oluşmuştur. Yani derleme işlemi
başarılıdır. Bu dosyalar şunlardır :
bos_ana.asm
bos_ana.hex
bos_ana.cod
bos_ana.o
bos_ana.lst
bos_ana.c
Şimdi
buraya kadar yaptığımız işlemleri bir anlatalım :
1)
Kodu bir editörde yazdık
2)
Kodu komut satırında sdcc derleyici ile parametrelerini vererek
derledik
3)
Derleme sonucunda derlenmi hex kodumuz ve kodumuzu debug ve
simulasyon etmek için lazım olan dosyalarımızı oluşturduk.
Yazdığımız
kodu incelediğimizde #include
<pic14regs.h> ifadesiyle başladını görürüz. Bu
ifade kullanacağımız pic mikrodenetleyicimizin “pic14”
ailesine ait olduğunu ve bu aile ile ilgili başlık (header)
dosyalarını programımızda kullanmak istediğimizi söyler. Bu
başlık dosyası PIC register larının ad ve adreslerini,
konfigürasyon bitlerini (sigorta ayarları) vs. birçok ayarın
tanımlarını içerir. Bu şekilde pic14regs.h
içindeki tüm kodlar ana kodumuza eklenmiş oldu. Gerçi ilk
yazdığımız bu programı boş yazdığımız için yazdığımız
kodu sadece şişirmiş olduk :) Dolayısıyla kullanmadığımız
başlık dosyalarını mümkün mertebe koda dahil etmememiz lazım.
Biz bu kodla bir başlık dosyasının #include
önişlemci komutuyla yapıldığını öğrenmiş olduk.
Sonraki satırımız
void
main(void)
{
}
satırıdır.
Burada bir C programında mutlak olması gerken main isimli
fonksiyonun gövdesini görmekteyiz. İşte bizin mikrodenetleyici
için çalıştıracağımız esas kod bu main fonksiyonun aç kapa
küme (süslü ) parantezleri arasında olması gerekiyor. Hiçbir iş
yapmasada derlenmiş bir kodumuz var, ne mutlu bize :)
Dikkat
ettiyseniz derlenmiş hex dosyamız 1.2 Kbayt uzunluğundadır.
Halbuki main fonksiyonu içinde tek satır kodumuz yok. Öyle 1.2
Kbayt nereden geldi. Cevabı #include önişlemci komutuyla
eklediğimiz kütüphane dosyasında saklı.
Birazda
derleme parametrelerinden bahsedelim.
--use-non-free :
Bu parametre; “özgür
olmayan kodu kullan” şeklinde bir anlam ihtiva eder. Bunun sebebi
ise microchip firmasına ait başlık dosyalarının GPL lisanslı
olmayıp ticari olmasından mütevellit kullanılan bu açık kod
başlık dosyalarını ifade etmek için bu parametre kullanılır.
Misal 16F628A mikrodenetleyiciye ait tanımların olduğu başlık
dosyası 16F628A.h dosyası yada 16F628A.lkr dosyasıdır. İşte
sdcc derleyicimiz gerek duyduğu bu başlık dosyalarını alabilmek
için bu parametreye ihtiyaç duyar. Yoksa derleme sonuç
vermeyebilir.
-mpic14 :
Bu parametre;
mikrodenetleyicimizin mensup olduğu bitsel gruplamadaki aile
tanımını bildirir. Dolayısınla 16F8xxx mikrodenetleyiciler 14
bitlik aileye mensuptur ve parametresi bu aile parametresi
derleyiciye bildirilmeli. Aksi takdirde derleme sonuç vermeyebilir.
-p16f628a :
Bu parametre; bir
önceki parametre ailesini belirttiğimiz mikrodenetleyicinin
kimliğinin son tanımıdır. Ailedeki ferdin ismi gibi
düşünebilirsiniz. Yine bu parametrede olmazsa olmaz.
bos_ana.c :
Bu parametremizde
derleyeceğimiz program kodlarının ihtiva edildiği dosyamızdır.
Bu şekilde sadece dosya ismi şeklinde verilebileceği gibi
içerisinde path-yol bilgiside bulunabilir. Örneğin benim
bilgisayarımda bu dosya
/home/dk/projeler/sdcc_dersleri/ders01
dizini altında
bulunmakta. İstersem ben bu parametreyi
“/home/dk/projeler/sdcc_dersleri/ders01/bos_ana.c”
şeklinde de
yazabilirim. Derleyici bunu farkedecektir.
Bir sonraki derste
buluşmak üzere. Hoşçakalın. ;)
duralikiraz.blogspot.com
“Muvaffakiyet
Allahtandır”
bellı bı yere kadar geldım ama uc bırımden su problemı aldım error 131: cannot generate code for target 'pic14' yardımcı olabılırsenız sevınırım
YanıtlaSilevet aynı sorun bende de var." error 131: cannot generate code for target 'pic14' "
YanıtlaSilEğer parametreleri aşağıdaki gibi girdiyseniz o zaman geriye (ubuntu için konuşuyorum) dosyanın oluşturulmaya çalışıldığı yere yazma yetkisi verilmemiş olabilir
YanıtlaSilsdcc --use-non-free -mpic14 -p16f628a bos_ana.c
Bahsettiğiniz hata mesajını almak için biraz uğraştım fakat alamadım. Araştırdığım kadarıyla muhtemelen kurulumda gputils gibi paketler eksik kurulmuş yada çok eski sdcc sürümü kullanıyor olabilirsiniz. Bunun dışında uçbirimde yazığınız derleme ifadesini ve kaynak(.c uzantılı) dosyanızın bilgisayarınızdaki yerini belirtirseniz daha iyi yardımcı olabilirim.
YanıtlaSil