Probleme mit langen Strings im EEProm

  • 1
  • 2
  • 3
  • Seite 1 von 3
werner mehl
Benutzer
Avatar
Geschlecht:
Alter: 69
Beiträge: 49
Dabei seit: 02 / 2012
Betreff:

Probleme mit langen Strings im EEProm

 · 
Gepostet: 20.11.2020 - 18:30 Uhr  ·  #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
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Re: Probleme mit langen Strings im EEProm

 · 
Gepostet: 20.11.2020 - 19:32 Uhr  ·  #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
Geschlecht: keine Angabe
Alter: 44
Beiträge: 308
Dabei seit: 07 / 2013
Betreff:

Re: Probleme mit langen Strings im EEProm

 · 
Gepostet: 21.11.2020 - 00:08 Uhr  ·  #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.


Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1474
Dabei seit: 03 / 2005
Betreff:

Re: Probleme mit langen Strings im EEProm

 · 
Gepostet: 21.11.2020 - 11:47 Uhr  ·  #4
Hi Thomas.

Am I missing something?

What is wrong with the EEPROM contents?

Regards

Merlin
Thomas.AC
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 44
Beiträge: 308
Dabei seit: 07 / 2013
Betreff:

Re: Probleme mit langen Strings im EEProm

 · 
Gepostet: 21.11.2020 - 13:02 Uhr  ·  #5
Hallo Merlin,

Look at the new picture.
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1474
Dabei seit: 03 / 2005
Betreff:

Re: Probleme mit langen Strings im EEProm

 · 
Gepostet: 21.11.2020 - 15:36 Uhr  ·  #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
Geschlecht:
Alter: 69
Beiträge: 49
Dabei seit: 02 / 2012
Betreff:

Re: Probleme mit langen Strings im EEProm

 · 
Gepostet: 21.11.2020 - 16:44 Uhr  ·  #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
Geschlecht:
Alter: 25
Beiträge: 1474
Dabei seit: 03 / 2005
Betreff:

Re: Probleme mit langen Strings im EEProm

 · 
Gepostet: 21.11.2020 - 17:00 Uhr  ·  #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
  • Seite 1 von 3
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   138   152 · Page-Gen-Time: 0.04912s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI