C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

M_B

include "Delay.h"

void Led_yak(void);
void Led_son(void);

main(void)
{
Led_yak();
DelayMs(250);
Led_son();
}


Led_yak(void)
{
  PORTB=1;
}

Led_son(void)
{
   PORTB=0;
}

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

CLR

Alıntı yapılan: M_B - 24 Ekim 2011, 14:16:25
include "Delay.h"
main(void)
{
Led_yak();
DelayMs(250);
Led_son();
}

Bunalmış'ında seninde basit yaptığınız bir hata var. Yukarıdaki programda led sürekli yanıyor olcaktır. Bir delay daha gerekiyor.

Knowledge and Experience are Power

teknikelektronikci

main(void) un en asagida ve yukarida olmasi sanirim farketmez peki fonsiyorn cagirirken fonksion1(); yapioruzda niye goto kullanamioruz madem goto start diyebiliyorsak :)
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

z

#18
Alıntı yapılan: eemkutay - 24 Ekim 2011, 14:39:11
Bunalmış'ında seninde basit yaptığınız bir hata var. Yukarıdaki programda led sürekli yanıyor olcaktır. Bir delay daha gerekiyor.

Bence hata yok. Verilen basic kodda ne varsa onun karsiligini yazdik.

 
Alıntı Yapmain(void) un en asagida ve yukarida olmasi sanirim farketmez peki fonsiyorn cagirirken fonksion1(); yapioruzda niye goto kullanamioruz madem goto start diyebiliyorsak
main fonksiyonunun asagida yada yukarida olmasi farkeder.   Eger main icinden cagrilan fonksiyonlar main'in ustundeki satirlarda yazilmissa sorun yok.   Fakat altindaki satirlara yazilmissa bu durumda main satirinin ustundeki satirlarda cagrilan fonksiyonlarin prototipi yazilmali.   M_B nin yazdigi koda bakarsan bu prototip tanimlari goreceksin.   Goto kullan. Ben bu gune kadar zararini gormedim.   Fakat kullanilmamasi istenmesinin de hakli sebepleri var. 
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SERRO EFE

#19
main üstte olduğunda altında tanımlayacağımız fonksiyonları en üstte derleyiciye bildirmemiz gerekiyo bildiğim kadarıyla
gotoyu fonksiyon dışına dallanmak için kullanamıyoruz sadece fonksiyon içinde hareket imkanı sağlıyor.

CLR

Alıntı yapılan: bunalmis - 24 Ekim 2011, 14:49:36

Bence hata yok. Verilen basic kodda ne varsa onun karsiligini yazdik.


O zaman dikkatte hata var. Gerçi hata bulmayı sevmem ama genel bu tür yanlışlıkları herkes yaptığı için yazmak istedim.
Knowledge and Experience are Power

z

Alıntı yapılan: teknikelektronikci - 24 Ekim 2011, 14:42:20
peki fonsiyorn cagirirken fonksion1(); yapioruzda niye goto kullanamioruz madem goto start diyebiliyorsak

Bir ustteki cevabimda goto ile ilgili sorunu yanlis anlamisim.

function(); gibi bir ifade cagrilirken return adresi stacka atilir. Eger bu fonksiyona Goto ile gitmek mumkun olsaydi geri donus adresi olmayacagindan fonksiyon islenip bittiginde sistem sapitacakti.

Bunun bilincinde olan derleyici yazarlari goto komutu ile fonksiyon cagrilmasi satirina hata mesaji verdirerek derlemeyi sonlandirir.

Zaten sen de Basic de bahsettigin seyi yapamazsin.

Gosub function
end;

function: return

satirlarini

Goto function
end;

function: return

sekline donustursen ne olur?


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

z

#22
int topla(int a, int b)
{
  return(a+b);
}

Ne demek ?

Bu bir fonksiyondur.

Matematikte Y=A+B gibi ifadelere fonksiyon deriz. Yukarıdaki C kodları da buna benzer.

En solda görülen int, Fonksiyonun sonucunun tipini gösterir. int'ı yukarılarda bir yerlerde söylemiştik. 32 bit işaretli tam sayı demekti.

topla, fonksiyonumuzun adıdır.

Fonksiyon adından sonra muhakkak parantez olur.

Bu parantezin içinde fonksiyonda kullanılacak girdi verileri bulunur.

Bizim örneğimizde bu veriler int a ve int b imiş.

Gelelim fonksiyon ne yapıyormuş.

return(a+b);

Fonksiyon a+b işlemini yapıyor. Yani int a ile int b değerini topluyor.

Buradaki return ne demek?

int topla(int a, int b)

Burada en soldaki int, fonksiyonun geri döndüreceği sonucun integer olduğunu bildiyordu ya,

işte a+b işlemi sonucunda bulunan sayisal değer return içinde döndürülür.

return(geri dönecek değer)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

M_B

eemkutay hocam;
Doğrusu şöyle olsa
include "Delay.h"
main(void)
{
 Led_yak();
 DelayMs(250);
 Led_son();
 DelayMs(250);
}

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

z

int topla(int a, int b)
{
  return(a+b);
}

Gibi bir fonksiyonla toplama işlemi yapmak.

int sonuc;

     sonuc=topla(3,5);


şeklinde toplama fonksiyonun çağırabiliriz.

bir başka örnek;

int sonuc,K;

     K=5;
     sonuc=topla(3,K);

bir başka örnek;

int sonuc,K,a;

     K=5;
     a=3;
     sonuc=topla(a,K);


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

teknikelektronikci

prototip dediginiz sanirsam

Led_yak(void) buradaki void ifadesidir öyle değilmi

daha dogrusu en üstteki

void Led_yak(void);
void Led_son(void);

ifadelerdir
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

teknikelektronikci

Alıntı yapılan: eemkutay - 24 Ekim 2011, 15:12:07
O zaman dikkatte hata var. Gerçi hata bulmayı sevmem ama genel bu tür yanlışlıkları herkes yaptığı için yazmak istedim.

hocam basic kodu öylesine ornek yazdim yanip yanmamasi önemloi degil ;)
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

z

#27
void Led_yak(void); // Bu bir prototip, yani adı sanı belli fonksiyonun girdisi ne çıktısı ne hepsi belli fakat içinde ne var belli değil
void Led_son(void); // Bu bir prototip, yani adı sanı belli fonksiyonun girdisi ne çıktısı ne hepsi belli fakat içinde ne var belli değil

Biraz eziyet olur fakat, programınızdaki tüm fonksiyonların prototipini tanımlarsanız daha sonra derlemede çok rahat edersiniz, kim kimin altında kim kimin üstünde arayışına yada yer değiştirmelere girmezsiniz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ilhan_mkp

yani () içinde ne var önemli toplada a ve b vardı burada void var parantez içinde void varsa programa fonksiyona gir neyapacağını orada gör diyoruz diğertürlü bunları götür topla getir diyoruz doğrumudur

z

#29
 ....function(void) ile ....function() ayni anlama geliyor.

Buradaki void, fonksiyonun hiç parametre istemediğini anlatıyor.

------------------------

void function(....)

Buradaki void, fonksiyonun sonuç üretmediğini söylüyor.



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