AVRCo has always defined {$DATA} as being the registers plus IO space.
In older chips this led to no ambiguity and a statement like
would lead to x being stored in the register area.
For newer chips (XMEGA and UPDI chips) the registers have been moved out of normal data space. This also means that the IO page has moved in these chips.
This causes ambiguity issues in various parts of the compiler, because where previously the data space could be inferred from the address, in these later chips it cannot.
Therefore from the next release I will be prohibiting variable definitions in the DATA space, unless they are referenced.
so
will be banned, but variables of the form
will be allowed.
Older chips will not be affected.
=====================================
AVRCo hat {$DATA} immer als die Register plus IO Raum definiert.
In älteren Chips führte dies zu keiner Zweideutigkeit und eine Anweisung wie
würde dazu führen, dass x im Registerbereich gespeichert wird.
Bei neueren Chips (XMEGA- und UPDI-Chips) wurden die Register aus dem normalen Datenbereich ausgelagert. Das bedeutet auch, dass die IO-Seite bei diesen Chips verschoben wurde.
Dies führt zu Mehrdeutigkeitsproblemen in verschiedenen Teilen des Compilers, denn wo früher der Datenbereich aus der Adresse abgeleitet werden konnte, ist dies bei diesen neueren Chips nicht mehr möglich.
Daher werde ich ab der nächsten Version Variablendefinitionen im DATA-Raum verbieten, es sei denn, sie werden referenziert.
also
verboten sein, aber Variablen der Form
werden erlaubt sein.
Ältere Chips werden davon nicht betroffen sein.
Übersetzt mit www.DeepL.com/Translator (kostenlose Version)
In older chips this led to no ambiguity and a statement like
Code
{$DATA}
var
x : byte;
var
x : byte;
would lead to x being stored in the register area.
For newer chips (XMEGA and UPDI chips) the registers have been moved out of normal data space. This also means that the IO page has moved in these chips.
This causes ambiguity issues in various parts of the compiler, because where previously the data space could be inferred from the address, in these later chips it cannot.
Therefore from the next release I will be prohibiting variable definitions in the DATA space, unless they are referenced.
so
Code
{$DATA}
var
x : byte;
var
x : byte;
will be banned, but variables of the form
Code
{$DATA}
var
x[_SCRATCH0] : byte;
var
x[_SCRATCH0] : byte;
will be allowed.
Older chips will not be affected.
=====================================
AVRCo hat {$DATA} immer als die Register plus IO Raum definiert.
In älteren Chips führte dies zu keiner Zweideutigkeit und eine Anweisung wie
Code
{$DATA}
var
x : byte;
var
x : byte;
würde dazu führen, dass x im Registerbereich gespeichert wird.
Bei neueren Chips (XMEGA- und UPDI-Chips) wurden die Register aus dem normalen Datenbereich ausgelagert. Das bedeutet auch, dass die IO-Seite bei diesen Chips verschoben wurde.
Dies führt zu Mehrdeutigkeitsproblemen in verschiedenen Teilen des Compilers, denn wo früher der Datenbereich aus der Adresse abgeleitet werden konnte, ist dies bei diesen neueren Chips nicht mehr möglich.
Daher werde ich ab der nächsten Version Variablendefinitionen im DATA-Raum verbieten, es sei denn, sie werden referenziert.
also
Code
{$DATA}
var
x : byte;
var
x : byte;
verboten sein, aber Variablen der Form
Code
{$DATA}
var
x[_SCRATCH0] : byte;
var
x[_SCRATCH0] : byte;
werden erlaubt sein.
Ältere Chips werden davon nicht betroffen sein.
Übersetzt mit www.DeepL.com/Translator (kostenlose Version)