www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Versions Nummer wohin speichern?


Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

eigendlich nicht so schwer aber bevor ich was übersehe frage ich leiber 
mal die Leute die sich damit auskennen.

Wo würdet Ihr die Versionsnummer der Software im ATMEL hinterlegen? 
Prgramm, EEProm?
Am liebsten wäre mir "V1.0a" also als String Konstante.

Programm; Gibt es vielleicht Probleme wenn man diese Zeichenkette aus 
dem Bootloader heraus auslesen möchte?

EEProm: bekomme ich die Konstante nicht definiert, also es wird in dem 
EEProm nicht eingeschrieben. Fand den Platz als geeignetsten.

Versucht habe ich es mit...
.eseg
VERSION:  .db "V 1.0a",0

An der Position VERSION ist aber immer FF FF FF FF drin...

Hmm, welchen Weg geht man am besten?

Gruß AVRli...

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde die Versionsnummer in den Programmspeicher schreiben; sie 
gehört ja zum Programm.

Hast du daran gedacht die vom Assembler erzeugte .eep-Datei in den 
Controller zu programmieren?

Autor: Jörg B. (manos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde die Versionsnummer auf jeden Fall im Programm ablegen da 
ansonsten passieren kann, dass Programm und Versionsnummer im EEPROM 
voneinander abweichen.
Im EEPROM würde ich nur veränderliche Daten ablegen die gespeichert 
bleiben sollen (z.B. Geräte-ID, Max-Werte, etc...)

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

EEP file habe ich gefunden, steht auch was drin nur wie überträgt man 
das mit dem JTAG... wenn ich einen Breakpoint setze um mal reinzusehen 
was imm EEProm gespeichert ist, ist nur FF FF FF im gesamten EEProm 
drin.

Nutze übrigens AVR Studio und einen ATmega128 (ein Bolide der ehrlich 
gesagt für meine Anwendung etwas overkill ist).



MfG AVRli...

Autor: Karoly Kovacs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei 8051 ASM habe ich immer so gemacht:

  CSEG
  org  PROGSTART+0
  ljmp  reset
  org  PROGSTART+EXT0INT
  reti
Version:db  'Ver1.3'
  org  PROGSTART+T0INT
  reti
Build:  db  '12'
        ...

Bei 8051 wir haben "genug" Platz zwischen zwei Interrup-Vektoren.
Man muss natürlich aufpassen, die Länge der Information "möglichst kurz" 
zu halten, damit die nächste Vektor nicht überschreiben!

Bei anderen Systeme (und/oder anderen Prog.Sprachen) kann man auch 
sicher solche "schöne" Plätze finden.

Gruss aus Wien,
Karoly

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi @all... ;-)

also habe dann heute fast den ganzen Tag damit verbracht,
nun endlich eine Lösung gefunden die auch funktionieren sollte.

;//////////////////////////////////////////////////////////////////////////////
; INTERRUPT EINSPRUNGADRESSEN
;//////////////////////////////////////////////////////////////////////////////
.cseg
.org 0
  rjmp  INITIAL    ;RESET
.org INT6addr
  rjmp  int_INT6  ;Externer Int.
.org OVF2addr
  rjmp  int_TIMER2  ;T/C2 Überlauf-Int.
.org OVF0addr
  rjmp  int_TIMER0  ;T/C0 Überlauf-Int.

;---UART0 - Interrupts -------------------------------------------
.org URXC0addr
  rjmp  int_USART0_RXC  ;USART0, Rx Complete
.org UDRE0addr
  rjmp  int_USART0_DRE  ;USART0, Data Register Empty

;---UART1 - Interrupts ---------------------------------------------
.org URXC1addr
  rjmp  int_USART1_RXC  ;USART1, Rx Complete
.org UDRE1addr
  rjmp  int_USART1_DRE  ;USART1, Data Register Empty
;--- Zeiger auf das Ende des INT VECTORS setzen -------------------------------
.org INT_VECTORS_SIZE

;=== FIX === Position und Größe darf nie verändert werden =====================
;            da der Bootloader auf die Infos zugreift

          ;1234567890123456789012345678901
VER:    .db "0.1a >develop<",0  ;Version maximal 31 Zeichen + 0x00 !
.org VER+32
VER_DATE:  .db "17.04.2007",0    ;Format DD.MM.YYYY

;=== FIX-ENDE =================================================================

ab hier dann der Programmcode...


So kann man die Version recht flexibel gestallten, halt maximal 31 
Zeichn +Nullterminierung. In späteren Firmwareversionen kann man dann 
auch noch alle Einsprungadressen nutzen.

Hoffe ich habe nichts übersehen... ;-)


MfG AVRli...

Autor: Karoly Kovacs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, es sieht ganz schön aus!

Es gibt noch ein Problem: wie kann man es mit C (oder mit anderer 
Progr.Sprache) machen?

Karoly

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Karoly,

bei anderen Hochsprachen kann ich nicht mitreden, ich habe lediglich mit 
AVR-Studio gearbeitet.

Ich könnte mir aber vorstellen das es dort etwas einfacher ist.


MfG AVRli...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C gibts den Befehl PROGMEM:
uint8_t version[] PROGMEM = "v1234.5678"; // im "Flash"
...

// Zugriff zB so:
// text ist local
strcpy_P(text, version);
uart_send ( text );

Der String im Flash wird automatisch Nullterminert.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die zugehörige Lib:
#include <avr/pgmspace.h>

Autor: Karoly Kovacs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias:

Super, danke!

Karoly

Autor: Stinkywinky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zurück zur ursprünglichen Frage.
Ohne jetzt Deine Architektur genau zu kennen, folgender Tipp:

Programmversion im Code UND im EEProm.

Falls Du einen Update machst, kann das neue Programm prüfen, ob es mit 
den alten Daten noch zurecht kommt und diese gegebenenfalls automatisch 
umrechnen.

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Stinkywinky

Ja super, daran habe ich noch nicht gedacht.
Dann werde ich es mir im EEProm nochmal speichern.

Im Moment habe ich die Version nur im PROGRAMMEMORY.

Klappt alles ganz ausgezeichnet wenn man sich an die Regeln hält. ;-)


Danke!

MfG AVRli...

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.