July 12, 2012

İlk denemeleri oluşturmaya başladım. Ama programın taşınabilir olması, hem Linux hem de Windows tarafında çalışabilmesi için şu şekilde yazdım. Sizce nasıl fikir.

// giriscikis.d

version (linux) {
	import core.bitop;
	alias outp yaz;
	alias inp oku;
	alias ioperm erişimhakları;

	extern (C) int ioperm (uint __from, uint __num, int __turn_on) ;
}

version (Windows) {
	alias Out32 yaz;
	alias Inp32 oku;

	extern (C) {
		void    Out32(short PortAddress, short data);
		short   Inp32(short PortAddress);
	}
}

Hatta düşününce belki buradaki adres tanımlamaları da giriş çıkış dosyasına gidebilirmiş. Çünkü paralel portun adresi kullanıcının değiştirebileceği bir değişken değil.

// ledyak.d

import std.stdio;
import giriscikis;

void main()
{
   version (linux) {
		/*
			paralel portun adresi
		*/
		const uint adres = 0x0c000;
		/*
			göndereceğimiz veri
		*/
		ubyte veri = 0b_11111111;
		erişimhakları(adres, 1, 1);
   }

   version (Windows) {
		/*
		paralel portun adresi
		*/
		short adres = 0x0378;
		/*
			göndereceğimiz veri
		*/
		short veri = 0b_00001010;
   }

	yaz (adres, veri);
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 12, 2012

Windows'ta sabit genelde '0x0378' oluyor galiba. Linux'ta ise emin değilim.

'$ dmesg | grep parallel'

ile paralel port adresini öğrenebiliyorduk. Sizin de bahsettiğiniz gibi BIOS'tan da değiştirilebiliyor diye biliyorum.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 12, 2012

Mantıklı. Paralel portun adresi sabit mi gerçekten? İki tane de olabilir. Hatta BIOS'ta ayarlanabiliyor muydu?

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 12, 2012

Erdem, konuyu merakla takip ediyorum. Bu konular hoşumada gidiyor katkı sağlamakta istiyorum ama cahilligimi maruz görürsen bu son kodlar tam olarak ne yapıyor. Bu kodlar bir devre üzerinde mi çalışıyor?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Evet Zafercim aynen öyle.

Burada daha ayrıntılı anlatmıştım (http://ehobi.org/ledyakma.html) ama basitçe yaptığı delikli deneme kartı (breadboard) üzerinde bulunan 4 tane ledi yakıyor. Aslında burada ledleri yakan program da çok basit:

'yaz (adres, veri);'

Yani paralel porta istediğimiz veriyi yazıyor. Örneğin 'veri = 0b_00001111;' ise sadece ilk 4 ledi yakıyor.

Buna elektroniğin Merhaba Dünya! programı diyebiliriz :-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Alıntı (erdem):

>

basitçe yaptığı delikli deneme kartı (breadboard) üzerinde bulunan 4 tane ledi yakıyor. Aslında burada ledleri yakan program da çok basit

Aslında göründüğünden çok daha basitmiş. Ancak bilmeyince herşey gibi zor tabi :)

Peki yaz() metodu ya da aslında Out32() metodu nerede? Yukarıda bahsedilen kütüphane içerisinde mi tanımlı? D ile direk porta erişim yapılabilek bir kütüphane yok sanırım?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Evet aynen şimdilik D ile direkt olarak portlara erişim sağlayan kütüphane yok.

Out32() metodu 'inpout32.dll' dosyasının içinde gömülü durumda ;-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 13, 2012

Alıntı (erdem:1342003831):

>

Hımm. Şimdi bu makaleyi (http://www.gamedev.net/blog/1140/entry-2254003-binding-d-to-c/)okuduktan sonra konunun detaylarını yavaş yavaş anlamaya başlıyorum.

Buna göre C ilintileri yazarken ilkönce derleme anında mı yoksa çalışma zamanında mı kütüphaneyi bağlayacağımıza karar vermemiz gerekiyor. Derleme anında derken C kütüphanelerini ya da program parçalarını direkt olarak bağlamayı kasdediyoruz. Çalışma zamanı derken de paylaşımlı bir kütüphaneyi (dll, so vs..) gibi programın çalışması sırasında yüklemeyi kasdediyoruz. Burada bağlayıcı bir bağlama işlemi gerçekleştirmiyor.

Posix tabanlı sistemlerde D C ABI'den anladığı için bağlama işlemini kolaylıkla gerçekleştirebiliyoruz. Windows tarafında ise 4 tane farklı program parçacığı biçemi var: COFF, OMF, ELF. DMD (Burada program parçacığını object file anlamında kullandım. Ali bey böyle diyordu sanırım)

DMD oldukça eski bir bağlayıcı olan Optlink'i bağlayıcısını ve OMF kullanıyor. GDC'nin Windows uyarlaması MinGW ise ELF destekliyor. Microsoft Visual Studio ile gelen derleyici de COFF kullanıyor.

Elle DLL dosyalarını yüklediğimizde uygulamamız ile DLL arasındaki etkileşim sadece bellek düzeyinde oluyor.

Yok eğer derleme anında kütüphaneyi kullanmak istiyorsak program parçacığının biçemi burada bağlayıcının davranışını belirliyor. Eğer bağlayıcı program parçacığının biçimini tanımazsa, çalıştırılabilir bir dosya oluşmuyor. Bu durumda karşımıza şu seçenekler çıkıyor:

  • C kütüphanesini D bağlayıcısının anlayabileceği biçimde program parçaları oluşturabilen bir derleyici ile derlemek.

  • Program parçalarını uygun biçime çevirmek için bir dönüştürücü araç kullanmak.

  • Bir DLL'nin içinden bağlayıcı kütüphane oluşturabilen bir program kullanmak.

Önceki sayfadaki bu iletiyi işaretlediğimi ama okumayı ihmal ettiğim belirtmeliyim...:(

Az önce Erdem, MVC ile ilgili başlıkta gündeme getirince, ben bunu bir yerden hatırlıyorum dedim kendi kendime. İş yoğunluğu nedeniyle kaynamış gitmiş. İsterseniz bu konuya buradan devam edelim? Belki de kütüphane ve ilintiler hakkında yeni bir başlık oluşturup bunları bir araya getirmek de iyi filir olabilir. Çünkü bu değerli bilgiler başka iletiler arasında kaynayıp gidiyor maalesef.

Teşekkürler...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2
Next ›   Last »