Compiler meldet: address $0010 is below idataStart $0100

IRON
Benutzer
Avatar
Gender:
Location: Steisslingen / Germany
Age: 65
Posts: 35
Registered: 07 / 2004
Subject:

Compiler meldet: address $0010 is below idataStart $0100

 · 
Posted: 25.06.2012 - 16:23  ·  #1
Hallo AvrCo Kollegen,
ich kompiliere ein Mega128 Projekt mit Compiler Version 4.95.00 (auf Laptop) fehlerfrei.
Die Version 5.03.00 (auf Desktop PC) meldet: address $0010 is below idataStart $0100
Die identische Meldung erhalte ich auch mit AvrCo V5.03.00 bei anderen Projekten, welche unter der Version 4.95.00 erstellt wurden und den EEPROM Bereich unter $0100 benutzen.


DSC Files pmega128 sind identisch.
Darin findet sich u.a.:
idatastart=$0100
idataend=$10ff

und:

eepromstart=$0000
eepromend=$0fff

Meine Declarations sehen aus, wie folgt:

{$NOSHADOW}
{ $W+ WARNINGS} //Warnings off
{$LCDNOINIT} //LCD nicht initialisieren, wegen PortC A8..A16
//Init erfolgt erst im Main mit LCDSetup nachdem
//LCD PortC mit XMCRB:= XMCRB OR %00000111 auf
//normal Port operation geschaltet wurde.

Device = mega128, VCC=5;

{ $BOOTRST $0F000} //Reset Jump to $0F000, nur für Debugger / Simulator


Import SysTick, FlashWrite, SerPort, ADCPort, LCDport, TickTimer, BeepPort;

From System Import LongWord, LongInt, Float;

Define
ProcClock = 15000000; //Hertz
SysTick = 10; //msec
StackSize = $0100, iData;
FrameSize = $0100, iData;
XDATA = $4000, $400F, NoInit; //high Byte der Adr. spielt keine Rolle, wird an PortC nicht ausgegeben
XDATAwaits = $00;
SerPort = 19200, Stop1, Timeout; //Baud, StopBits|Parity
RxBuffer = 8, iData;
TxBuffer = 8, iData;
ADCchans = 8, iData;
ADCpresc = 128;
TickTimer = Timer1;
LCDtype = 44780;
LCDport = PortC;
LCDrows = 2;
LCDcolumns = 20;
BeepPort = PortC,7; //Beeper an A15, PortC.7

Implementation

{$IDATA}

//--------------------------------------------------------------
// Type Declarations
type


//--------------------------------------------------------------
// Var Declarations
{$IDATA}

VAR
Timer1 : SysTimer; //für Key Timeout. 16 Bit Software Timer DownCount
Timer2 : SysTimer; //für TDC Timeout Erfassung. 16 Bit Software Timer DownCount
Timer3 : SysTimer; //für Cycle Timeout der Array Füllroutinen. 16 Bit Software Timer, DownCount
Timer4 : SysTimer, UpCount; //für Messzeiterfassung Delta_T. 8 Bit Software Timer, Upcount
Timer5 : SysTimer; //für schnelle Parametereingabe
Timer6 : SysTimer; //erzeugt Totalisator Zeitbasis von 1 Sec.
Temp_Ram : Array[0..255] of Byte; //Temporäres RAM Array für EEPROM Backup
RAM_Index : Word; //Index zum Array
EEPROM_Index : Word; //EEPROM Adress Zeiger

TOF_Up : Array[1..100] of LongWord; //Up-, Downstream TDC Zeiten für Statistics
TOF_Down : Array[1..100] of LongWord;
TOF_Work : Array[1..100] of LongWord; //Arbeits Array für Sortierung und mov.AVG Berechnung
Sum_TOF_Up, Sum_TOF_Down : LongWord; //Summe der TDC Zeiten up- and downstream
Mean_Up, Mean_Down : LongWord; //gemessenene Mittelwerte aus TOF Arrays in TDC Zeit Einheiten
Old_Mean_Up, Old_Mean_Down : LongInt; //alte Mittelwerte, für Phasenfehlererkennung
Delta_T : LongInt; //Laufzeitzifferenz = Mean_Up -

.....


Const

EE_Back_Pointer[$01FF00]: String = 'AAAA'; //Adresse Flash Page Pointer $01FF00, hier beginnt der EEPROM Backup, der String ist nur ein Dummy
UB_Tol_1 : Word = 844; //Versorgungsspannung -15%, 20,4V, Polarity Diode berücksichtigt
UB_Tol_2 : Word = 778; //Powerdown bei 19V, Polarity Diode berücksichtigt
Key_Timeout : Word = 500; //Tastatur Timeout, 500 -> 5sec
Fast_Input : Word = 200; //Timer4 Wert für schnelle Parametereingabe
Countdown : Word = 500; //für Total reset

..........


{$EEPROM}

VAR
//*** Im EEPROM gesicherte Betriebsparameter
EEPROM_Data : Array[0..255] of Byte; //eine Page des EEPROM's für den Backup im Flash
EE_Gain[$10] : Word; //z.Zeit nicht benutzt !!!!!
EE_N_Burst[$12] : Byte; //Anzahl Burst Impulse
EE_Fill_Cycles[$13] : Byte; //Array Füll Zyklen für gleitenden Mittelwert der Flugzeiten, Up -> Down
EE_Messrohr_DN[$14] : Word; //Messrohr Durchmesser
EE_Messrohr_L[$16] : Word; //Messrohrlänge
EE_VM_Samples[$18] : Byte; //Samples für exp.Mittelwert von V_Media
EE_Burst_Delay[$19] : Word; //Zeit zwischen 2 Bursts, Up -> Down
EE_TDC_Offset[$1B] : LongInt; //TDC Offset
EE_Mode[$26] : Byte; //Geräte Modus
EE_Main_Pipe_DN[$27] : Word; //Hauptrohrdurchmesser
EE_Phi_Max_I_U_F[$29] : Float; //max. Durchfluss für I, U und F Ausgang
EE_Phi_Max[$2D] : Float; //max.physikalische Durchfluss Begrenzung, abh. vom Durchmesser und V_Media
EE_Fout_Max[$31] : Float; //max. Frequenz des Frequenzausgangs
EE_Pot_1[$35] : Float; //Relais Schaltwert Poti 1
EE_Pot_2[$39] : Float; //Relais Schaltwert Poti 2
EE_K[$3D] : Float; //K-Faktor der Kennlinie
EE_Offset[$41] : Float; //Offset der Kennlinie
EE_Adr_DW_S[$45] : Byte; //Geräteadresse
EE_Pin[$46] : Word; //PIN des DW_S
EE_Unit_Mode[$48] : Byte; //Einheiten Byte
EE_Total[$49] : Float; //Totalisatorwert
EE_K_I[$4D] : Float; //K-Wert Stromkorrektur 4-20mA
EE_K_U[$51] : Float; //K-Wert Spannungskorrektur 0-10V
EE_O_I[$55] : Integer; //Offset Stromkorrektur 4-20mA
EE_Low_Flow_Cut_Off[$57] : Float; //unterdrückte Schleichmenge von Phi_Max_I_U_F
EE_V_Media_Offset[$5B] : Float; //Geschwindigkeitsoffset aus Autozero Routine


{$XDATA}

VAR
//TDC Register, Adressraum 00h -> Init_Reg = 00XX XXXX
INIT_REG[$4000] : Byte; //Write only
CTRL_REG_1[$4001] : Byte; //Write only
CTRL_REG_2[$4002] : Byte; //Write only
CTRL_REG_3[$4003] : Byte; //Write only
HIT_REG[$4004] : Byte; //Write only
INT_EN_REG[$4005] : Byte; //Write only
GPIO_REG[$4006] : Byte; //Write only nur für Test
HIGH_REG_A[$4008] : Byte; //Write only
HIGH_REG_B[$4009] : Byte; //Write only
SMART_REG_A[$400A] : Byte; //Write only
SMART_REG_B[$400B] : Byte; //Write only
//Adr $400C not used
GPIO_IN_REG[$400D] : Byte; //Read only nur für Test
HIT_STATUS_REG[$400E] : Byte; //Read only
STATUS_REG[$400F] : Byte; //Read only

//TDC Register, Adressraum 01h -> Init_Reg = 01XX XXXX
MULT_REG_1[$4001] : Byte; //Write only
MULT_REG_2[$4002] : Byte; //Write only
MULT_REG_3[$4003] : Byte; //Write only
ALU_REG[$4004] : Byte; //Write only
ERG_REG_0_0[$4005] : Byte; //Read only Bits[7:0]
ERG_REG_0_1[$4006] : Byte; //Read only Bits[15:8]
ERG_REG_0_2[$4007] : Byte; //Read only Bits[23:16]
ERG_REG_0_3[$4008] : Byte; //Read only Bits[31:24]
ERG_REG_1_0[$4009] : Byte; //Read only Bits[7:0]
ERG_REG_1_1[$400A] : Byte; //Read only Bits[15:8]
ERG_REG_1_2[$400B] : Byte; //Read only Bits[23:16]
ERG_REG_1_3[$400C] : Byte; //Read only Bits[31:24]


Fummel ich jetzt die EEPROM Vars auf die Adressen >= $0100 dann ist der Compiler V5.03.00 zufrieden. Dies ist jedoch für mich nicht die Lösung des Problems.

Bin für jeden Tip dankbar.
Viele Grüsse,
Roland
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Compiler meldet: address $0010 is below idataStart $0100

 · 
Posted: 25.06.2012 - 18:19  ·  #2
Hallo Roland,

das wird umgehend behoben. Dazu brauche (wie immer) ein kleines Testprogramm gezippt, das den Fehler zeigt, entweder als PM oder email.

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: 14   51   65 · Page-Gen-Time: 0.031764s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI