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.
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
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
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.
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.
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.
@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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.