Thread overview
Durum kapısından ("port") veri okuma
Jan 20, 2012
erdem
Jan 20, 2012
erdem
Jan 20, 2012
erdem
January 20, 2012

Aslında bu konu için uygun başlık seçemedim. O yüzden en iyisi yaptığı işlemi yazayım dedim. Yaptığı işlem durum kapısı ("status port") bağlı düğmelerden gelen verileri okumak.

Ama benim asıl sorunum bunu okumakla değil de çıktının değişmeden alt satırlara geçmesini sağlamak. Örneğin çıktı şunun gibi oluyor:

Durum: 00'1'00000

Benim istediğim bunu tekrar alt satırlara yazmadan olduğu yerde değiştirsin. Aslında bu konuda dershanede bir örnek vardı. Hatta ben bu örneği yaptığımı da hatırlıyorum. Ama kitabı 3-4 kere aramama rağmen bir türlü bu örneği bulamadım. Sanırım biraz kafam karıştı :huh:

import std.stdio;
import girişçıkış;

const uint durum = 0x0c001;

void göster(uint sayı)
{
   writefln("Durum : %08b", sayı);
}

void main()
{
	erişimhakları(durum,1,1);
	uint önceki;


	while (true) {
	    uint okuduğum = oku(durum) ^ 128;

	    if (önceki != okuduğum) {
	        göster(okuduğum);
	        önceki = okuduğum;
	    }
	}
}

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

January 20, 2012

Teşekkürler. Tam olarak aradığım bu örnekti :-)

Ama denediğim zaman o örnekteki gibi çalışıyor. Ama ben istiyorum ki durum bitleri değiştiği zaman yani kullanıcı bir düğmeye bastığı zaman ekrana bir şey yazsın. Eğer kullanıcı bir düğmeye basmamışsa ortalıkta fır fır gezinmesin :-p

'// girişçıkış.d'

import std.stdio;
import core.bitop;

alias outp yaz;
alias inp oku;

alias ioperm erişimhakları;

extern(C)
{
/*
  void outb (ubyte value, ushort port)
   {
       asm
       {
           mov AL, value;
           mov DX, port;
           out DX, AL;
       }
   }
*/

   int ioperm (ulong __from, ulong __num, int __turn_on) ;
}

'// verigirişi.d'

import std.stdio;
import girişçıkış;

const uint durum = 0x0c001;

void göster(uint sayı)
{
   writef("\rDurum : %08b", sayı);
}

void main()
{
	erişimhakları(durum,1,1);
       uint okuduğum, önceki;

       /*
		   Bu kısımdaki gibi kullanmaya çalıştığım zaman
		   yani durum bitleri değiştiği zaman ekrana bir
		   şey yazacak şekilde değiştirdiğimde çalışmıyor ?!
          Sadece writefln kullanınca çalışıyor.
       */
       /*
       while(true)
       {
	    okuduğum = oku(durum) ^ 128;
           if (okuduğum != önceki) {
	        göster(okuduğum);
               önceki = okuduğum;
           }
       }
       */

       while(true) {
           okuduğum = oku(durum) ^ 128;
           göster(okuduğum);
       }
}

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

January 20, 2012

Alıntı (acehreli):

>

Sanıyorum gereken stdout.flush():

Çok teşekkürler! :) Şimdi tam istediğim gibi oldu.

Alıntı:

>
>     int ioperm (ulong __from, ulong __num, int __turn_on) ;
> ```

>

Buradaki 'ulong' parametrelerini de tekrar 'int' yaptım.

'core.bitop' içerisindeki 'inp oku' işlevi gibi bir çok işlev de parametre olarak 'uint' alıyormuş.

https://github.com/D-Programming-Language/druntime/blob/master/src/core/bitop.d

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

'\r' satır başına götürür. Hazır Değerler bölümünün çözümlerinde gizliymiş:

http://ddili.org/ders/d/hazir_degerler.cozum.html

Pardon. :blush:

Ali

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

January 20, 2012

Standart çıkış ara bellek kullandığı için karakterleri satır sonu görene kadar yazdırmıyor olabilir. Sanıyorum gereken stdout.flush():

import std.stdio;
import std.random;
import core.thread;

uint oku()
{
   Thread.sleep(dur!"msecs"(500));
   return uniform(0, 256);
}

void göster(uint sayı)
{
   writef("\rDurum : %08b", sayı);
   stdout.flush();
}

void main()
{
   uint okuduğum, önceki;

   while(true) {
       okuduğum = oku() ^ 128;
       if (okuduğum != önceki) {
           göster(okuduğum);
           önceki = okuduğum;
       }
   }
}

Ali

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