Kodlari kutuphane fonksiyonu olarak derlemek

Başlatan bunalmis, 19 Ocak 2012, 22:28:11

z

Keilde kendi kutuphanemi olusturmak istiyorum.

Fakat kodlari derleyip kutuphane olusturmayi beceremedim.

Mesela adi Math.lib olan ve icinde

int Topla(int a, int b)
{
    return(a+b)
}

seklinde fonksiyon barindiran kutuphaneyi nasil olusturabilirim?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

haydarpasamikro

http://www.keil.com/support/docs/2113.htm

Önce bir proje oluşturun
Bir C dosyası oluşturup projeye dahil edin
fonksiyonlarınızı yazıp proje option seçeneklerinden output a gelin ve "create lib" seçeneği ile derleyin
Artık oluşan lib uzantılı dosyayı başka projelerde kullanabiliriz
Yeni projede lib uzantılı dosyayı projeye dahil etmek gerek
kullanılan fonksiyonların prototipini tanımlamayı unutmayalım
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

z

Tesekkurler istedigim gibi oldu.

Peki kutuphane fonksiyonlarini debug etmek istiyorum. Bunun icin bir tane proje dosyasi olusturdum ve kutuphane fonksiyonlarini cagiriyorum.

Hem bu programi hem de kutuphane fonksiyonlarini ayni keil programinda debug edebilirmiyim?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

EMG81

Aralarındaki farkı bilmediğimden soruyorum.

.lib uzantılı library oluşturacağımıza, .h ve .c uzantılı libraryler yazsak ? Artılarımız, eksilerimiz neler olur ?

z

Birisinde kaynak kodlar acik, digerinde degil
Birisinde kodlarin tamami derlenir digerinde sadece kutuphane disinda kalan kodlar
Birinde fonksiyonlari farkinda olmadan bozabilirsin (bir karakter siler yada ekler) digerinde bozamazsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

EMG81

Alıntı yapılan: bunalmis - 20 Ocak 2012, 00:56:17
Birisinde kaynak kodlar acik, digerinde değil
Birisinde kodlarin tamami derlenir digerinde sadece kutuphane disinda kalan kodlar
Birinde fonksiyonlari farkinda olmadan bozabilirsin (bir karakter siler yada ekler) digerinde bozamazsin.

O zaman,

Minik ayrıntıları çok seven kocaman bir library yapmışsak,
Bu library i ticari yada bedavadan dağıtıyorsak,
Üzerinde geliştirilme yapılmasını istemiyorsak,

.lib şeklinde libraryler oluşturabiliriz. Mesela aklıma ilk gelen Fat16 veya 32 için yazılmış bir library bu konuya çok iyi bir örnek teşkil ediyor diye düşünüyorum.

bymrz

Arada ben de bir soru sorayım. Bu yöntemin aynısını MBLAB-X / Hi-Tech C Compiler da yapabilmek te mümkün mü? Deneyen var mı?

mufitsozen

Alıntı yapılan: alone_lover - 20 Ocak 2012, 09:18:38
Arada ben de bir soru sorayım. Bu yöntemin aynısını MBLAB-X / Hi-Tech C Compiler da yapabilmek te mümkün mü? Deneyen var mı?

evet
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

bymrz

#8
Alıntı yapılan: mufitsozen - 20 Ocak 2012, 12:39:45
evet


güzel :)

biraz beleşcilik yapayım demiştim abi, ama sen de hiç izin vermiyon.  ;D

http://microchip.wikidot.com/mplab:how-to-create-a-library-project


Akşam bi deneyeceğim... Fakat takıldığım yer olursa sorarım bu sefer :)

mufitsozen

Alıntı yapılan: alone_lover - 20 Ocak 2012, 15:32:10

güzel :)

biraz beleşcilik yapayım demiştim abi, ama sen de hiç izin vermiyon.  ;D

http://microchip.wikidot.com/mplab:how-to-create-a-library-project


Akşam bi deneyeceğim... Fakat takıldığım yer olursa sorarım bu sefer :)

benden kacmaz! kargadan baska gus tanimam!  ::)

Aslinda Keil ile derlediginiz bir libraryi Hitech-c ile kullanabilmeniz bile mumkun olmali (hatta library'e eklediginiz bir modulu keil c oburunu hitech C oburunu GNU filan ile bile yapabilmeniz lazim. tabiiki C RTL kullanimina dikkat ederek, yada kendi thread safe embedded C  RTL kullanmak gerekebilir filan.) vs vs


Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

haydarpasamikro

Debug sırasında lib dosyası c dosyası olarak açılıp debug edilen satırlar gösterimektedir.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

Burak B

Lib dosyası oluşturduğunuzda derlenmiş opcode elde edersiniz. Yani artık bu libraryden ASM' den gayrı geri dönüş olmaz. Zaten derleyici de başlık dosyasnızda (*.h)  belirtilen bilgileri library dosyasından kopyalayıp getirir. Sonrasında sizin kodunuza hex olarak yapıştırıp gerekli giriş çıkış değişken adreslerini atayarak kodun bütünleşmesini temin eder. Tabi bu demek değildir ki LIB oluşturduğunuzda kodunuz güvendedir. Neyi nasıl yapacağını ve tekniğini bilen kişi oturur kütüphanenizde istediği fonksiyonu tespit, analiz, disasm, decompile eder. Gerekli tüm bilgiyi topladıktan sonra da eğer başka bir MCU için gerekliyse (mecburen) yeniden yazar.  Yada o fonksiyonu sizin librarynizden söküp kendi librarysine aktarır ve ardına kendi fonksiyonlarını ekler.

Alıntı yapılan: haydarpasamikro - 20 Ocak 2012, 22:27:04
Debug sırasında lib dosyası c dosyası olarak açılıp debug edilen satırlar gösterimektedir.

Aslında C dosyası olarak açılmaz. Açılması mümkün değildir zaten. Eğer kaynak kodu mevcutsa gösterilir. Yoksa Lib dosyaların yapısı gereği ve genelde pekçok programcının pek ilgilenmediği Debug Bilgisi okunur. Bu ASM satırlarında bize sanki C' ye dönüştürülmüş gibi bir izlenim bırakabilir ancak öyle bir durum değildir. Sadece yorum (comment) olarak bize gösterilir. Bazı Lib formatları (nadir de olsa) kodun her anlamlı bloğu için bu tip yorum bilgisi tutabilir. Buda bize C kodu hakkında daha çok bilgi veren bir durumdur.

"... a healthy dose of paranoia leads to better systems." Jack Ganssle