Hallo,
kann es sein, das ich ein WORD aus einer Struktur nicht als VAR-Parameter an eine Procedure übergeben kann?
Ich habe eine Struktur/Record:
TPVSConfig1 = record
Kennung: WORD; (* 0 Kennung für USB Transfer *)
CMD: WORD; (* 2 Cmd Befehl *)
WM000C_GesZeitFTTT: WORD; (* 4 Gesamte Überbrückungszeit *)
...
...
...
end;
In meiner Globalen VAR-Unit:
Wenn ich nun meine DisplayEingabe aufrufe:
Die Eingabe-Funktion:
Wenn ich über die Procedure-Parameter (var) auf die EEPROM-Speicherstellen zugreifen möchte, erhalte ich immer '0'.
Oder habe ich hier nur einen Denkfehler in der Verarbeitung der EEPROM-Speicherstellen?
Geht das evtl. nur über die EEPROM-PTR Funktionen?
Thorsten
kann es sein, das ich ein WORD aus einer Struktur nicht als VAR-Parameter an eine Procedure übergeben kann?
Ich habe eine Struktur/Record:
Code
TPVSConfig1 = record
Kennung: WORD; (* 0 Kennung für USB Transfer *)
CMD: WORD; (* 2 Cmd Befehl *)
WM000C_GesZeitFTTT: WORD; (* 4 Gesamte Überbrückungszeit *)
...
...
...
end;
In meiner Globalen VAR-Unit:
Code
//------------------------------------------------------------
// Ab hier die EEPROM VARs Parameter
{$EEPROM}
//Structconst
Cfg1 : TPVSConfig1;
Cfg2 : TPVSConfig2;
Cfg3 : TPVSConfig3;
Cfg4 : TPVSConfig4;
// Ab hier die EEPROM VARs Parameter
{$EEPROM}
//Structconst
Cfg1 : TPVSConfig1;
Cfg2 : TPVSConfig2;
Cfg3 : TPVSConfig3;
Cfg4 : TPVSConfig4;
Wenn ich nun meine DisplayEingabe aufrufe:
Code
elsif DispTast.ok AND (bSelZeile=1) then DispGetNo( Cfg1.WM000C_GesZeitFTTT, 0, 65535 );
Die Eingabe-Funktion:
Code
procedure DispGetNo( var wWord : word; const wmin, wmax : word );
var
bSpalte : byte;
begin
repeat
DispStartNeueSeite;
DispKopf('Zahlenwert eingeben:', 0 );
gDrawString( 0,10,1,1,TxtRot0, '<OK> '+CHAR_UE+'bernahme / ');
gDrawString( 100,10,1,1,TxtRot0, '<ESC> Abbruch. ');
gDrawString( 0,18,1,1,TxtRot0, 'min: '+IntToStr( wmin )+' max: '+IntToStr( wmax ));
gDrawRect(155,26,250,51,$FF);
gDrawString( 160,30,2,2,TxtRot0, IntToStr( wWord:5:'0' )+'/s'); // über den Procedure Parameter ist er imm "0"
gDrawString( 0,30,2,2,TxtRot0, IntToStr( Cfg1.WM000C_GesZeitFTTT:5:'0' )+'/s'); // wenn ich direkt darauf zugreife wird der Wert angezeigt
DispHeadRefresh;
// Tasten auswerten
CheckDispTast( true ); // Warte auf Taste und sleep Process
....
// Beendigung Schleife?
until DispTast.ok or DispTast.esc ;
end DispGetNo;
var
bSpalte : byte;
begin
repeat
DispStartNeueSeite;
DispKopf('Zahlenwert eingeben:', 0 );
gDrawString( 0,10,1,1,TxtRot0, '<OK> '+CHAR_UE+'bernahme / ');
gDrawString( 100,10,1,1,TxtRot0, '<ESC> Abbruch. ');
gDrawString( 0,18,1,1,TxtRot0, 'min: '+IntToStr( wmin )+' max: '+IntToStr( wmax ));
gDrawRect(155,26,250,51,$FF);
gDrawString( 160,30,2,2,TxtRot0, IntToStr( wWord:5:'0' )+'/s'); // über den Procedure Parameter ist er imm "0"
gDrawString( 0,30,2,2,TxtRot0, IntToStr( Cfg1.WM000C_GesZeitFTTT:5:'0' )+'/s'); // wenn ich direkt darauf zugreife wird der Wert angezeigt
DispHeadRefresh;
// Tasten auswerten
CheckDispTast( true ); // Warte auf Taste und sleep Process
....
// Beendigung Schleife?
until DispTast.ok or DispTast.esc ;
end DispGetNo;
Wenn ich über die Procedure-Parameter (var) auf die EEPROM-Speicherstellen zugreifen möchte, erhalte ich immer '0'.
Oder habe ich hier nur einen Denkfehler in der Verarbeitung der EEPROM-Speicherstellen?
Geht das evtl. nur über die EEPROM-PTR Funktionen?
Code
Function EEPromPtr (p:pointer): pointer;
Ptr1 := @EEPromByte;
bb := EEPromPtr (Ptr1)^;
Ptr1 := @EEPromByte;
bb := EEPromPtr (Ptr1)^;
Thorsten