Forum: Mikrocontroller und Digitale Elektronik AVR-GCC Versionsbezeichnung an Flash-Anfang ablegen


von Jost S. (hummelfan)


Lesenswert?

Hallo,
ich würde gerne meine Versionsbezeichnung im Klartext im Flash ablegen 
(idealerweise am Speicheranfang).
Das würde beim Brennen helfen, mit einem kurzen Blick ins Binärfile, die 
gewünschte Version sicherzustellen.

Im Quellcode habe ich dazu eine Konstante deklariert:
1
const char version[] PROGMEM = "V1.01";

Weil ich diese aber im Programm nicht nutze, optimiert der Compiler 
(WinAVR-20100110, AVR-GCC V4.3.3) die Zeile vermutlich zurecht raus.

Wie kann ich das verhindern?
Kann ich den Versionstext auf einfache Weise vorne an den 
Flash-Speicheranfang setzen lassen?

Gruß, Jost

von emperorl0ser (Gast)


Lesenswert?

Moin,
ich bin mir nicht ganz sicher, aber "volatile" davor stellen soltle 
helfen.

Grüße

von spess53 (Gast)


Lesenswert?

Hi

>ich würde gerne meine Versionsbezeichnung im Klartext im Flash ablegen
>(idealerweise am Speicheranfang).

Du weißt aber, das dort der Reset- und die Interruptvektoren liegen?

MfG Spess

von Patrick D. (oldbug) Benutzerseite


Lesenswert?

Josef S. schrieb:
> Weil ich diese aber im Programm nicht nutze, optimiert der Compiler
> (WinAVR-20100110, AVR-GCC V4.3.3) die Zeile vermutlich zurecht raus.
>
> Wie kann ich das verhindern?

Ich schiesse jetzt mal so halbwegs aus der Hüfte und behaupte: Da wird 
nix wegoptimiert, das wäre ja fatal.

Falls Du das nicht glaubst, dann sieh doch einfach mit dem Editor Deines 
Vertrauens im binary nach... :-)

von Jost S. (hummelfan)


Lesenswert?

Hallo Spess,
> Du weißt aber, das dort der Reset- und die Interruptvektoren liegen?
ja,
ich meinte mit "Anfang" halt weit vorne, damit ich im der 
Binärfile-Ansicht nicht nach unten scrollen muß.

Hallo  emperorl0ser,
das mit volatile habe ich auch gedacht und schon probiert:
1
volatile const char version[] PROGMEM = "V1.01";
- ohne Erfolg, wird trotzdem rausoptimiert.

Liegt es vllt. an meinen Compileeinstellungen?:
-mmcu=attiny2313 -Wall -gdwarf-2 -std=gnu99 -ffunction-sections 
-mtiny-stack -Os -funsigned-char -funsigned-bitfields -fshort-enums -MD 
-MP -MT

Linkereinstellungen:
 -Wl,--gc-sections  -Wl,--relax -Wl,

Gruß, Jost

von Jost S. (hummelfan)


Lesenswert?

Hallo Patrick,
Patrick Dohmen schrieb:
> Ich schiesse jetzt mal so halbwegs aus der Hüfte und behaupte: Da wird
> nix wegoptimiert, das wäre ja fatal.
Ich meine schon, wenn ich den String vergrößere, bleibt die 
Programmgröße nämlich gleich.

Jost

von Peter D. (peda)


Lesenswert?

1
#include <avr/pgmspace.h>
2
#include "_version.h"
3
4
prog_uint8_t Version[] __attribute__((used));
5
prog_uint8_t Version[] = PROJECT_STRING ", "
6
                         "V:" REVISION_STRING ", "
7
       __DATE__ "\n";

An Anfang geht nicht, es kommt hinter die Vectortabelle, wenn es das 
erste File im Make ist.
Nimmt man eine Batch zum Compilieren (*.c) muß es der kleinste Filename 
sein, z.B. "_version.c".

von Patrick D. (oldbug) Benutzerseite


Lesenswert?

Jost S. schrieb:
> Ich meine schon, wenn ich den String vergrößere, bleibt die
> Programmgröße nämlich gleich.

Hast Du's nachgesehen?

von Stefan E. (sternst)


Lesenswert?

Jost S. schrieb:
> - ohne Erfolg, wird trotzdem rausoptimiert.

Kein Wunder, denn ...

> -Wl,--gc-sections

schließlich sagst du ihm ja explizit, dass er alle Sections 
herausschmeißen soll, die im Programm nicht referenziert werden.

von Jost S. (hummelfan)


Lesenswert?

Hallo Stefan,
> Stefan Ernst schrieb:
> schließlich sagst du ihm ja explizit, dass er alle Sections
> herausschmeißen soll, die im Programm nicht referenziert werden.
Das war der entscheidende Tipp, Danke!

Gruß, Jost

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.