mikrocontroller.net

Forum: Compiler & IDEs Code an beliebige Stelle im Flash


Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau mal nach memory sections, attribute

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, das waren die Stichworte, die ich brauchte!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Klaus Me (meinzinet)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.