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
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