Basic Bilenlerin Kütüphane ile Kullanımı İle Alakalı Soruları

Başlatan muhittin_kaplan, 15 Ekim 2012, 00:08:49

GreeN

Bende sizin gibi düşünüyordum. Ama araçlar o kadar önemli olmamalı bence. savaşta hile mubahtır ....  (Maçı izleyen oldu mu ?)
Terörü Lanetliyoruz.

muhittin_kaplan

Bu işin Kolayı Olmalı.

nasıl ki
using yada import dediğimde o kütüphaneyi kullanabiliyorsam buradada böyle olmalı.
oradan onu buradan bunu yap sonrasında neden yapıldığını bilmediğim şunuda yap çalış.

klein hocanın örneğinde sanki öyle olmuş.
"include venividivici.c" yazınca bunun içeriğindeki fonksiyonlara ulaşmalı ve function ekranında görmeliyim. ve neden y apmıyorlar anlamış değilim şu kod tamamlama yada tooltip şeklinde fonksiyonu göstermeyi.

Beğenmediğimiz Windows ve ürünü olan visual studioda Visual basic.net

sadece import system.math diyerek matematikle alakalı fonksiyonları kullanabileceğimi bildiriyorum.
hemen aşağıda ABS komutunun 7 adet kullanım tarzından 1. sini nin nasıl olması gerektiğini gösteriyor bana.



Bunu keilde yapamazmıyız. yani istediğim özelliği barındıran fonksiyon için (kod tanımlamayı boşverdik) sadece dosyayı tanımlasak yani include etsek yetmiyor mu ?

eistain_54

Alıntı yapılan: gerbay - 17 Ekim 2012, 22:30:10
hocam o olay keil da henüz yok, eclipse tabalı olanlardan birisini kullanırsan o özelliği kullanabilirsin.

yani CodeRed RedStudio ya da Code Sourcery gibi.. 

ya da düz eclipse i kurun editör olarak kullanın, ya da visual C++ da makefile project oluşturun..

Abi bu olayları biraz açabilecekmiyiz?Yani derleyicilerde tamam da c++ ile make file oluşturmak?Belki basit bir konudur ama ben bilmiyorum.Teşekkürler
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

muhittin_kaplan

Hocam Hadi bundan vazgeçtim.
ama kütüphaneyi kullanmak için bile birsürü takla atıyoruz. mesela target i ters tıkladığımızda c/c++ secmesinde neden std_periph gibi tanımlamalar yapmak zorundayız ?

doğrudan

include  "veni_vidi_vici.c" yazsam bunun içeriğini kullanamazmıyım ? Kullanmam gerekir diye düşünüyorum. yada "çok basit ve benim bilmediğim ve okuyanlarında bunu biliyordur dediği" bir durum var.

Klein

 @muhittin! o örnekler kendi kütüphanemden.  Hem kütüphane oluşturmak , hem bunları yazarken  registerleri daha iyi öğrenebilmek, hem de ST'nin kütüphanesine göre daha basit ve uygulanması daha kolay örnekler oluşturabilmek  amacıyla yazmıştım.

Sen bu kütüphane meselesine taktın anlaşılan.  ST'nin kütüphanesini hiç incelemediğim için nasıl kullanılır bilmiyorum.  Ama sen bu kütüphane ile yazılmış sadece D portunun ledlerden birine bağlı pinini init eden ve toggle eden bir kod parçacığı yüklersen buraya, ben de kütüphaneyi include etme gibi meseleleri halledip bir örnek proje yükleyebilirim.

muhittin_kaplan

#include "STM32F4xx.h"
#include "Delay.c"
void SystemInit()
{
unsigned int i;

    for (i=0;i<0x00100000;i++);          // OSC oturtma ve kurtarma rutini
    	RCC->CFGR |= 0x00009400;         // AHB ve APB hizlarini max degerlere set edelim
    	RCC->CR |= 0x00010000;            // HSE Xtal osc calismaya baslasin        
    	while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
    		RCC->PLLCFGR = 0x07405408;      // PLL katsayilarini M=8, N=336, P=2 ve Q=7 yapalim
//  		RCC->PLLCFGR = 0x07402A04;     // PLL katsayilarini M=4, N=168, P=2 ve Q=7 yapalim
    		RCC->CR |= 0x01000000;            // PLL calismaya baslasin  (Rehber Sayfa 95)
    		while(!(RCC->CR & 0x02000000)); // Pll hazir oluncaya kadar bekle
//  		FLASH->ACR = 0x00000705;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    		FLASH->ACR = 0x00000605;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    		RCC->CFGR |= 0x00000002;        // Sistem Clk u PLL uzerinden besleyelim
    while ((RCC->CFGR & 0x0000000F) != 0x0000000A); // Besleninceye kadar bekle
    RCC->AHB1ENR |= 0x0000000F;    // GPIO A,B,C,D clock'u aktif edelim 
    GPIOD->MODER = 0x55555555;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin)
    GPIOD->OSPEEDR= 0xFFFFFFFF;   // GPIOD nin tum cikislari en yuksek hizda kullanacagiz 
} 	

int main()
{

	SystemInit();

    while(1)
   {
		GPIOD->ODR&= 0x00000000;     
		Delay(0x0FFFFFFF);
		GPIOD->ODR= 0x0000F000;
		Delay(0x0FFFFFFF);
   } 
}




Delay.c

void Delay(int a)
{
while (a--);

}


bumudur
(bu arada keil de proje ağacına delay.c yi eklediğimde ve include "Delay.c" bildirisini çıkarttığımdada sorunsuz derliyor. Ama Fonsiyon Penceresinde her iki durumda da göremiyorum delay.c nin içeriğini)



mesaj birleştirme:: 18 Ekim 2012, 20:41:34

------------------------------------------------------------------------------------------------------------------------
EKLEME

Hocam Aşağıdaki Açıklamada

Alıntı YapKütüphaneler, derlenmiş dosyalardır. Kütüphane oluştururken, projemize c uzantili bir kaynak kod dosyası ve h uzantılı bir başlık dosyası ekleriz. Kaynak kod dosyasında, kütüphanemize ekleyeceğimiz fonksiyonların tanımlamaları yapılır. Başlık dosyasında ise bu fonksiyonlara ilişkin prototip bildirimleri yapılır. Başlı kdosyaları aynı zamanda makro bildirimlerini, tip bildirimlerini vb içerebilir. Kütüphane projemizi derlediğimizde, kütüphanemizin içerisindeki tüm tanımlamalar, obj modülü içerisine yazılır. 'obj' uzantılı dosyalar, derleyicilerin çıktı dosyalarıdır.
dan kasıt şumudur

venividivici.h

int BenimFonksiyon(char);
int SeninFonksiyon(int);


venividivici.c

int BenimFonksiyon (x)
   char x;
{
    return x == 0;
}

int SeninFonksiyon (x)
   int x;
{
    while (x--);
}


anladinmi

include yaparken "extern" olayina dikkat.
Projede birden çok dosyaniz oldugu zaman sorun yaratir : Multiple include. Dosyalarin basina #ifndef yazmak bir çözüm olabilir.
Visual Studio C++ 'da deginiz oluyor : autocompletion ve prototip görme.
Visual studio 'yu baska bir derleyici (keil) kullanmasi için ayarlayabilirsiniz.

muhittin_kaplan

hocalarım bana şu "kütüphane oluşturma" olayını örnekle (illaki stm nin değil) adım adım öğretebilirmisini ?



mesaj birleştirme:: 19 Ekim 2012, 23:10:48

doğru programlama adına
keil de c kullanarak bir kütüphane (kendi yazdığımız) kullanmak istersek yapılması gerekenler nelerdir?

1. xxx.C adında içerisinde fonksiyonlar olan dosya hazırlanır.
2. xxx.h adında xxx.C dosyasının içerisinde bulunan fonksiyonların prototiplerini yazılır
3. #include "xxx.h" ile projene eklenir

kütüphane kullanımı bumudur ?

peki doğrudan xxx.C dosyasını import etsem ne farkeder.