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

  • 1
  • 2
  • 3
  • Page 2 of 3
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

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

 · 
Posted: 15.10.2018 - 10:03  ·  #9
Hallo rolf,

bei WORD und BYTE habe ich das Problem nicht.

Mit Deinem letzten Update V5.09.47 stimmt was nicht.

Wenn ich mein aktuelles Projekt damit übersetze läuft gar nichts mehr richtig und ich habe ständig Abstürze.

Nachdem ich die V 5.09.45 wieder installiert habe sieht es wieder normal aus.
Ich glaube da ist was schief gegangen :-)

Thorsten
Attachments
Unterschied .45 und .47
Filename: 15-10-_2018_19-34-29.jpg
Filesize: 250.19 KB
Title: Unterschied .45 und .47
Information: Unterschied .45 und .47
Download counter: 128
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

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

 · 
Posted: 16.10.2018 - 11:02  ·  #10
Hallo rolf,

hast Du das mit Deinem Update .47 gelesen?

Thorsten
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

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

 · 
Posted: 16.10.2018 - 14:30  ·  #11
Hallo Thorsten
ich bin etwas schockiert!
Aber "tut nicht" hilft mir nicht weiter. Wie immer
rolf
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

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

 · 
Posted: 16.10.2018 - 19:01  ·  #12
Quote by rh

Hallo Thorsten
ich bin etwas schockiert!
Aber "tut nicht" hilft mir nicht weiter. Wie immer
rolf


Hallo rolf,

was soll ich machen das Projekt hat aktuell mehr als 11.000 Programmzeilen.

Wenn ich es mit der .47 übersetze siehst Du das Chaos auf dem Display und die Steuerung startet andauernd neu :-(

Nehme ich die .45 funktionert wieder alles, also muss es was mit Deinen Änderungen zu tun haben.

Wie soll ich das bei dem Projekt eingrenzen?

Thorsten
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

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

 · 
Posted: 16.10.2018 - 20:21  ·  #13
Code

function DispGetPin( sPin : string[6]; const sLogStr : string[41]):string[6];


das ist schon ziemlich "framelastig". Du könntest versuchsweise die Parameterübergabe mit globale Variablen durchführen und DispGetPin
in eine procedure umwandeln.

Code

var
  DispGetPin_sPin : string[6];
  DispGetPin_sLogStr : string[41];
  DispGetPin_returnValue : string[6];

procedure DispGetPin;
begin
  // verarbeite DispGetPin_sPin und DispGetPin_sLogStr 
  // schreibe Ergebnis in DispGetPin_returnValue
end;

// main
begin
  DispGetPin_sPin := '123456';
  DispGetPin_sLogStr := 'irgend etwas';
  DispGetPin_returnValue := '';  
  DispGetPin();
  // mache irgendetwas mit DispGetPin_returnValue
end.


oder so

Code

type
  tDispGetPinParameter = record
    sPin : string[6];
    sLogStr : string[41];
    DispGetPin_returnValue : string[6];
  end;
  
var
  myParam : tDispGetPinParameter;

procedure DispGetPin(var param : tDispGetPinParameter);
begin
end;

//-----------------------------------------------------------------------------
begin
  myParam.sPin := 'sPin';
  myParam.sLogStr := 'LogStr';
  myParam.DispGetPin_returnValue := '';
  DispGetPin(myParam);
end.


Nur eine Idee von vielen.

Frage: Welchen Sinn hat das Schlüsselwort const in deiner Parameterliste?

Man könnte auch versuchen, mit dem Programm Winmerge einen Vergleich der .asm oder .lst Dateien durchzuführen, um Unterschiede im generiertem code zwischen den Compilerversionen herauszufinden.

Oder Debuggen mit Debugger, welche CPU?

Oder Debugausgaben über eine freie UART ohne Interrupt Mode
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

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

 · 
Posted: 17.10.2018 - 11:44  ·  #14
Hallo Thomas.

Quote by Thomas.AC

...
Nur eine Idee von vielen.

Frage: Welchen Sinn hat das Schlüsselwort const in deiner Parameterliste?


Ja, es gibt viele Möglichkeiten.
Meine Globalen-VARs sind schon recht umfangreich und für so eine "Einfache" Funktion möchte ich hier lieber als Parameter übergeben.

Frames sind kein Problem, ich habe allen Tasks und Processe mind. das doppelte von nötigen an Frame und Stack gegeben.

Wegen dem CONST, das ist eine Angewohnheit aus Delphi:
"const ermöglicht dem Compiler die Optimierung des Codes für strukturierte und String-Parameter. Gleichzeitig wird die versehentliche Übergabe eines Parameters als Referenz an eine andere Routine verhindert. (Aus einer Delphi Hilfe)"

Quote by Thomas.AC

Man könnte auch versuchen, mit dem Programm Winmerge einen Vergleich der .asm oder .lst Dateien durchzuführen, um Unterschiede im generiertem code zwischen den Compilerversionen herauszufinden.


Ja, aber wie hilft rolf dies bei dem Compiler Problem?
Der Fehler hat ganz klar was mit Strings zu tun, ich nutze diese Änderung an dem EEPROMPTR() auf String ja noch nicht mal.

Übersetze ich meinen aktuellen Code in der .45 alles PERFEKT bis auf dem BUG EEPROMPTR() auf die Strings.

Sobald ich den gleichen Programmcode mit der .47 nutze sind alle String auf dem Display "Schrott" (siehe Bild), dies betrifft dann wahrscheinlich die Funktionen "gDrawString()" usw.

Quote by Thomas.AC

Oder Debuggen mit Debugger, welche CPU?

XMEGA384C3, klar wenn ich nun wieder die Fehlerhafte .47 installiere und das Projekt damit teste bekomme ich evtl. was angezeigt. Oder auch nicht.

Quote by Thomas.AC

Oder Debugausgaben über eine freie UART ohne Interrupt Mode


Ja, aber was bringt mir das? Ich mache schon in meinem Projekt die ganze Zeit Debugausgaben auf den UART. Das Einzige was ich auf der Debugausgabe sehe bei der .47 sind Fehlerhafte Stringausgaben. Und da rolf an den Strings was geändert hat, würde ich hier auch den Fehler vermuten. Es ist vollkommen egal ob die String mit "gDrawString()" auf dem Display oder mit "WriteLn()" auf die UART ausgegeben werden, alle Stringausgaben sind Schrott mit der .47

Thorsten
Attachments
StackFrame .45
Filename: 17-10-_2018_11-34-52.jpg
Filesize: 96.3 KB
Title: StackFrame .45
Information: StackFrame .45
Download counter: 113
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

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

 · 
Posted: 17.10.2018 - 19:09  ·  #15
Hier ein Testprogram für Rolf

Code

program testString;

Device = mega128, VCC=5;

Define_Fuses

Import SysTick, SerPort;

From System Import;

Define
  ProcClock      = 16000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = 200, iData;
  FrameSize      = 200, iData;
  SerPort        = 19200, Stop2;    {Baud, StopBits|Parity}

Implementation
{$IDATA}

procedure printStr(str : string[40]);
begin
  Writeln(Serout, str);
end;

//-----------------------------------------------------------------------------
begin
  printStr('My String');
  loop
  endloop;
end.
Attachments
Word aus Record im EEPROM als VAR in Procedure übergeben?
Filename: myString.png
Filesize: 5.75 KB
Title:
Download counter: 87
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

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

 · 
Posted: 18.10.2018 - 10:53  ·  #16
Hallo rolf,

danke für das schnelle Bug-Fix, jetzt läuft das Projekt auch wieder mit der .47
Das mit dem EEpromPtr() auf einen String habe ich aber mit der .47 noch nicht getestet.

@Thomas,
Danke für Deine Mithilfe

Thorsten
  • 1
  • 2
  • 3
  • Page 2 of 3
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 18 · Cache Hits: 15   146   161 · Page-Gen-Time: 0.039771s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI