Vertical Counter
Yukarıdaki örnekte, az sayıda doğrudan örneklenebilen buton olan durumda buton okumasını uygulama kodundan bağımsız bir sistem servisi olarak gerçeklemenin basit bir yolunu paylaştım. Bu, basit gibi gözüken işlerde bile kullanmakta fayda olan bir yöntemdir.
Kullanıcı arayüzünün sistemin daha kritik bir bileşeni olduğu durumlarda, özellikle de buton sayısı fazla ise, şu giriş filtreleme işini biraz daha bitwise lojik kullanarak yapmayı bir seçenek olarak dikkate alabiliriz. Bu yöntemlerden biri, bana başta tuhaf gelen vertical counter yapısını kullanmaktır.
Vertical (düşey) counter dediğimiz şey, çok sayıda bir bitlik girişi paralel olarak filtrelemeye yarayan bir ardışık mantık sıralamasıdır.
Akla ilk gelen kullanım, buton girişlerini okumadır.
var
inputs: word;
outputs: word;
delta: word;
toggle: word;
counters: array[0..3] of word;
// Periyodik olarak çalışan counter run kodu:
delta:= inputs xor outputs;
for i := 3 downto 1 do counters[i]:= counters[i] xor counters[i-1];
counters[0]:= not(counters[0]);
for i:= 0 to 3 do counters[i]:= counters[i] and delta;
toggle:= counters[0];
for i := 1 to 3 do toggle:= toggle and counters[i];
outputs:= outputs xor toggle;
Bu kodun nasıl çalıştığını görmek için şu küçük programı indirip çalıştırabilirsiniz:
