Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

C++

Başlatan muhittin_kaplan, 26 Nisan 2014, 14:57:32

muhittin_kaplan

C++
Birçok Dil ile çalışabiliyom (bilmiyor işimi hallediyorum  :-[ )
C++ ile ilgili çalışmaya başlama zamanı geldi. İnceledim Namespace ler eventler, metodlar filan bana uzak konular değil, Artık OOP olmak gerek MCU üzerinde diye düşünüyorum. Yardımlarınızı Esirgemeyiniz..


mesaj birleştirme:: 26 Nisan 2014, 15:26:08

C++ Dersleri - 1 efe tur otobüs bileti [url=http://www.otobusbileti.gen.tr]www.otobusbileti.gen.tr[/url]

M_B

@muhittin_kaplan Hocam;
Öncelikle alıştırma turu icin sınıflarla calışmak lazım.  Sınıflarla çalışmak eğlenceli diyebilirim. Tam konuya hakim değilim.
Sadece meraktan arduino da denedim. Sonra  forumda Klein kodunu inceledim.
Aslında Klein hocam Basit led, Buton kontrol gibi fonksiyonlarla devam eden bir kaç örnek verse iyi olurdu. Orda direk PWM ye dalmış. Aslında kolayda biraz incelemek lazım.
Sınıflar la ilgili dokuman slayt:
http://yadi.sk/d/y1qEkPHNNJdLF

Arduino uygulaması ( C++)
#include <LED13.h>

LED13 led;     //initialize an instance of the class

void setup()
{ 
     /*nothing to setup*/
}

void loop(){
  led.blink(2000);    //stay one second on, then a second off
}


LED13.h
#ifndef LED13_H
#define LED13_H

#include "WProgram.h"

class LED13 { 
public:
	LED13();
	~LED13();
    void on();
	void off();
	void blink(int time);
};

#endif


LED13.cpp Dosyası
#include "LED13.h" 			//include the declaration for this class

const byte LED_PIN = 13; //use the LED @ Arduino pin 13

//<<constructor>> setup the LED, make pin 13 an OUTPUT
LED13::LED13(){
    pinMode(LED_PIN, OUTPUT); 		//make that pin an OUTPUT
}

//<<destructor>>
LED13::~LED13(){/*nothing to destruct*/}

//turn the LED on
void LED13::on(){
	digitalWrite(LED_PIN,HIGH); 		//set the pin HIGH and thus turn LED on
}

//turn the LED off
void LED13::off(){
	digitalWrite(LED_PIN,LOW); 			//set the pin LOW and thus turn LED off
}

//blink the LED in a period equal to paramterer -time.
void LED13::blink(int time)
{
	on(); 			//turn LED on
	delay(time/2);  //wait half of the wanted period
	off();			//turn LED off
	delay(time/2);  //wait the last half of the wanted period
}
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Klein

Bir süredir gömülü sistemler için C++/OOP ile uğraşıyorum. Bir miktar ilerleme sağladığımı zannediyorum.  Soruların olursa cevap vermeye çalışırım.

Gökhan BEKEN

C++, C programcılarının Nesneye dayalı programcılığa verdiği yanıttır.
Bazı farklar: http://gokhanbeken.com/c-ve-c-dillerinin-farklari
Bunların dışında, string değişken kullanımı, fonksiyonlara aşırı yüklenme gibi bir ton yenilikleri de var.
Özel mesaj okumuyorum, lütfen göndermeyin.

kimlenbu

Ben bugüne kadar ekipte çalışmadım hiç, hep tek mühendis oldum, şimdi de öyle, o yüzden mcu'da oop yöntemi benim için kolaylıktan çok gereksiz kod yazımı ve zaman kaybı demek.

Onun yerine yordamsal programlama daha çok işime geliyor.

Amaç ekip halinde çalışmayı kolaylaştırmak mı ?





Klein

#5
C'de Struct'lar ile deneyim kazanmanın, sınıfları anlamayı ve yönetmeyi kolaylaştıracağını düşünüyorum.
Programınızdaki değişkenleri  Struct kullanarak mantıksal bölümlere ayırmak , tanımladığınız Struct'ları başka Struct'lar içerisinde kullanmak , Struct'ların içerisinde fonksiyon işaretçileri kullanarak yapıya işlevselik kazandırmak gibi konularda deneyim kazadığınızda , Sınıfları ve dolayısıyla OOP programlamayı daha çabuk kavrayacağınızı düşünüyorum.
Direk sınıflara dalıp devam da edilebilir. Ama zaten C kullanıyorsanız ve bir anda C++/OOP programlaya geçme çansınız yoksa , devam eden projelerinizi Struct'lar ile gülendirerek OOP için zemin hazırlamış olursunuz.

Gökhan BEKEN

#6
Alıntı yapılan: kimlenbu - 26 Nisan 2014, 15:39:27
Amaç ekip halinde çalışmayı kolaylaştırmak mı ?
Yoooo,


Amaç felan yok hocam, millet abartıyor C ile gayet okunaklı kodlar yazılamıyor mu sanki?
örneğin:
birisi LCD kütüphanesi yazmış, "lcd.h" ve "lcd.c" dosyalarını indiriyoruz, "lcd.h" dosyasını kullanacağımız yere include ile bildiriyoruz işlem tamam.
Al sana grup çalışması.

OOP'nin "hah tam budur" diyeceğimiz bir olayı yok, kullandıkça alışıyorsun, bir konfor getiriyor, bazı şeyler daha rahat oluyor ama "eskiden falanca şeyi yapamayıp da şimdi OOP sayesinde yapabiliyorum" diye birşey yok.
C ile kod yazanlar, elektronikten geçme ise spagetti(neyin nerden geldiği belli olmayan, karman çorman kod yapısı) kod yazma eğiliminde oluyorlar, yapı düzen felan hak getire.
OOP ile spagetti kod yazmak daha zor oluyor, ama yazan adam OOP mantığında bile spagetti yazabilir.
Özel mesaj okumuyorum, lütfen göndermeyin.

Klein

Bu konu yine  C ile yapamayıp C++ ile yapabileceğimiz ne var , gerekli mi gereksiz mi? tartışmasına kayacak gibi görünüyor. 
Olaya bu şekilde bakarsak,  ASM ile yapamayıp C ile yapabildiğimiz ne var diye sormamız gerekir.  Ya da aynı şekilde Makina kodlarıyla ( HEX kodlar)  yapamayıp ASM ile yapabildiğim şey nedir, öyleyse HEX kodlarla yazalım diye düşünmemiz gerekir.

Bu artışmaya hiç girmadan, OOP için şunu söyleyebilirim. Program yazmayı daha zevkli ve daha organize hale getiriyor. Bu benim için yeterli bir sebep. 
Tabi tüm mesele  konfor meselesi değil.  C++/OOP ile ilgili başlıklar çoğalıp  örnekler ortaya çıkmaya başladığında OOP programlamanın gücü zaten görülecek.
Bu sebeple şimdilik  sadece konfor diyelim.

muhittin_kaplan

Evet Aman S.dik yarışmasına dönmesin. Hepsini Seviyoruz, Kapsayıcıyız, Hemsi Bizim Bu Dillerin.

muhittin_kaplan

Nesne Nedir ?
Sınıf Nedir ?

mümkünse örnekleyerek yazabilirmisiniz ?

mir_as82

Hocam ben üstadlarımız kadar bilgi sahibi değilim ama yardımcı olmayı sevdiğimden birkaç cümle yazı yazayım dedim:

Sınıf olayı sadece kod bloklarıdır yani kodlarımızdır, Biz bu soyut olan şeyleri kurunca bunlar somutlaşır yani nesne olurlar.
Örneğin evin planı vardır bir de ev in kendisi vardır. İşte sınıf dediğimiz şeyler planlardır, sen onları somutlaştırırsan nesne olurlar.


muhittin_kaplan

Hocam bencede gerek yoktu ama olsun yinede yapmışlar bakın, kullanmayalım mı değil mi,

stm32f4 ile blinky yi nesne yönelimli olarak yapmaya çalışmak kötümü olur. LED yak diye projemiz olsa kötü mü olur ?

hadi bakalım eller taşın altına, Assembly yi çok seven abilerimiz birçok kişiye c ile çalışmak için ön ayak oldular. birileride -keşke- c biliyorsanız neden c++ ile çalışmıyorsunuz desin ve örneklerle, derslerle, ödevlerle  öncülük etsin. hadi..

Gökhan BEKEN

Alıntı yapılan: muhittin_kaplan - 26 Nisan 2014, 19:35:13
stm32f4 ile blinky yi nesne yönelimli olarak yapmaya çalışmak kötümü olur. LED yak diye projemiz olsa kötü mü olur ?
Discovery kit için yapmıştım basit bir led programı(C++ ve class ile)
http://gokhanbeken.com/keil-ile-c-class-ornegi-stm32
Özel mesaj okumuyorum, lütfen göndermeyin.

muhittin_kaplan

meftun teşekkür ederim.

şimdi adım adım gidelim.

#include "STM32F4xx.h"
#include "mgbClass.h" //benim classim olur kendileri

void SystemInit(){
    (*((int*)0xE000ED88))|=0x0F00000; 
// Floating Point donanimini aktiflestir. !!! Basimizin derdi !!!
    RCC->AHB1ENR |= 0x00000008;       
// GPIOD donaniminin clock sinyalini uygulayalim       
     
    GPIOD->MODER = 0x55000000;         
// GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (Ledler bu pinlerde)
    GPIOD->OSPEEDR= 0xFFFFFFFF;       
// GPIOD nin tum cikislari en yuksek hizda kullanacagiz
}

void DelayMs(unsigned int sayac);
//olu zaman fonksiyonu

int main(){   
        MgbClass cikis;        Mgbclas adında bir sınıf oluşturulmuş ve bu sınıftan cikis adında bir nesne yaratılmış.
     
    while(1){
                cikis.KirmiziLedYak();     DelayMs(1000);
                cikis.MaviLedYak();         DelayMs(1000);
                cikis.SariLedYak();         DelayMs(1000);
                cikis.TuruncuLedYak();     DelayMs(1000);
    } 
}
.......

include "STM32F4xx.h"
#include "GenericTypeDefs.h" //benim degiskenler için gerekli kütüphanem
//mgb: options for target kismindan path ayarlamazsan, include islemi yolu bulamaz, aklinda kalsin bu bilgi.



class MgbClass
//sinif adi, MgbClass'dir
{
public:         //neden public sebep nedir
        MgbClass();
//constructor   yani hazirlik(yapici fonksiyon)
        ~MgbClass();   
//destructor yani yikici fonksiyon
        void SariLedYak();
        void TuruncuLedYak();
        void MaviLedYak();
        void KirmiziLedYak();       

private: //buralar nedir
     
        uINT8 sari,turuncu,mavi,kirmizi;   
};

-------------
void MgbClass::MaviLedYak(){ //fonksiyonlar bu şekilmi tanımlanıyor  neden daha farklı tanımlanamazmıydı mesela parametreli
    GPIOD->ODR=mavi;
}

M_B

@muhittin_kaplan Hocam;
ikinci mesajda vermiş olduğum sınıflarla ilgili dokumanın bir inceleyin hocam.
Orda mantığını anlayacaksınız.
10 sayfadan sonrası biraz karısık ;)
Karışık derken adamı sıkabiliyor ;)

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet