[BUG?] komplexe Typkonstrukte zwischen EEPROM und RAM kopieren

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

[BUG?] komplexe Typkonstrukte zwischen EEPROM und RAM kopieren

 · 
Gepostet: 03.03.2017 - 13:01 Uhr  ·  #1
Hallo,

das Kopieren zwischen EEPROM und RAM funktioniert bei komplexeren Typ-Konstruktionen nicht.
Ist das ein Bug oder wird das einfach nicht unterstützt?

Gruß

Thomas

Code

program SimulatorTest;

Device = mega8, VCC=5;

Import SysTick;

Define
  ProcClock      = 16000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $0100, iData;
  FrameSize      = $0100, iData;

Implementation

type tObj = record
  a : byte;
  b : byte;
end;
  
structconst
 {$EEPROM}
 arr1 : array[0..5] of tObj = ((a:1;b:2),(a:1;b:2),(a:1;b:2),(a:1;b:2),(a:1;b:2),(a:1;b:2));

var
 {$IDATA}
 arr2 : array[0..5] of tObj;

begin
  arr2 := arr1;
  loop
  endloop;
end SimulatorTest.
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
miparo
Schreiberling
Avatar
Geschlecht:
Herkunft: Germany
Alter: 59
Beiträge: 988
Dabei seit: 09 / 2007
Betreff:

Re: [BUG?] komplexe Typkonstrukte zwischen EEPROM und RAM kopieren

 · 
Gepostet: 03.03.2017 - 19:04 Uhr  ·  #2
Hi Thomas,
das ist nur ein Schönheitsfehler vom Compiler, da du das falsch geschrieben hast.

In Pascal geht nur ein ein Arr1[x] := Arr1[x];

So hat es auch der AVRco interpretiert, der hat es nur mal wieder nicht so genau genommen.
Der hätte meckern müssen, da hier der Index fehlt.

Das was du möchtest sollte eigentlich nur mit einem CopyBlock funktionieren.
Also ein Fehler vom AVRco denke ich mal.

Evtl. hat Rolf sich von C etwas leiten lassen denn dort braucht man den Index nicht angegeben. :blob4:

Gruß
miparo
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: [BUG?] komplexe Typkonstrukte zwischen EEPROM und RAM kopieren

 · 
Gepostet: 04.03.2017 - 12:28 Uhr  ·  #3
Thomas, Miparo,

ok, dürfte ein Compiler Bug sein.
Aber................
Eigentlich ist diese Operation auch nicht ganz legal.
Die zwei Arrays sind einzeln definiert und sind deshalb vom Typ
her formal nicht identisch, trotz gleichem Aufbau.
Wenn zuerst der Typ deklariert wurde und dann die beiden
Konstrukte von diesem Typ abgeleitet werden, dann sollte es tun.

Grundsätzlich ist es besser/sicherer mit vordefinierten Typen zu arbeiten.

rolf
miparo
Schreiberling
Avatar
Geschlecht:
Herkunft: Germany
Alter: 59
Beiträge: 988
Dabei seit: 09 / 2007
Betreff:

Re: [BUG?] komplexe Typkonstrukte zwischen EEPROM und RAM kopieren

 · 
Gepostet: 04.03.2017 - 16:37 Uhr  ·  #4
Hi Rolf,
das stimmt.
So tut es:
Code

type
  tObj    = record 
              a: byte; 
              b: byte; 
            end; 
  
  TArr5   = array[0..5] of tObj; 
  
structconst
{$EEPROM}
  eArr: TArr5     = ((a: 1; b: 2), (a: 1; b: 2), (a: 1; b: 2), (a: 1; b: 2), (a: 1; b: 2), (a: 1; b: 2)); 
var
{$IDATA}
  vArr: TArr5; 
  
begin
  vArr:= eArr; 


ASM:

LDI _ACCALO, 0000Ch AND 0FFh << 12 bytes :)
LDI _ACCAHI, 0000Ch SHRB 8
RCALL SYSTEM.BlockCopyER
Thomas.AC
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 44
Beiträge: 308
Dabei seit: 07 / 2013
Betreff:

Re: [BUG?] komplexe Typkonstrukte zwischen EEPROM und RAM kopieren

 · 
Gepostet: 04.03.2017 - 23:18 Uhr  ·  #5
Danke euch beiden für die schnelle Aufklärung.
Da es sich also um eine illegale Zuweisung handelt, wäre ein Compiler Fehler sicher nützlich, oder?
Gruß
Thomas
miparo
Schreiberling
Avatar
Geschlecht:
Herkunft: Germany
Alter: 59
Beiträge: 988
Dabei seit: 09 / 2007
Betreff:

Re: [BUG?] komplexe Typkonstrukte zwischen EEPROM und RAM kopieren

 · 
Gepostet: 05.03.2017 - 04:53 Uhr  ·  #6
So sieht es Rolf ja auch und das wird bestimmt behoben.
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: [BUG?] komplexe Typkonstrukte zwischen EEPROM und RAM kopieren

 · 
Gepostet: 06.03.2017 - 12:04 Uhr  ·  #7
bug fixed. :bgdev:

rolf
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   125   139 · Page-Gen-Time: 0.033737s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI