C Programlama diliyle şamatalar

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

camby

Başlık çok güzel olmuş elinize sağlık.



Alıntı yapılan: z - 23 Aralık 2011, 23:03:52

Bu arada  "CM3 islemciler icin Assembly" diye bir kitap denemem var ve yarisini bitirmis durumdayim. Icerik olarak bu haliyle bile (84 sayfa) yeterli ve baskiya verilebilecek durumda ancak,  kitaba  ornek kodlar diye bir bolum ekleyerek sayfa sayisini 150 yapmak istiyorum.


Hocam kitap ne durumda , bitirebildin mi ?   CM3'ün mimarı ve ASM yapısı 18f'den sonra çok ilgimi çekti açıkcası.. İstersen yayınlamadan önce baştan sonra okuyup bitirip yorumlayabilirim sana : ))

camby

Alıntı yapılan: z - 25 Ekim 2011, 18:05:32
Hocam şu satıra dikkat etmemişsin.

Programda aşağıda adıgeçen registerleri structure pointer yapısından kurtarıp structure yapısına dönüştürelim.

Alıntı yapılan: z - 27 Ekim 2011, 01:48:15
Bir sonraki konumuz ARM registerlerini structure yapısında tanımlama hakkında.

Ön hazırlık yapmak isterseniz Rehber'de örneğin GPIOx port adreslerine bir göz atın.

Bunalmış hocam , İlk başlarda bahsetmişsiniz ancak sanırım arada kaynamış . Donanım registerlarına pointer kullanmadan nasıl değer atabiliyoruz ?

Sanki bir yerde , GPIOD.ODR.PB0=1 yada GPIOD.ODR = 0x00000F00 gibi bir kullanım görmüştüm sizin ancak bulamadım şimdi. Nasıl kullanıyoruz bu şekilde.

Aşağıdaki şekilde de yada klasik header dosyası ile erişebiliyorum,burada sorun yok:

#define GPIOC_ODR      (*((volatile unsigned long*) 0x4001100C))

sseedat

main()
{☺
char dizi[]="dizi";

printf("%c",for(i=0;i<4;i++)(*dizi+i));
}
bu şekilde bir kullanımı yapılabilirmi?
 
burdaki amacım dizi elemanlarını tek seferde bu şekilde basmak.
Görünmez bir mezarlıktır Zaman...

AsHeS

Alıntı yapılan: sseedat - 21 Aralık 2012, 22:50:35
main()
{☺
char dizi[]="dizi";

printf("%c",for(i=0;i<4;i++)(*dizi+i));
}
bu şekilde bir kullanımı yapılabilirmi?
 
burdaki amacım dizi elemanlarını tek seferde bu şekilde basmak.
main()
{☺
char dizi[]="dizi";

printf("%s",dizi);
}

sseedat

tşk printf ten çok şey istiyorum sanırsam:D
Görünmez bir mezarlıktır Zaman...

yamak

Öyle olmaz ama şöyle olur istediğin şeyle hemen hemen aynı sayılır.
#include <stdio.h>
#include <string.h>
int main(void)
{
    int i=0;
    unsigned char f[]="dizi";
    for(i=0;i<strlen(f);printf("%c\n",f[i]),i++);
}

AsHeS

Alıntı yapılan: yamak - 21 Aralık 2012, 23:04:53
Öyle olmaz ama şöyle olur istediğin şeyle hemen hemen aynı sayılır.
#include <stdio.h>
#include <string.h>
int main(void)
{
    int i=0;
    unsigned char f[]="dizi";
    for(i=0;i<strlen(f);printf("%c\n",f[i]),i++);
}

Bu kadar uğraşmaya gerek yok "printf("%s",dizi);" mutlu eder arkadaşı kanımca :)

sseedat

evt printf kütüphanesiyle oynayıp yapılabilir diye ddüşünüyorum.
Görünmez bir mezarlıktır Zaman...

yamak

Alıntı yapılan: AsHeS35 - 21 Aralık 2012, 23:21:22
Bu kadar uğraşmaya gerek yok "printf("%s",dizi);" mutlu eder arkadaşı kanımca :)
Ama karakter dizisi olmazsa ne olacak?  :)

AsHeS

Alıntı yapılan: yamak - 21 Aralık 2012, 23:25:45
Ama karakter dizisi olmazsa ne olacak?  :)
Şimdi %s li gönderim için kütüphaneyle oynamaya gerek yok.Karakter dizisini sormuş arkadaş ha long integer olursa artık onu da bırakalım kendi halletsin .

yamak

Ben kütüphaneyle oynanacak demedimki.Eğer dizi karakterlerden değildi integer tipli verilerden oluşursa sizin söylediğiniz yöntemle nasıl yapılacak dedim.Eğer dediğiniz gibi yaparsanız tüm değerler karakter olarak ekrana basılacaktır.Çün %s kullanımından dolayı tür dönüşümü yapılacak.Yani ben ekrana 97 yazmasını istiyoyorum ama ekranda a harfi çıkacak.

muhittin_kaplan

bir değişkeni global tanımlamakla, fonksiyon içerisinde static tanımlamak arasında ne fark vardır ?

z

C nin ASM karşısında en güzel kolaylığıdır bu.

Değişkeni global tanımladınmı olur olmaz rutinler bu değişkene erişebilir. Fakat Fonksiyon içine koydunmu bu değişkeni sadece fonksiyondan erişirsin. En azından yazdığın kodda abuk sabuk yerlerden bu değişkene erişmek istediğinde derleyici kızar.

ASM de bu iş biraz mide bulandırıcı. Stackda relatif adreslerin hesaplamaları ile boğuşmak durumunda kalırsın.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

Bu extern nedir nerede nicin kullanilir

z

Ben kullandığım şekliyle örnek vereyim. Bir proje açıp, program yaz. Bu programın değişkenleri olsun.
Programın  bağlı olduğu proje içinde bir program daha yaz. Bu program ilk programdaki değişkenleri kullanmak istesin.

Bu durumda değişkenleri tanımlar ve bunların başına extern ifadesi eklersin. Bu durumda derleyici bu değişkenlerin dışarıdaki bir yerden alınacağını anlar.

extern char a; // gibi.

İlk programda tanımladığın değişkenin ise export edilmesi gerekir. (Değişkenlerimi C den değil de asm tarafından export ettiğim için C de export etmeyi hatırlamıyorum)

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