[BUG?] komplexe Typkonstrukte zwischen EEPROM und RAM kopieren

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

[BUG?] komplexe Typkonstrukte zwischen EEPROM und RAM kopieren

 · 
Posted: 03.03.2017 - 13:01  ·  #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.
Attachments
array of record eeprom copy
Filename: arrayOfrecordEepromCopy.png
Filesize: 45.22 KB
Title: array of record eeprom copy
Download counter: 119
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

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

 · 
Posted: 03.03.2017 - 19:04  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

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

 · 
Posted: 04.03.2017 - 12:28  ·  #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
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

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

 · 
Posted: 04.03.2017 - 16:37  ·  #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
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

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

 · 
Posted: 04.03.2017 - 23:18  ·  #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
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

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

 · 
Posted: 05.03.2017 - 04:53  ·  #6
So sieht es Rolf ja auch und das wird bestimmt behoben.
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

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

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

rolf
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: 15   123   138 · Page-Gen-Time: 0.029284s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI