Noch ein kleiner Bug im Compiler für XMEGA bei der Bitverarbeitung

ICEMAN42
 
Avatar
 
Subject:

Noch ein kleiner Bug im Compiler für XMEGA bei der Bitverarbeitung

 · 
Posted: 17.07.2012 - 10:15  ·  #1
Hallo.
Ich habe noch einen kleinen Bug im Compiler gefunden, wenn man für einen XMEGA übersetzt:

Code

program Test;

Device = xmega32a4u, VCC=3.3;

Define
  //>> CPU=32MHz, PeripherX4=32MHz, PeripherX2=32MHz
  OSCtype       = int32MHz, PLLmul=4, prescB=1, prescC=1;
  StackSize     = $0100, iData;
  FrameSize     = $0100, iData;

Implementation

{$DATA}
var   Reg10[$10]          : byte;
      TempBit[@Reg10,0]   : bit;

{$PDATA}
var   PReg10[$10]         : byte;
      PTempBit[@PReg10,0] : bit;

{$IDATA}

begin
  Reg10 := 0;         //IST OK
  TempBit := TRUE;    //IST nicht OK
  PReg10 := 0;        //IST OK
  PTempBit := TRUE;   //IST OK

  loop
  endloop;
end Test.


Die Bitbearbeitung für $PDATA ist OK (IN; SBR; OUT), aber für $DATA wird auch der Code IN/SBR/OUT erzeugt. Müsste doch eigentlich MOV/SBR/MOV sein :'(
SETBIT erzeugt den selben Code.
Wenn man das komplette Byte schreibt, wird aber richtig unterschieden.

Im Compiler-Handbuch steht zwar auf Seite 201, dass $DATA beim XMEGA vermieden werden sollte, aber ansich ist ja durch die Deklaration eindeutig, ob ich das Register ($DATA) oder den IO-Bereich ($PDATA) benutzen möchte.

Ist ja nur ein kleiner Fehler, hat mich aber verdammt viel Zeit gekostet, als ich mein Programm vom MEGA auf den XMEGA portiert habe :'(

Projekt ist dabei.
Viele Grüsse

Jürgen
Attachments
Filename: Test.zip
Filesize: 34.37 KB
Title:
Download counter: 23
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Noch ein kleiner Bug im Compiler für XMEGA bei der Bitverarbeitung

 · 
Posted: 17.07.2012 - 15:05  ·  #2
Hallo Jürgen,
diese Konstruktion:
Code
{$DATA}
var   Reg10[$10]          : byte;
      TempBit[@Reg10,0]   : bit;

ist leider beim XMega nicht möglich. Register R0..R31 sind ausgeschlossen.
Hier gibt es in Zukunft eine Fehlermeldung.

rolf
ICEMAN42
 
Avatar
 
Subject:

Re: Noch ein kleiner Bug im Compiler für XMEGA bei der Bitverarbeitung

 · 
Posted: 18.07.2012 - 09:31  ·  #3
Hallo Rolf.

Warum ist es beim XMEGA eigendlich nicht möglich?
IO-Bereich und Register überlagern sich zwar, aber durch $DATA bzw. $PDATA ist ja eindeutig, worauf ich zugreifen möchte.
Wie schon gesagt, wenn man das Byte anspricht, wird ja schon richtig unterschieden.

Grüsse Jürgen
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Noch ein kleiner Bug im Compiler für XMEGA bei der Bitverarbeitung

 · 
Posted: 18.07.2012 - 12:02  ·  #4
Hallo Jürgen,
der Grund dafür ist die Compiler interne Verarbeitung von Bits.
Im Gegensatz zum AVR liegen die Register ja nichtmehr im linearen
Adress Raum. Das bringt in diesem Fall das Problem mit sich.
Ich denke das ist keine Einschränkung da Bits in den Registern
m.E. wenig Sinn machen.

rolf
ICEMAN42
 
Avatar
 
Subject:

Re: Noch ein kleiner Bug im Compiler für XMEGA bei der Bitverarbeitung

 · 
Posted: 18.07.2012 - 12:26  ·  #5
Hallo Rolf.

OK, dann werde ich die Bitmanipulation witerhin in Assembler machen.
Ich dachte nur, es wäre schöner wegen der Lesbarkeit des Codes.

Grüsse
Jürgen
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Noch ein kleiner Bug im Compiler für XMEGA bei der Bitverarbeitung

 · 
Posted: 18.07.2012 - 15:17  ·  #6
Hallo Jürgen,

wieso eigentlich bit Manipulation in Registern ???

rolf
ICEMAN42
 
Avatar
 
Subject:

Re: Noch ein kleiner Bug im Compiler für XMEGA bei der Bitverarbeitung

 · 
Posted: 18.07.2012 - 17:03  ·  #7
Hallo Rolf.

Mache ich in einer ISR. Wegen der Geschwindigkeit. Ist eine 'Altlast' aus dem ATMEGA.
Muss ich nochmal überlegen, ob ich mir das jetzt sparen kann.

Grüsse Jürgen
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: 16 · Cache Hits: 15   122   137 · Page-Gen-Time: 0.023733s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI