Hallo Leute, folgende Problemstellung. Es geht um einen AVR und einen PC. Auf dem PC läuft ein Programm was mit dem AVR über RS232 kommuniziert und diverse Flags und Messwerte, IO etc. vernünftig darstellt. In diese PC Programm gibt es auch eine Seite wo jede Menge Parameter (ca.30)eingestellt werden, die bei Veränderung an den AVR übertragen werden müssen. Es sind Strings und hauptsächlich Zeit Werte in 100ms Schritten. Jetzt zur eigentlichen Frage: Wie würdet ihr vorgehen? - Im AVR über eine Schleife die Setup Parameter in die VAriablen laden? - Oder Setup Parameter in einen RAM Bereich laden, um dann den Variablen den RAM Bereich zuzuordnen. Bei Stromausfall sind diese Werte dann noch in EEPROM zu sichern. Wie macht man so was effizient?
Die Parameter sind sowieso im EEPROM des Controllers. Da werden sie beim power up her geladen. wahlweise kann amn diese Parameter vom PC her aendern.
Mr Kaktus schrieb: > Es sind Strings und hauptsächlich Zeit > Werte in 100ms Schritten. warum sollte man Strings konfigurieren wollen, wenn sowiso ein PC-Programm die Auswertung macht? > > Jetzt zur eigentlichen Frage: > Wie würdet ihr vorgehen? > - Im AVR über eine Schleife die Setup Parameter in die VAriablen laden? > - Oder Setup Parameter in einen RAM Bereich laden, um dann den Variablen > den RAM Bereich zuzuordnen. Kannst du mir mal kurz den Unterschied zwischen einer Variable und einem Ram-Bereich erklären? Ich versteh das Problem nicht. PC sendet Kommando mit neuen Parameter und AVR schreibt geänderte Werte in EEPROM. Was gibts da großartig drüber nachzudenken? Das einzige, was man sich üerlegen müsste, wär, ob man den Parametersatz als ganzes in einem Kommando überträgt oder für jeden Parameter ein eigenes Kommando oder irgendwas dazwischen.
> Das einzige, was man sich üerlegen müsste, wär, ob man den Parametersatz > als ganzes in einem Kommando überträgt oder für jeden Parameter ein > eigenes Kommando oder irgendwas dazwischen. Genau darum geht es.
PC und Board sollten die gleichen Infos haben. Auf dem Board hast du die bereits im EEProm. Daher würde ich auf dem PC beim Starten (bzw. auf Befehl) diese Daten lesen (als ein Block, d.h. alle hintereinander). Wenn am PC was geändert wird wird dieser Wert (als Einzelwert) an das Board übertragen. avr
Und mach die EEP-Write-Routine so, dass sie vor dem Schreiben den alten Inhalt prüft und bei Gleichheit auf das Schreiben verzichtet. Das erhöht die Lebensdauer des EEP, da viele Schreibzyklen unterdrückt werden. Somit kannst Du auch (ungestraft) den gesamten Datenblock neu schreiben, auch wenn sich nur 1 Bit verändert hat. Es wird dann eben nur das Byte mit dem veränderten Bit neu geschrieben. AVRs sind nicht überaus üppig mit RAM ausgestattet. Daher kann es (besonders bei kleinen AVRs mit wenig SRAM) sinnvoll sein, die Parameter beim Reset nicht ins RAM zu kopieren, sondern dann wenn sie gebraucht werden direkt aus dem EEP zu holen. MfG
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.