Moin allerseits. Ich suche nach Möglichkeiten, den vom GCC generierten Code an beliebige, von mir festgelegte Adressbereiche innerhalb des Flash zu legen. Ferner müßte ich die Ram-Bereiche definieren können, die der Code benutzt. Ich habe irgendwo etwas in dieser Art in Zusammenhang mit einem Bootloader gesehen, finde es aber nicht mehr. Wäre nett, wenn mir mit einem Link oder einem Suchbegriff auf die Sprünge geholfen würde. Zweck: Ich habe eine Art "Betriebssystem", das immer in einem festen Bereich liegen soll und schreibe dazu entsprechende Anwendungen. Momentan linke ich das OS dazu, aber es nervt mit der Zeit, wenn man jedesmal wegen einer 1-Byte Änderung den gesamten Flash beschreiben muss. Ein anderer Anwendungsfall: Für ein Grafik-Display habe ich mehrere Zeichensätze. Die müssen jedesmal, wenn ich an der Steuersoftware (ca. 5% des Flash) etwas ändere, mit übertragen werden (ca. 80% des Flash). Gruß Thomas
Ich sitze genau vor dem gleichen Problem und komme nicht weiter. Es gibt 2 Fehlermeldungen. 1. Ich will einen String an immer die gleiche Adresse schreiben (0x100), leider erhalte ich dann die Fehlermeldung: section .text [00000000 -> 00000ab3] overlaps section .version [00000100 -> 00000126] Plaziere ich den String hinter das Programm geht es. Bloß ist das eben je nach Programmgröße und AVR-Typ immer ne andere Adresse. 2. Der String soll nicht in den RAM kopiert werden, muß also auch noch vom Typ PROGMEN sein. Bloß dann kriege ich diese Fehlermeldung: error: section of 'vers' conflicts with previous declaration Ziel ist, in den Wust von Hex-Files etwas Ordnung reinzubringen, also im Klartext nen Kommentar zu haben, wofür es ist, welche Version, Compiledatum usw.. Bei meinen 8051-Programmen funktioniert das schon längere Zeit einwandfrei. Die immer gleiche Adresse deshalb, um den String leichter zu finden, bzw. auch per Bootloader auslesen zu können. Peter
>section .text [00000000 -> 00000ab3] overlaps section .version >[00000100 -> 00000126] >Plaziere ich den String hinter das Programm geht es. Bloß ist das eben >je nach Programmgröße und AVR-Typ immer ne andere Adresse. dein Programm das in der textsection steht geht von 0 bis ab3 darin ist dein Programm du scheinst jetzt festgelegt zu haben dass an Stelle 100 deine section version liegt was nicht geht da dort auch section text ist. nimm eine höhere Stelle (grösser als die maximalgrösse deines Programmes und kleier als der Bootloader.
Hi du könntest doch den String rückwärts ans Ende des Flash (bzw. ans Ende der Applikationssektion) setzen. Evtl. ist da ein wenig Scriptmagie nötig um den String vor dem Linken umzudrehen aber ansonsten... Matthias
Ich wollte eben gerade nicht für jeden AVR-Typ den String an eine andere Stelle schreiben müssen. Der 8051-Linker hat zuerst den absolut plazierten Code gelinkt (z.B. auch die Interruptvektoren) und dann den verschiebbaren Code einfach drumherum. Kleinere Routinen wurden z.B. in die Lücken an nicht benutzte Interruptvektoren plaziert. Daher dachte ich, der GCC-Linker kann das auch. Peter
Würde mich interessieren ob jemand eine Lösung für dieses Problem gefunden hat. Suche auch nach einer Möglichkeit einen Zeichensatz in einer section einmal zu übertragen und nicht jedesmal mit zuübertragen, wenn eine kleine Programmänderung gemacht wird. G klaus
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.