www.mikrocontroller.net

Forum: GCC Constante an entsprechender Adresse im Flash ablegen


Autor: Daniel (Gast)
Datum:

Hallo,

Ich möchte eine Konstante an einer bestimmten Adresse im Flash ablegen.
Wie kann ich das definieren?

Hintergrund:
Ich habe ein Embedded-System mit einem DOS-Rechner welcher per
Bootloader ein Mikrocontroller updatetet. Ziel ist es das der Bootloader
die Softwareversion aus der Hex-Datei auslesen kann und dem Nutzer diese
dann anzeigt.

Momentan verfahr ich so, das ich nachträglich in mein Hex-File eine neue
erste Zeile einfüge und in der die Softwareversion abspeichere.

weitere Infos:
AVR-Mikrocontroller
Codevision
selbstprogrammierter Bootloader (TPascal)

Gruß Daniel

PS: Bitte keine Kommentare wie z.B. nimm etwas anderes wie DOS-Rechner
o.ä.
Autor: ARM-Fan (Gast)
Datum:

Manche Compiler haben dafür proprietäre Konstrukte, wie zum
Beispiel das Schlüsselwort at des Keil Compilers, das man hinter
eine Variablen- oder Konstantendeklaration setzen kann.

Ansonsten ist es Sache des Linkers. Schau mal in dessen Manual.

Du verwendest übrigens den Begriff Bootloader irreführend.
Der Bootloader sitzt in deinem µC und ermöglicht das Herunterladen
des Programms.

Deine TP-Applikation ist allenfalls ein "Firmware Download Werkzeug".
Autor: mork (Gast)
Datum:

@Daniel

wie wäre es damit, die Versionsnummer im EEPROM zu speichern?

MfG Mark
Autor: ARM-Fan (Gast)
Datum:

Wenn ich das richtig verstanden habe, dann hat der OP folgende
Konstellation:

PC mit DOS-Programm, welches für das Update eines Mikrocontrollers
zuständig ist. Das DOS-Programm soll beim Öffnen des HEX-Files den
Inhalt parsen und die in der Firmware enthaltene Programmversion als
Info anzeigen.

Der Lösungsansatz war, diese Version an eine feste Adresse zu linken, um
sie dort aus dem HEX-File auslesen zu können.

Soweit richtig?
Autor: Daniel (Gast)
Datum:

@ARM-Fan: ja, richtig erkannt.

Gruß Daniel
Autor: Daniel (Gast)
Datum:

@mork: Eprom wäre auch eine gute Idee, aber leider benötige ich den
EPProm-Bereich bei meinen Anwendungen schon (bei einer sogar komplett).
Zudem müssten mehr Dateien verwaltet werden, was wiederum zu Fehler
führen könnte. Denn ich habe mehrere Typen von MC im Einsatz mit
unterschiedlichen Anwendungen.
Zudem sind die Personen die dann mal ein Update ausführen sollen nur
Leihe und haben von MC keine Ahnung.

@ARM-Fan: Es ist nicht ganz ein PC mit DOS-System sondern eher ein
Embedded System mit einem 386 Prozessor
http://www.taskit.de/produkte/micropc/index.htm

Gruß
Autor: ARM-Fan (Gast)
Datum:

Also wie gesagt:
Beschäftige dich entweder mal mit dem Linker, oder versuchs mal mit
folgendem Vorschlag:

Stelle den Daten, die du aus dem HEX-File auslesen willst in deiner
Mikrocontrollerapplikation eine eindeutigen/einmaligen Code, eine
MagicNumber oder ähnliches voran, und such z.B: nach deren Vorkommen
innerhalb des HEX-Files. Dahinter liegen dann die von dir benötigten
Daten.

Beispiel:

typedef struct
{
  ULONG UniqueCode;
  ULONG FirmwareVersion;
  ULONG FirmwareDate;
  // usw. und so fort

} T_VERSION_INFO;
Autor: Sebastian____ (Gast)
Datum:

Hallo,
definiere einfach eine Stuktur  und lege im makefile eine section an:
LDFLAGS += --section-start=.version=$(BOOT_VERSION)

dann initialsiere die Struktur :
volatile const struct Tversion ver __attribute__ ((section (".version"))) ={
  VERSION,
  SERIAL,
  ...,
}

in deinem Code Kannst du einfach auf die Variable zugreifen wenn du ab
der Adresse .version liest.
Autor: Mehmet Kendi (mkmk)
Datum:

Für AVR-Stuio Benützer:
Project -> Configuration Option -> Memory Settings
Dort eine neue Section hinzufügen (siehe Bild).
Achtung: Flash-Adresse wird in Word angegeben.

Dann im Program:
typedef struct 
{
  WORD vers; 
} stru_prg_version;

#define PRG_VERSION 0x0100

const stru_prg_version prg_version __attribute__ ((section (".prg_version"))) = { PRG_VERSION };

In diesem Beispiel wird im Flash auf der Adresse 0x7FFE der Wert 00 und
auf 0x7FFF 01 abgelegt.

MfG
Autor: Mehmet Kendi (mkmk)
Datum:
Angehängte Dateien:

Sorry, Bild vergessen
Autor: ... ... (docean) Benutzerseite
Datum:

nix bild :D

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net