Hey Jungs, ich muss folgendes tun. Eine Software schreiben, mit der ich die Variablen (z.B. Verzögerung in ms) nachhinein über UART einstellen kann, ohne uC neu zu programmieren. Ich bin nicht sicher ob ich das richtig angehe. Daher wollte ich euch fragen ob meine Vorgehensweise richtig ist? Ich muss in diesem Fall Bootloader schreiben, der bei System abfragt ob ich den Wert der Variablen verändern will. Wenn Bootloader keine Nachricht über UART bekommt, das die Werte verändert werden sollen, dann startet der Bootloader das eigentliche Programm, ansonsten er fragt bei jeder Variable den neuen Wert ab. Ist das so ungefähr richtig? Oder gibt es einfachere Wege? Kennt jemand ähnliche Beispiele (Codes) wo ähnliche Aufgaben gelöst wurden? Wie sieht es dann aus mit der Rechengeschwindigkeit? Ich habe gelesen, dass EEPROM langsamer zum Lesen und Schreiben ist. Stimmt das? Wenn ja wie kann ich die Werte, nach dem das eigentlich Programm gestartet ist, ins Flash holen und im Flash mit diesen Werten arbeiten? Ich hoffe das waren nicht zu viele Fragen auf einmal. Gruss
Werte im Flash kann man nicht während des laufenden Programms ändern. Wahrscheinlich möchtest du die Werte im EEPROM halten, das kann vom Programm selbst zur Laufzeit geändert werden. Du musst das Programm dann so ändern, daß 1. Die Variablen bei Bedarf aus dem EEPROM genommen gelesen werden 2. zusätzlich zur normalen Programmfunktion noch laufend der UART ausgelesen wird und dort auf Kommandos gewartet wird. Wie diese Kommandos aussehen, kannst du dir selbst ausdenken, z.B. eine Folge von name=wert-Sequenzen, getrennt mit LF. Je nach empfangenem Namen wird der folgende Wert an der passenden Stelle im EEPROM abgelegt. Solange nichts über UART kommt, passiert halt auch nichts. Evtl. macht es Sinn, vor jedem name=wert auch noch bestimmte Füllzeichen zuzulasssen und zu ignorieren, z.B. Leerzeichen, und zudem jedes Kommando mit einer Prüfsumme zu garnieren und diese auszuwerten. Hintergrund: Wenn man erst zur Laufzeit ein Kabel anklemmt oder sonstigen Unfug treibt, kommt vielleicht auch mal etwas Verstümmeltes an. Das sollte man dann auch erkennen und ignorieren. Eine normale Sequenz würde dann also so aussehen: - ein paar Leerzeichen (werden ignoriert) - ein Name (a-z) - = - der Wert - Trennzeichen, z.B. # - Prüfsumme über Name und Wert - Zeilenvorschub Der Sender der Kommandos (PC?) kann dann einfach etliche Leerzeichen vorweg schicken, dann seine Kommandos. Das macht die Kommunikation gleich robuster.
Hi Parameter in einem Programm per serieller Schnittstelle zu setzen ist nicht so schwer. Schau dir mal das Tutorial über UART an. Das Prinzip: Statt einer Konstanten, die du im Programm verankerst, gibst du eine Variable an. In Assembler etwa so statt: LDI Reg_A, 10 so: LDS Reg_A, Var_Wert wobei Var_Wert im SRam entsprechend deklariert werden muß .DSeg ... Var_Wert: .Byte 1 ... oder im EEProm .ESeg .... Var_Wert: .Byte 1 ... Bedenke: im EEProm darf der Wert nicht ständig verändert werden, da "nur" ca. 100000 schreibzyklen garantiert werden, Danach hat sich eine EEPromzelle "verbraucht". Eine Ablage aber als Parameter, der vielleicht nur in einer Anfangsphase öfters verändert, danach aber stabil bleibt, ist im EEProm richtig untergebracht. Gruß oldmax
Klaus Wachtler schrieb: > Werte im Flash kann man nicht während des laufenden Programms ändern. Warum nicht? Machen doch alle Bootloader so. Richtig wäre: Nicht alle µCs können ihren eigenen Flasch ändern. Moderne µCs können es. Genaue Informationen gibt es im Datenblatt. > Evtl. macht es Sinn, vor jedem name=wert auch noch bestimmte Füllzeichen > zuzulasssen und zu ignorieren, z.B. Leerzeichen, und zudem jedes ... Welchen Zweck sollen die Leerzeichen erfüllen? Wenn die Kommunikation zu schnell ist, setzt man die Baud-Rate herunter. Ansonsten spielen die Pausen zwischen zwei gesendeten Zeichen keine Rolle. Wenn es nichts zu senden gibt, dann wird eben nicht gesendet. Natürlich muss man sich um die Synchronisation kümmern, ob da ein Leerzeichen das Richtige ist, wage ich zu bezweifeln. @michil Ich kann dir nur raten, das Datenblatt zu deinem µC genau zu lesen und zu verstehen, dann beantworten sich die meisten Fragen von selbst.
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.