Hallo,

mein Thema ist etwas komplex und ich hoffe der Titel des Threads ist einigermaßen passend. Ich muss bei einem Atmel-Prozessor den Flash-Speicher während der Laufzeit ändern. Dies geht laut Atmel nur, wenn der entsprechende Code zur Flash-Manipulation im bootloader-Bereich liegt. Dies habe ich wie folgt gelöst:

Code:
void setup_write (void) BOOTLOADER_SECTION;
Das ganze funktioniert wunderbar, nur muss ich die .bootloader Section manuell in den Projekt-Optionen einstellen. (Unter Memory Settings). Wenn ich diese konfiguration weg lasse, wird automatisch eine .bootloader-Section konfiguriert. Ich erhalte aber eine Warnung über eine Überlappung mit einer anderen Sektion.

Kann man diese falsche automatische Konfiguration irgendwie umgehen und die Memory-Sektion automatisch richtig konfigurieren lassen? (Ich nutze AVR-Studio 4.19, Build 716)

Ansonsten: Ist es möglich im Code anstatt in den Projekt-Optionen die Memory-Sektion zu konfigurieren? Zum Beispiel mit einem #define? Ich habe bei meiner Suche im Netz leider nichts dazu gefunden.

Der Grund für meine Frage ist, dass ich den Programmteil auf verschiedenen Controllern verwende. Wenn ich vor dem flashen nicht aufpasse und die Projekt-Konfiguration manuell ändere erhalte ich überhaupt keine Fehlermeldungen, das Programm funktioniert nur in dem Teil nicht, da der Programmbereich dann nicht im Bootloader-Bereich liegt.

Ein Workaround wäre die Position der Memory Sektion abzufragen mit einem #if Befehl. Aber auch dazu habe ich leider nichts gefunden. Wenn das aber ginge (z.B. #if Section (".bootloader") == #0x3800 könnte ich in Kombination mit den definierten _AVR #defines eine Warnung beim compilieren ausgeben, wenn der Bootloader-Bereich falsch ist.

Kann mir jemand weiterhelfen?

Viele Grüße
Andreas