C Programlama diliyle şamatalar

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

picusta

Geri kalan parametreler ayni tipte ise, dizin kullanin. ilk eleman'in pointer'ini verirsiniz olur.

Baska yöntem flag kullanmak, burada da bir sinir verirsiniz (max 32 bit örnegin)
Led(YAK_1|KAPAT_5|SONDUR_6| ... );



ErsinErce

google a "vprintf source code" deyip içerik nasıl kullanılmış bakılabilir aslında

engerex

Delphi'de fonsiyonun sonuna overload yazdığınızda aynı isimde çok sayıda fonksiyon tanımlanıyor.

function Led(s1:string); boolean; overload;
begin
//...
end;

function Led(s1, s2:string); boolean; overload;
begin
//...
end;

function Led(s1, s2, s3:string); boolean; overload;
begin
//...
end;

function Led(s1, s2, s3, s4:string); boolean; overload;
begin
//...
end;


Böylece her fonksiyonun kodlamasına uygun kod eklenebilir. C'de benzer yöntem mutlaka vardır.

Alıntı yapılan: z - 25 Aralık 2013, 18:16:50
Istedigim olmuyor galiba. Ilk parametre olarak veri sayisini benim vermem gerekiyor diye anladim.

Led(1,K1) 1 lede erisilecek bu da kirmizi
Led(3,K1,Y0,S1) 3 lede erisilecek.

Yanlis mi anladim?

Eğer tek fonksiyon ile çözülebiliyor ise kaç lede erişileceğini belirtmeye gerek yok.

Diyelim
Led(s1,s2,s3); s'lere y0, k1 gibi değerler girildi. Eğer s4 uzunluğu 0 ise (veya 2'den farklı ise) s4 tanımlanmamış demektir. s1, s2 ve s3'e tanımlama yapıldığı için 2 karakter uzunluğa sahipler.

fatih6761

@z hocam virgülleri | yapın. Alın size flag. Bu flagı kaydırıp kaydırıp ledleri yakar söndürürsünüz :)

z

O sekilde ledleri yakarim da nasil sondururum?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

speak48

değişken değikenli fonksiyon zaten derleme aşamasında kaç parametre girildiyse her fonksiyon ona göre yeniden düzenlenir.

ama dizi,struct,string gibi girişle kolaya gidilebilinir.

led("s1k0")
string incelenir ilgili karakter ve sonra gelen değer bulunur 1 se ya 0 sa söndür.
while case ifelse

fatih6761

Hocam 4 led var. K0 K1 Y0Y1 ifadeleri 8-bit olur. İlk dört bit led numarasını belirtir. İkinci dört bit ise aynı konuma gelen led durumunu.
Yani;
#define K0 (0x00010000)
#define K1 (0x00010001)
#define M0 (0x00100000)
#define M1 (0x00100010)
...
gibi. Kullandığınız işlemcide bit manipülasyon komutları varsa kolay olabilir.

muhittin_kaplan

bende olsam speak ın dediği gibi string manipulation la yaparım
eğer fantazi yapacaksam tabi, yoksa ne gerek var.

arslan74

Alıntı yapılan: z - 26 Aralık 2013, 02:01:24
O sekilde ledleri yakarim da nasil sondururum?

İki tane fonksiyon yazsan bir yakan diğer ide söndüren. O şekilde olmaz mı?

z

#714
Sorun ledleri yakip sondurecek fonksiyon yazma sorunu değil.

Sorun, merakin tetiklenmis olmasi.

MufitSozen hocamizin verdigi bilgiler isiginda C programin asm ciktisindan olayi kavradim fakat asm yazacak olsam bile stdarg.h'i include etmek gerekiyor.

Bu hosuma gitmedi.

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

z

Hocam stdarg ile işim şöyle var;

Eger bunu include etmezsem parametre icinde ... goren keil parametreleri stacka atmiyor.

Ne zaman stdarg yi include edersem o zaman stacka atiyor.

Ha dersen ki include et. Ok.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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

z

Gerbay burada 4 tane parametre gonderdigini zaten ilk parametre ile soylemissin. Bu sart mi? Eger sart ise istegimi gerceklemiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Veli B.

Led.h isimli bir dosyada böye bir tanım yapmış
#define R1_0	LED |=   1UL<<2  
#define R1_1	LED &= ~(1UL<<2)

#define G1_0	LED |=   1UL<<3 
#define G1_1	LED &= ~(1UL<<3)

#define B1_0	LED |=   1UL<<4
#define B1_1	LED &= ~(1UL<<4)


ve bu şekilde kullanmıştım.
if(320 =< Count){ 
			Count=0;ms10++;		
			if(_R1){ R1_1;R3_1;FR1=1;} else{ R1_0;R3_0;}						
			if(_G1){ G1_1;G3_1;FG1=1;} else{ G1_0;G3_0;}					
			if(_B1){ B1_1;B3_1;FB1=1;} else{ B1_0;B3_0;}
                      }
		hc595_yaz(LED);


picusta

int gerbay(int i, ...)
{
    int k, result = 0;
    int *pI = &i;
    pI++;
    for (k = 0; k < i; k++)
    {
        result += *pI++;
    }
    return result;
}


En son parametrenin adresi k degiskeninden bir önceki adres olma ihtimali varmidir ? öyleyse döngüyü degistirip yapilabilir.
    while (pI < &k)
    {
        result += *pI++;
    }