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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.