Forum: Compiler & IDEs Flash-Konstanten im Bootloader verwenden bei AVRmega256


von Steffen Graap (Gast)


Lesenswert?

Hallo

Ich programmiere gerade einen Bootloader für den Mega2560. Um 
Statusmeldungen auf dem LCD auszugeben, habe ich die auszugebenden 
Strings im FLash liegen. Über eine Funktion soll der String dann zum LCD 
geschrieben werden.
Das HEX-File wird über "-Wl,--section-start=.text=3E000" in den 
Bootloaderbereich des Prozessors geladen.
Das Problem ist, das der Copmpiler denkt, der FLASH-String steht in den 
ersten 64K des Flashes und versucht diesen über LPM zu laden. Da ich 
aber über den Linkereintrag das Programm in den Bootloadebereich, also 
irgendwo zwischen 0x1F000 & 0x1FFFF, verlegt habe geht der Zugiff über 
LPM nicht.
Kann ich dem Compiler sagen, das er das Programm für den Bootloader 
compilieren soll, oder muss ich mit der pgm_read_byte_far- Funktion 
arbeiten und den Offset für den Bootloader mit übergeben?

Danke & Gruß Steffen

von Steffen Graap (Gast)


Lesenswert?

So ich noch mal

Ich habe das Problem erst mal gelöst.
Dazu habe ich die pgm_read_byte_far-Funktion genutz und als Ofset nur 
die benötigte Page übergeben (0x30000, 4.Page im Mega256)
1
LCD_DATA = pgm_read_byte_far (0x30000 + ((UINT16)& cString[u8Laenge++]));//Zeichen zum Display senden und Zähler erhöhen

Das ganze ist natürlich etwas statisch, vieleicht gibt es noch eine 
flexiblere Lösung.

Ich bin auf eure Antworten gespannt.

Gruß Steffen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.