www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wo befindet sich meine Konstante im HEX-File


Autor: Hilel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.
Ich habe eine kleine Anwendung, in der der uC eine bestimmte Zeit
abwartet (eine Art Warteschleife), dann wird der Rest des Programmes
ausgeführt. Diese Warteschleife kommt oft im Programm vor. Ein
Beispiel:
Steuere Transistor 1
warte 100 ms
Steuere Transistor 2
warte 100 ms
usw.
Diese Zeit von 100 ms ist als Konstante definiert.
Nun möchte ich dem Anwender ein Visual Basic Programm schreiben, in dem
er diese Zeit beliebig zwischen 100 ms und 9000 ms ändern kann. Die
Änderung soll natürlich in der HEX-Datei stattfinden. Dem Anwender
liegt kein Compiler vor und deshalb muss er die HEX-Datei selbst
anpassen, wenn er eine neue Zeit einstellen will und dann den uC neu
programmieren.
2 HEX-Dateien habe ich bereits erzeugt (1000 ms und 2000 ms) und
verglichen. Die Dateien unterscheiden sich nur in einer Zeile und zwar
an 3 hintereinanderfolgenden Bytes und an der Prüfsumme (letztes Byte
einer Zeile). Allerdings finde ich meine Zeitkonstanten nicht mehr. Nun
zu meiner Frage:
Gibt es irgend eine Möglichkeit, die Zeitkonstante so festzulegen, dass
man sie im Programm immer an der selben Stelle wiederfinden kann? Dann
ist die Änderung leichter. Das Visual Basic Programm sieht dann
beispielsweise so aus:
1)Zeit in Millisekunden eingeben (zBsp. 1000)
2)daraus eine 4 stellige HEX-Zahl berechnen (bei 1000ms ist es 03E8)
3)die 2 Bytes (03 und E8) an der richtigen Stelle in die HEX-Datei
eintragen.
4)Die neue Prüfsumme für die veränderte Zeile berechnen und benfalls in
die HEX-Datei eintragen
5)Die neu entstandene HEX-Datei unter einem vom Anwender wählbaren
Namen abspeichern
6) Nun steht der Programmierung des uC mit der neuen Zeit nichts mehr
im Weg
Hoffe ich jedenfalls!!
Ich hoffe, ich habe mich klar ausgedrückt.
Vielen dank für die Bereitschaft und die tolle Unterstützung.

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
konstanten im eeprom vom AVR ablegen und dann im eigentlichen programm
einlesen? so bräuchte der anwender nur immer das das eprom neu
beschreiben...

Marcel

Autor: OliverK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Du es machen willst, ist möglich. Ich selbst habe so etwas ähnliches
schon mal machen müssen, um in einem sicheren System permanent den CRC
des Codespeichers zu prüfen.

Für z.B. einen at90S8515, Assembler

Ganz am Ende des Assemblerlistings wird Platz für Deine Konstante
reserviert.

CODE_END:
.dw 0x0000


Die zwei letzten Zeilen des Hexfiles sehen dann so aus:
Data Record
:0603400061F7AFCE0000E2

ENnd-of-File Record
:00000001FF

Vor E2 im Data Record finden sich wieder die zuvor reservierten
"Nullen".
Diese müssen manipuliert werden. Anschließend muß die Prüfsumme für
diese Zeile neu berechnet werden.


Grüße
Oliver

Autor: Hilel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Marcel.
Danke erstmal für die rasche Antwort.
Das EEPROM wird in der Anwendung für Kalibrierdaten gebraucht.
Angenommen ich habe die Zeit in Millisekunden in den Speicherzellen 5
und 6 des EEPROMs. Als Beispiel die 1000 ms (also 03 E8), dann würde
meine EEPROM-Hex-Datei beispielsweise so aussehen:
:1000000FFFFFFFFFF03E8........
Die Prüfsumme muss natürlich neu berechnet werden.
Das Programm im Flash liest dann beide Speicherzellen (5 und 6) aus dem
EEPROM und berechnet die Zeit:
Zeit = 256*Inhalt[5] + Inhalt[6].
Ich probiere es aus und werde versuchen 2 Speicherzellen aus dem EEPROM
dafür zu opfern.

Autor: Hilel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Oliver.
Genau so stelle ich mir das vor.
Wie greife ich dann im Programm auf diese Zellen zu?
Hast Du ein Programm geschrieben, um die HEX-Datei anzupassen?
Danke für den Tip.

Autor: OliverK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim AVR (8515) mit dem Befehl LPM. Mußt mal im Datenblatt nachschauen
oder in Deinen schlauen Büchern.

Ja. Ich habe ein Programm geschrieben. Es liest Zeile für Zeile ein,
bis es die vorletzte erwischt hat. Dann wird rumgeprökelt, manipuliert
und wieder korrigiert. Zum Schluß wird der ganze Summs wieder unter
einem anderen Namen abgespeichert.

Autor: Hilel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Oliver
Ich arbeite momentan mit einem Basic Compiler, der den AT90S1200
unterstützt. Sonst arbeite ich mit einem C-Compiler. Ich habe alles
mögliche versucht, leider vergeblich. Mein Programm sieht wie folgt
aus:
Variablendefinitionen
Main()
Unterprogramme
ich habe den folgenden Assembler-Code zuerst nach Unterprogramme, dann
nach Main() eingefügt:
ASM
.CSEG
Konst1:
.DW $0000
END

In der HEX-Datei ist dieser reservierte Platz für meine Konstante
nirgens zu finden. Der Compiler gibt auch keine Fehlermeldung.
Kannst Du mir vielleicht helfen.
Danke im voraus

Autor: OliverK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Morgen Hilel,

aus diesem Grund arbeite ich bei den AVRs nur mit Assembler, da weiss
man, was man hat.

Womöglich hat Dir Dein Compiler den Code wegoptimiert, als er gesehen
hat, daß auf "Konstl:" kein Zugriff stattfindet.

Autor: Hilel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten morgen Oliver.
Laut Befehlssatz des AT90S1200 verfügt dieser nicht über den Befehl
LPM. D.h. Er kann ja keine Flash-Variablen unterstützen.
Ich muss das Problem anderes lösen. Ich versuche 2 Speicherzellen im
EEPROM zu reservieren.
Danke nochmal.

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.