Probleme mit langen Strings im EEProm

  • 1
  • 2
  • 3
  • Page 1 of 3
werner mehl
Benutzer
Avatar
Gender:
Age: 68
Posts: 49
Registered: 02 / 2012
Subject:

Probleme mit langen Strings im EEProm

 · 
Posted: 20.11.2020 - 17:30  ·  #1
Hallo Zusammen,

ich verwende in einer Konfiguration wie dieser
-------------------------------------

Device = xmega256A3U, VCC=3.3;
Import SysTick, SerPortC1, SerPortD1, I2Cport;
From System Import LongInt, Int64, Float;

Define
OSCtype = extXTAL=16000000,
PLLmul = 4,
prescB = 1,
prescB = 1, overdrive;
SysTick = 10; {msec}
SerPortC1 = 2400, Stop1; {9600 Baud, 1Stopbit} // APC USV
TxBufferC1 = 32, iData; {8 Byte Buffer und Int}
RxBufferC1 = 32, iData; {8 Byte Buffer und Int}

SerPortD1 = 57600, Stop1; {9600 Baud, 1Stopbit} // Terminal für Test Ausgaben
TxBufferD1 = 64, iData; {8 Byte Buffer und Int}
RxBufferD1 = 64, iData; {8 Byte Buffer und Int}

...

StackSize = $01FF, iData;
FrameSize = $01FF, iData;

I2Cport = PortC;
I2Cdat = 0;
I2Cclk = 1;

-------------------------------------

zum speichern von, während der Laufzeit ausführbaren Makros sehr lange Strings bis zur maximalen Länge.

{$EEPROM}
Dummy : Array[1..14] of String[20];
Dummy01 : Array[1..14] of String[$FF];

dabei fällt mir immer wieder auf, dass die gelesenen Strings kürzer sind als die geschriebenen.
Was beim ausführen der gespeicherten Makros fatal enden kann.

Kann ich an STACK / FRAMESize noch drehen?
Gibt es eine Möglichkeit die schreibgeschwindigkeit ins EEProm zu verringern? Als Versuch oder Lösung.

Mir fällt nichts mehr ein was ich noch testen kann.
Gibt bzw. gab es vergleichbare Probleme / Lösungen

Besten Dank
Gruß
Werner
pvs-deck
PowerUser
Avatar
Gender:
Age: 52
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: Probleme mit langen Strings im EEProm

 · 
Posted: 20.11.2020 - 18:32  ·  #2
Hallo Werner,

musst Du diese wirklich als String abspeichern?
Ich habe für meine Steuerungen eine art AWL (Anweisungsliste aus der SPS Technik) eingebaut:

Code
// AWL Code Speicher 
type
tAWLZelle = record
               AWL        : byte;  // Anweisungsbefehl
               AKKU       : word;  // AKKU / Wert / IO usw
              end;

tAWLZelleArray = Array [0..149] of tAWLZelle;

const
// AWL Codes und Zuweisungen
// Funktion   Beschreibung   Funktionsart
  awlU      : byte =000;  // U   UND-Verknüpfung   Bitverknüpfung
  awlUN     : byte =001;  // UN   UND NICHT   Bitverknüpfung
  awlO      : byte =002;  // O   ODER bzw. UND vor ODER   Bitverknüpfung
  awlON     :  byte =003;  // ON   ODER NICHT   Bitverknüpfung
  awlZuw     : byte =004;  // =   Zuweisung   Bitverknüpfung
  awlS       : byte =005;  // S   Setzen   Bitverknüpfung
  awlR       : byte =006;  // R   Rücksetzen   Bitverknüpfung
  ....
  awlNW     : byte =254;  // *   Netzwerkende
  awlBE     : byte =255;  // BE   Bausteinende   Programmsteuerung

// AWL Zuweisungen
// Funktion   Beschreibung   Funktionsart
  awlIN00      : word =000;  // IN00
  awlIN01     : word =001;  // IN01
  awlIN02      : word =002;  // IN02
  awlIN03     :  word =003;  // IN03
..
  awlOUT00     : word =100;  // OUT00
  awlOUT01     : word =101;  // OUT01
  awlOUT02     : word =102;  // OUT02
  awlOUT03     : word =103;  // OUT03
..          
  awlM00       : word =200;  // M00
  awlM01       : word =201;  // M01
  awlM02       : word =202;  // M02


Mein Interpreter auf dem XMEGA verarbeitet dann den Code.

Angenommen AWL Script:
Code
AND IN00
AND IN01
= OUT00
BE


Sieht dann im EEPROM wie folgt aus:
Code
$00 $00 $00
$00 $00 $01
$04 $00 $64
$FF $00 $00


Das macht sowas sehr smart und klein.

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

Re: Probleme mit langen Strings im EEProm

 · 
Posted: 20.11.2020 - 23:08  ·  #3
Hallo Werner,

könnte ein Compiler-Bug zu sein. Mein Testcode zeigt im Simulator falschen EEprom Inhalt an.

Code

program gateway;

Device = xmega256A3U, VCC = 3.3;

Define_Fuses
    Override_Fuses;
    progFuses = true;
    FuseBits1 = [WDPER0, WDPER1, WDPER2];  // watchdog = 2s
    FuseBits4 = [WDLOCK];
    FuseBits5  = [BODLEVEL1, BODLEVEL2, BODACT0]; // 2.8V

Import;

Define
    OSCtype        = extXTAL=8000000, PLLmul=4, prescA=1, prescB=1, prescC=1, faildet;
    StackSize      = 256, iData;
    FrameSize      = 256, iData;

Implementation

var
{$EEPROM}
Dummy : Array[1..14] of String[$FF];

{$IDATA}

procedure initEEprom;
var
  i : byte;
begin
for i:=1 to 14 do //272
   Dummy[i] := 'Ich bin ein unheimlich langer String Text und mein Inhalt spielt keine Rolle. Hauptsache ist, dass ich lang bin und viele bytes benoetige. Damit moechte ich testen, ob AVRco mit langen Strings umgehen kann';
 endfor;
end;

{-------------------------------------------------------------------------------
Main Program
-------------------------------------------------------------------------------}
begin
    EnableInts($87);
    initEEprom;
    loop
    endloop;
end.


You must be logged in or your permissions are to low to see this Attachment(s).
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1362
Registered: 03 / 2005
Subject:

Re: Probleme mit langen Strings im EEProm

 · 
Posted: 21.11.2020 - 10:47  ·  #4
Hi Thomas.

Am I missing something?

What is wrong with the EEPROM contents?

Regards

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

Re: Probleme mit langen Strings im EEProm

 · 
Posted: 21.11.2020 - 12:02  ·  #5
Hallo Merlin,

Look at the new picture.
You must be logged in or your permissions are to low to see this Attachment(s).
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1362
Registered: 03 / 2005
Subject:

Re: Probleme mit langen Strings im EEProm

 · 
Posted: 21.11.2020 - 14:36  ·  #6
ah, thanks. I am not a German speaker, so it was not obvious. (Having Google translate on didn't help either ;-) ). Interesting that it is double letters in both cases. Is this with or without optimiser, or both?
werner mehl
Benutzer
Avatar
Gender:
Age: 68
Posts: 49
Registered: 02 / 2012
Subject:

Re: Probleme mit langen Strings im EEProm

 · 
Posted: 21.11.2020 - 15:44  ·  #7
Das ist sehr interessant, mir ist bis jetzt nur die Längendifferenz aufgefallen. Der Fehler tritt bei mir mit und ohne Optimizer auf.

This is very interesting, so far I only noticed the difference in length. The error occurs with and without an optimizer.

Werner
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1362
Registered: 03 / 2005
Subject:

Re: Probleme mit langen Strings im EEProm

 · 
Posted: 21.11.2020 - 16:00  ·  #8
Just a theory, but I am pretty sure that writing to EEPROM does not occur in AVRCo if the value being written is the same as what is already there. Maybe a bug in this detection mechanism?

Merlin
  • 1
  • 2
  • 3
  • Page 1 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: 15 · Cache Hits: 14   138   152 · Page-Gen-Time: 0.028045s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI