'Privileged instruction' hatası?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
'Privileged instruction' hatası?
Arkadaşlar Bir Step Motor Kontrolu Programı Yazmaya çalışıyorum.Fakat bir hata mesajı ile karşılaştım.
Hatanın sebebini bir türlü bulamadım.Delphinin Helpinde İşlemciyle alakalı olabilir yazıyor.
Ne yapmam lazım?
Hata mesajı şu:
Debugger Exception Notification
Project Project1.exe raised exception class EPrivilege with message 'Privileged instruction'.
Process stoped.Use Step or Run to continue.
Program kodu ise :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls ;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure WritePort(wPort : Word; bValue : Byte);
begin
asm {Assembly kodlarinin baslayacagini belirtiyor}
mov dx, wPort {Procedure ye disaridan verilern wPort degiskenini dx e aktariyor}
mov al, bValue {Procedure ye disaridan verilen, Porta gidecek Veriyi tutan Deger degiskenini Al ye aktariyor}
out dx, al {Al deki bilgi dx portuna yolluyor}
end; {Assembly kodu bitiyor}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
writeport(378,8);
writeport(378,4);
writeport(378,2);
writeport(378,1);
end;
end.
Hatanın sebebini bir türlü bulamadım.Delphinin Helpinde İşlemciyle alakalı olabilir yazıyor.
Ne yapmam lazım?
Hata mesajı şu:
Debugger Exception Notification
Project Project1.exe raised exception class EPrivilege with message 'Privileged instruction'.
Process stoped.Use Step or Run to continue.
Program kodu ise :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls ;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure WritePort(wPort : Word; bValue : Byte);
begin
asm {Assembly kodlarinin baslayacagini belirtiyor}
mov dx, wPort {Procedure ye disaridan verilern wPort degiskenini dx e aktariyor}
mov al, bValue {Procedure ye disaridan verilen, Porta gidecek Veriyi tutan Deger degiskenini Al ye aktariyor}
out dx, al {Al deki bilgi dx portuna yolluyor}
end; {Assembly kodu bitiyor}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
writeport(378,8);
writeport(378,4);
writeport(378,2);
writeport(378,1);
end;
end.
Merhablar ,,,
Geçen haftalarda ledlerle bir devre yaptım üniversitede kontrol sistemleri dersinde..
Yazdığım program pascal da ama sanırım vereceğim kodları delphi ye uyarlarsın artık...
şimdi şöyle anlatayım anlatıcaklarım , paralel port a göre...
bilindiği üzere paralel porrtda 8 adet data portumuz var , ve bunlar p2 ve p9 arasındakiler...
DB-25 paralel port üzerinde , 2 ve 9 uncu pinler arasındaki pinler...
pin 1 ise strobe uç yani veri doğrulaması geriye kalan portlar control ve status yani durum bilgisi alma amacı ile...
8 lik bir dizi yarat ve her bir elemana , 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 değerlerini ata...
For Example ;
dizi[1]:=1;
dizi[2]:=2;
dizi[3]:=4;
dizi[4]:=8;
dizi[5]:=16;
dizi[6]:=32;
dizi[7]:=64;
dizi[8]:=128;
bu dizi değerlerinin her biri 1 pine gider ve +5 volt dur.
bunları lpt ye yollarken
writeln(LST,dizi[x]);
şeklinde yollarsın..
eğer delphi için bir örneğini bulursam gönderrim...
Kolay Gelsin...
Geçen haftalarda ledlerle bir devre yaptım üniversitede kontrol sistemleri dersinde..
Yazdığım program pascal da ama sanırım vereceğim kodları delphi ye uyarlarsın artık...
şimdi şöyle anlatayım anlatıcaklarım , paralel port a göre...
bilindiği üzere paralel porrtda 8 adet data portumuz var , ve bunlar p2 ve p9 arasındakiler...
DB-25 paralel port üzerinde , 2 ve 9 uncu pinler arasındaki pinler...
pin 1 ise strobe uç yani veri doğrulaması geriye kalan portlar control ve status yani durum bilgisi alma amacı ile...
8 lik bir dizi yarat ve her bir elemana , 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 değerlerini ata...
For Example ;
dizi[1]:=1;
dizi[2]:=2;
dizi[3]:=4;
dizi[4]:=8;
dizi[5]:=16;
dizi[6]:=32;
dizi[7]:=64;
dizi[8]:=128;
bu dizi değerlerinin her biri 1 pine gider ve +5 volt dur.
bunları lpt ye yollarken
writeln(LST,dizi[x]);
şeklinde yollarsın..
eğer delphi için bir örneğini bulursam gönderrim...
Kolay Gelsin...
Re: Bir Hata.. Yardım!
meteor yazdı:procedure WritePort(wPort : Word; bValue : Byte);
begin
asm {Assembly kodlarinin baslayacagini belirtiyor}
mov dx, wPort {Procedure ye disaridan verilern wPort degiskenini dx e aktariyor}
mov al, bValue {Procedure ye disaridan verilen, Porta gidecek Veriyi tutan Deger degiskenini Al ye aktariyor}
out dx, al {Al deki bilgi dx portuna yolluyor}
end; {Assembly kodu bitiyor}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
writeport(378,8);
writeport(378,4);
writeport(378,2);
writeport(378,1);
end;
end.
Şimdi birazda senin kodu inceledim de ,,, assembly komutlarındada problem var dx e direk değer aktaramazsın.
ilk önce ;
mox ax,wport
şeklinde yolla sen direk dx e yazmışın asm de hiç bir zaman direk dx e yazılmaz benim bildigim kadarı ile....
ayrıca ufak bir hatırlatma daha.
tüm asm kodlarında al , dl kullanmışsın...
bu şekidle yapma...
ax ve dx e yolla ,, zaten ekrana int 20h ile yazılacak olan değer dl nin içinde kalır... den dx e attıgında dl ye gider otomatikman...
al konusuna gelince.. direk al ye aktarma , ax e attıgın değeri al den oku...
yani ,
mov ax,wport
mov dx,ax
şeklinde kullan kısacası....
Kolay Gelsin...
m4st3rmus arkadaşım dediklerini aynen yaptım.ama yine olmadı:(Aynı hatayı yine veriyor.Aslında ben bu asm kodlarını başka bir yerden almıştım.araştırdığım baktığım kitaplarda hep aynı kod kullanılmış.Farklı bir yöntem bulamadım.Asm kullanılmadan yapılabilirmi bilmiyorum.
Bu arada Acemiliğimi bağışlayın...
Bu arada Acemiliğimi bağışlayın...

NT tabanlı sistemlerde in-out gibi asm komutları ile donanım portlarına erisemezsiniz
eger erismek isterseniz Privilidge instruction hatası alırsınız
bunun icin dlportio diye bir surucu kurarak halledebilirsin
http://www.driverlinx.com/ftp/unsupported/port95nt.exe
bunu kurunca o dedigin hatayı almazsın ve sistemin calısır.
eger erismek isterseniz Privilidge instruction hatası alırsınız
bunun icin dlportio diye bir surucu kurarak halledebilirsin
http://www.driverlinx.com/ftp/unsupported/port95nt.exe
bunu kurunca o dedigin hatayı almazsın ve sistemin calısır.
ÜŞENME,ERTELEME,VAZGEÇME
http://antrak.org.tr/gazete/092003/metin.htm
4. Program çalışmıyor. Onlarca hata kutusu çıkartıyor (Error : Privileged instruction). Ne hatam var?
Muhtemelen Windows XP kullanıyorsunuzdur. XP direk port erişimine izin vermediği için programı çalıştırmadan önce Özelliklerden uyumluluk sekmesinde aşağıdaki gibi ayarlayın

4. Program çalışmıyor. Onlarca hata kutusu çıkartıyor (Error : Privileged instruction). Ne hatam var?
Muhtemelen Windows XP kullanıyorsunuzdur. XP direk port erişimine izin vermediği için programı çalıştırmadan önce Özelliklerden uyumluluk sekmesinde aşağıdaki gibi ayarlayın

selam, üstteki mesajda cevap var, birkaç ek yapmak istedim.meteor yazdı:m4st3rmus arkadaşım dediklerini aynen yaptım.ama yine olmadı:(Aynı hatayı yine veriyor.Aslında ben bu asm kodlarını başka bir yerden almıştım.araştırdığım baktığım kitaplarda hep aynı kod kullanılmış.Farklı bir yöntem bulamadım.Asm kullanılmadan yapılabilirmi bilmiyorum.
Bu arada Acemiliğimi bağışlayın...
bulduğun kod yapmak istediğin iş için en iyi örnek.
dediğin gibi değişik dll'ler ilede yapılabiliyor inout32.dll diye bişey var, ama programınla onuda taşıman lazım ayrıca kurulum falanda gerekecek, küçük uygulamalar için direkt erişşim en iyisi. yukarıda bahsettiğim ayarı delphi ile yapmanın bir yolu varmı bilmiyorum.
hatanını nedenini gkimirti açıklamış, xp ve nt tabanlı sistemlerde in out komutları işletim sistmi tarafından çalıştırıltmıyor. nedeni malum güvenlik.
üstteki linkte ayrıca benzer bir uygulama var. oradaki dizi değerlerini değiştirerekde step programını yapabilirsin,
iyi çalışmalar
birkaç gündür şehir dışındaydım pardon..meteor yazdı:mege verdiğin ipucu gerçekten çok işe yaradı sağol.Artık o hatayı almıyorum.Yalnız Motor devresini hazırladım ve tekrar denedim.Yine çalışmadı.pascalda denedim çalıştı.koda eklemem gereken daha ne olabilir sizce?
porta veri gelip gelmediğini bi kontrol etsen, orlara birer led bağlayıp kontrol et.
hata nedenin port adresini yanlış girmenden kaynaklanıyor olabilir. örneğin paralel port 378h 'da ama bunu (assemblyde) desimale çevirmen lazım 378h= 888(10) gibi, bunlarıda bikontrol et.
linkteki o programı bir dene; o çalışıyor(ben yaptım nasıl çalışmaz dimi

oradan portlara bakarsın.
Re: Bir Hata.. Yardım!
Doğrudan dx e yazılabilir. mov dx,5 çalışır.DotCom yazdı: şeklinde yolla sen direk dx e yazmışın asm de hiç bir zaman direk dx e yazılmaz benim bildigim kadarı ile....
al ve dl rahatlıkla kullanılabilir ancak 32 bit işletim sisteminde pek bir avantajı yok. ax dx yerine eax edx kullanmak daha iyi.DotCom yazdı: tüm asm kodlarında al , dl kullanmışsın...
bu şekidle yapma...
ax ve dx e yolla ,, zaten ekrana int 20h ile yazılacak olan değer dl nin içinde kalır... den dx e attıgında dl ye gider otomatikman...