closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

Word aus Record im EEPROM als VAR in Procedure übergeben?



pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 792
Registered: 02 / 2009
Homepage Private message
Subject: Word aus Record im EEPROM als VAR in Procedure übergeben?  -  Posted: 11.05.2018 - 20:55   -  
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:
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;


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;


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)^;


Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
This post has been edited 1-times. Last edit: 11.05.2018 - 20:58 by pvs-deck.
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5273
Registered: 03 / 2002
Homepage Private message
Subject: Re: Word aus Record im EEPROM als VAR in Procedure übergeben?  -  Posted: 12.05.2018 - 11:39   -  
Hallo Thorsten,
das funktioniert so nicht. Spätestens bei der Übergabe einer
EEprom Adresse an eine Prozedur/Funktion geht die Info verloren
dass hier das EEprom gemeint ist.
Mit einem Eprom Pointer kann das meistens behoben werden. Aber
mit einem VAR gibt es noch weitere Probleme. Wieso hier eigentlich
das VAR wWord ???? Bringt garnix. Ein word hat 2 bytes und ein Var
word ist eigentlich ein Pointer und hat auch 2 bytes.

rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 792
Registered: 02 / 2009
Homepage Private message
Subject: Re: Word aus Record im EEPROM als VAR in Procedure übergeben?  -  Posted: 14.05.2018 - 08:13   -  
Quote by rh

Hallo Thorsten,
das funktioniert so nicht. Spätestens bei der Übergabe einer
EEprom Adresse an eine Prozedur/Funktion geht die Info verloren
dass hier das EEprom gemeint ist.
Mit einem Eprom Pointer kann das meistens behoben werden. Aber
mit einem VAR gibt es noch weitere Probleme. Wieso hier eigentlich
das VAR wWord ???? Bringt garnix. Ein word hat 2 bytes und ein Var
word ist eigentlich ein Pointer und hat auch 2 bytes.

rolf


Habe ich da was falsch verstanden? Ich dachte nur bei VAR kann ich in der Procedure den Übergabeparamter auch verändern? Da er als Pointer verwendet wird?

Ich hab es jetzt so gelöst:
Code
procedure DispGetNo( wWordP : pointer to word; const wmin, wmax : word );
var
 bSpalte  : byte;
 wWork    : word;
begin
 bSpalte:=0;

 wWork:= word( EEPromPtr( wWordP )^ ); // Ziehe Word aus EEPROM
...


Und nach einer Änderung übergebe ich das dann so:
Code
elsif DispTast.ok    then EEPromPtr( wWordP )^:=wWork;


Aufgerufen wird es jetzt so:
Code
elsif DispTast.ok AND (bSelZeile=1) then DispGetNo( @Cfg1.WM000C_GesZeitFTTT, 1, $FFFF );


Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
This post has been edited 1-times. Last edit: 14.05.2018 - 08:15 by pvs-deck.
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 22.06.2018 - 11:15