Guten Morgen, ich habe ein Altes Projekt ausgegraben, und muss dieses erweitern. Leider kann ich nach mehrmaligen Pc Umzügen nicht mehr zu 100 Prozent sagen welcher Code ich auf der Hardware laufen habe.(ja Unordnung). Kann man mit einem Trick immer an eine Bestimmte Stelle im Flash die Versionsnummer rein packen? Danke für die Hilfe
Man könnte z.B. beim gcc am Flash-Ende im Linker-Script eine Region definieren und dort dann seinen Version-String platzieren. Hängt vom uC ab, manche (alte) platzieren dort z.B. Vektoren.
So wie 2⁵ schreibt, mache ich es auch. Ich reserviere mir via Linker-Skript immer die letzten 256 Byte für die Versionsinfo und Flash-CRC. So prüfe ich dann beim starten auch einmal den kompletten Flash via CRC-Check.
Man könnte z.B. beim gcc am Flash-Ende im Linker-Script eine Region definieren und dort dann seinen Version-String platzieren. Hängt vom uC ab, manche (alte) platzieren dort z.B. Vektoren.
Sorry ich habe ganz vergessen zu erwähnen das ich AtMegas im Einsatz habe. Habt Ihr ein Beispiel wie ich eine solche Region erstellen kann?
Danke für die Hilfe
2⁵ schrieb:
Man könnte z.B. beim gcc am Flash-Ende im Linker-Script eine Region
Sorry ich habe ganz vergessen zu erwähnen das ich AtMegas im Einsatz habe. Habt Ihr ein Beispiel wie ich eine solche Region erstellen kann?
Beim AtmelStudio könnte man unter Project properties->Toolchain->Linker->Memory settings eine eintragen. (Das Beispiel mit -Wl) attribute ((section (".Namen eintragen"))) long revision;
Ich würde beim Atmega einfach einen EEPROM-Block definieren. include <avr/eeprom.h> und eeprom_write_dword()
Evtl. auch include <avr/pgmspace.h> und long revision PROGMEM; aber dann ist die Adresse nicht festgelegt.
Gruß Gunther
Beim AtmelStudio könnte man unter Project properties->Toolchain->Linker->Memory settings eine eintragen. (Das Beispiel mit -Wl) attribute ((section (".Namen eintragen"))) long revision;
Danke! Und mit der Methode steht immer an der selben STelle?
Ich würde beim Atmega einfach einen EEPROM-Block definieren. include <avr/eeprom.h> und eeprom_write_dword()
Finde ich nicht so gut EEprom kann mal überschrieben werden.
Danke für die Hilfe
Leider kann ich nach mehrmaligen Pc Umzügen nicht mehr zu 100 Prozent sagen welcher Code ich auf der Hardware laufen habe.(ja Unordnung). Kann man mit einem Trick immer an eine Bestimmte Stelle im Flash die Versionsnummer rein packen?
Dein Vorhaben schwebte mir auch schon vor. Ist aber für Arduino nicht ganz leicht umzusetzen. Alleine schon weil einem Board Updates das wieder zerrütten.
Bei Arduino ist meist "Serial" im Spiel, also geht sowas:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
Version im Dateinamen bzw. Pfad. Solange der µC noch ansprechbar ist, ist das im Prinzip voll ausreichend. Könnte auch für deine Anwendung evtl. anpassbar sein.
Tata schrieb:
2⁵ schrieb:
Man könnte z.B. beim gcc am Flash-Ende im Linker-Script eine Region
Sorry ich habe ganz vergessen zu erwähnen das ich AtMegas im Einsatz habe. Habt Ihr ein Beispiel wie ich eine solche Region erstellen kann?
Beim AtmelStudio könnte man unter Project properties->Toolchain->Linker->Memory settings eine eintragen. (Das Beispiel mit -Wl) attribute ((section (".Namen eintragen"))) long revision;
Und mit dieser Methode steht die Version immer an der gleichen Stelle?
Und mit dieser Methode steht die Version immer an der gleichen Stelle?
Wenn sonst nichts in der Linker-Sektion steht… wenn du mehr reinpackst, müsste man in den Tiefen der Linker Doku suchen, in welcher Reihenfolge der Linker die Daten anlegt. In diesem Fall wäre es besser, einfach eine struct in der Größe der Sektion anzulegen. Du könntest aber auch mit Magic-Numbers arbeiten, also z.B. sowas definieren const uint16_t ver[4] = {0xe56, 0xac34, version, Build};
Beim AVR müsste jetzt noch ein progmem oder ein __flash dazu. Dann könntest du einfach den Flash nach den Magic Numbers durchsuchen und hättest dann deine Version.
Ich habe mir so beholfen, dass es eine Funktion Versionsstring ausgeben gibt, die mit Compiledatum und -zeit automatisch befuellt wird.
1 |
|
2 |
|
wendelsberg
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.