Zitat von
thkerkmann:
Hi,
ich weiss ja nicht, wozu dieser Code dient - aber effizient ist er in der Tat nicht.
Um was für ein Programm handelt es sich denn da ?
Gruss
Die Routine holt ein Byte ab und stellt sie in einem Memofeld dar.
Die Byte routine ist in einerm Modul rscom.pas definiert. Da stehen Sachen, die nach
API von MS klingen.
Es geht um eine Kommunikation mit einem AVR ATtiny2313.
Der sendet bytes die in einem Memofenster dargestellt werden.
Eigentlich würde ich gerne bytes vom uC in einer Warteschleife empfangen, aber aus der muss ich ja irgendwie auch rauskommen können; also hat der Schreiber dieser Routine so was wie einen Softwareinterrupt gemacht, denk ich, nachdem ich jetzt weiss, dass mit 1o Hz abgefragt wird.
Im Prinzip ist es so ähnlich wie ein Hyperterminal. Ich nehme an, dass ein byte irgendwann eintrifft und erst mit Readbyte() abgeholt wird. Was passiert eigentlich, wenn es nicht abgeholt wurde und ein 2. byte eintrifft?
Steckt dann alles, oder wird das 1. byte verworfen. Das sind Innereien von denen ich keine Ahnung habe.
Was der uC dann machen würde, weiss ich genau, aber Delphi und
API ist mir unklar. Muss ich das überhaupt wissen?
Zur Verdeutlichung noch einige Zeilen aus der rscom.pas.
Code:
function INBUFFER (): DWORD;
var Comstat: _Comstat;
Errors: DWORD;
begin
if ClearCommError (PortHandle, Errors, @Comstat) then
INBUFFER := Comstat.cbInQue else INBUFFER := 0;
end;
function READBYTE(): Integer;
var Dat: Byte;
BytesRead: DWORD;
begin
ReadFile(PortHandle,Dat,1,BytesRead,NIL);
if BytesRead = 1 then Result:=Dat else Result := -1;
end;
Hat jemand einen Vorschlag für mich, wie ich das anders machen könnte?
Vielleicht ein Vorschlag, wenn ich nicht zu aufdringlich bin, von dir, haentschman?
Ich danke jedenfalls für die rege Beteiligung.