13 Haziran 2015 Cumartesi

SDCC ile Ubuntu üzerinde ilk PIC Mikrodenetleyici Uygulamamız -DERS01


İ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”

4 yorum:

  1. 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ıtlaSil
  2. evet aynı sorun bende de var." error 131: cannot generate code for target 'pic14' "

    YanıtlaSil
  3. Eğ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

    sdcc --use-non-free -mpic14 -p16f628a bos_ana.c

    YanıtlaSil
  4. 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