Медленное выполнение DOS программ
Здравствуйте.
Решил я систему передачи сделать по своей квартире на основе LPT-порта.
Задача рубится на корню, когда я тестовым способом обнаружил очень низкую скорость работы программы. За 55мс обычный счетчик успевает досчитать до 30000 (счетная частота при этом составляет 540кГц), а если с выводом на LPT, то частота падает в 2 раза: счетчик досчитавает до 15000, что есть эквивалентом 270кГц на выходе порта.
Программу упростил до предела, но чуда не стало. Ниже ее исходник
<CODE>
{$O+,F+}
Program OutInterruptToLPT;
Uses Graph, Dos, Crt;
var
b:byte;
L,ck,w,i,j,deL:LongInt;{-2147483648..2147483647}
l_Const,k_Port:Real;
mx,my,mButton,X,Y1,Y2,Gd,Gm:integer;
OldInterrupt:Pointer;
reg: registers;
S10:string[10];
bt:boolean;
Procedure Mouse(VAR mx,my,mButton:integer);
begin
mbutton:=0;
reg.ax:=3;
intr ($33,reg);
mx:=reg.cx;
my:=reg.dx;
mbutton:=reg.bx;
end;
Procedure Control; interrupt;
Begin
{ mouse (mx,my,mButton);}
deL:=(deL +L) div 2;
L:=0;
l_Const:=0.055/deL; {sec}
k_Port:=1
if bt AND (mButton>0)
then
begin
got0XY(2,2);
writeln('del ',del);
WriteLn('l_Const ',l_Const);
WriteLn('k_Port ',k_Port);
end;
bt:=Not (mButton>0);
END; {control}
BEGIN
x:=256; del:=0; w:=0; ck:=0; L:=0; clrscr; WriteLn('Runing');
mx:=256;
{ reg.ax:=1;
intr ($33,reg);}
GetIntVec ($1C,OldInterrupt);
SetIntVec ($1C,@Control);
repeat
inc (L);
{R-}
inc(ck);
if ck>=k_Port
then
begin
ck:=0;
inc (b);
port[$378]:=b;
end;
{R+}
until keypressed;
SetIntVec ($1C,OldInterrupt);
END.
</Code>
Суть: идет циклический счет (переменная L) от 0 до победного, когда-нибудь возникает прерывание с интервалом 55мс или 0,055с в котором значение L выводится на экран и L:=0. За каждый проход цикла Repeat Until в порт LPT[$378] выводится число b (локальный счетчик).
Переменная del содержит среднее количество до которого успевается возвыситься L.
Переменная l_Const содержит время в секундах за которое происходит 1 проход цикла.
(процедуры mouse отключены)
Среда Windows98 без графической оболочки, загружается с дискетки,
Среда разработки Turbo Pascal 7.0
Оборудование Atlon 1900+, частота шины 333МГц.
Подозрения: проблема аппаратная, специально для DOSa & K работает низкочастотный блок. (Где бы там перемычку передвинуть). Этот ответ всего лишь версия.
Жду Ваших мнений...
|