Hallo, ich habe die Suchfunktion benutzt, allerdings weiss ich nicht so recht wonach ich suchen soll. Falls das Thema also schon existiert bitte ich um Entschuldigung und um einen Link. Ich habe mir vorgestellt vom PC aus einen direkten Zugriff auf die Variablen in meinem Controller (Atmega16) zu haben. Dies bedeutet zu lesen und zu schreiben. Die Verbindung sollte über USART erfolgen, was auch eine drahtlose Verbindung erlaubt. Diese habe ich auch über Bluetooth (http://meinemullemaus.de/btm222/index.html) realisiert. Ich habe noch sehr wenig Ahnung von C und Mikrocontrollern und ich weiss, dass µCs keine gute Platform sind um C zu lernen. Wenn ich also Quatsch schreibe hängt dies damit zusammen. Meine Idee ist nun, aus der .map-Datei die Adressen der Variablen auszulesen und mittels dieser Info über USART diese Variablen auf dem µC zu lesen und zu schreiben. So wie ich es verstehe benötigt man eine kleinen Befehlsparser auf µC Seite (z.B.: set(Adresse, Länge, Daten); get(Adresse, Länge))und ein komplexeres Programm auf dem PC. Das PC-Progamm müsste die Infos aus der .map-Datei auslesen, die Variablenwerte benutzerfreundlich (Zahlen, Zeichen) darstellen und in korrekter Form zum µC kommunizieren. Gibt es eine solche Funktionalität schon? Ich würde ungerne alles selber schreiben wollen ;-) Für jede Antwort bin ich sehr dankbar, Christian
Christian schrieb: > Gibt es eine solche Funktionalität schon? Ich würde ungerne alles selber > schreiben wollen ;-) nein, weil es wenig sinn macht. Es gibt noch ein großen Problem was du noch nicht sieht. Der Compiler optimiert. Wenn überhaupt geht das ganze nur für Variabeln die volatil sind. Für alle andere wird es nicht sauber gehen, weil sie zwar eine RAM-Adresse haben aber sehr oft in Register gehalten werden. Damit hat eine änderung im Ram keine Auswirkung.
Vielen Dank für die schnelle Antwort. Mir war es schon klar, dass ich nur auf volatile Variablen so zugreifen kann. Das ist auch GENAU mein Ziel, da die Steuerung auf meinem µC über solche Variablen funktioniert. Also der momentane 'Modus' ist in solchen Variablen abgelegt und durch setzen dieser kann ich den µC steuern. Ausserdem sind die wichtigsten Messwerte auch als Volatile abgelgt und ich könnte sie somit auslesen. Viele Grüße, Christian
Christian schrieb: > Vielen Dank für die schnelle Antwort. > > Mir war es schon klar, dass ich nur auf volatile Variablen so zugreifen > kann. Das ist auch GENAU mein Ziel, da die Steuerung auf meinem µC über > solche Variablen funktioniert. Also der momentane 'Modus' ist in solchen > Variablen abgelegt und durch setzen dieser kann ich den µC steuern. > Ausserdem sind die wichtigsten Messwerte auch als Volatile abgelgt und > ich könnte sie somit auslesen. und warum willst du es direkt über die Adresse machen? Warum nicht im Klartext übertragen. var1 = 5; und dann im µC if ( strcmp(name,"var1") == 0 ) { var1 = value; } dafür braucht man kein mapfile und das ganze funktioniert auch mit mehre versionen von dem Programm.
Weil ich dann für JEDE Variable die ich setzen oder lesen möchte dies einzeln programmieren muss. Das habe ich momentan für drei Werte implementiert. Ich würde einen generischen Ansatz bevorzugen der einmal (viel) mehr Aufwand ist aber sich bald auszahlen sollte. Ausserdem hoffe ich es hat schon jemand gemacht. Zum einen ist ab einer gewissen Anzahl an Variablen der benötigte Speicherbedarf auf dem µC kleiner und zum anderen brauche ich die Implementierung nicht mehr anzufassen, egal welche Variablen ich lesen oder schreiben mag. Die Funktionen wären auch eins zu eins bei anderen Projekten einzusetzen. Viele Grüße, Christian
das ist eine der blödesten Ideen die ich je gehört habe
Hallo Christian, die Idee finde ich gut. Ich habe mal einen kleinen Monitor geschrieben, der wie bereits beschrieben die Variablen als Kommandointerpreter ausließt, aber dies ist wie bereits von Dir beschrieben etwas umständlich. So, nun habe ich in die Map reingeschaut, dort finde ich zwar die Variablen, aber ich kann nicht raus finden von welchem Typ diese sind. Somit kann ich zwar den Wert übertragen, kann aber nicht die Datenlänge bestimmen. Hast Du eine Idee? Gruß Marvol
Hi sag sowas nicht. Ich hab das mal für Parameter ähnlich gemacht. Allerdings hat da ein Script nach dem Linken des Programms aus dem Mapfile die Adressen alle Variablen mit dem Prefix eeprom_ ermittelt und diese Tabelle (Name + Adresse) dann ins finale HEX-File gepatcht. Das Konfigurationsprogramm am PC ließt dann diese Tabelle und ermittelt damit die Positionen der jeweiligen Variablen im EEPROM. An der Schnittstelle ist das Protokoll dann sehr kompakt. Kommen neue Parameter hinzu braucht am Protokoll nichts geändert werden. Dieses Verfahren hat sich als sehr brauchbar herausgestellt. Für den TO hab ich aber auch nichts fertiges. Matthias
Sowas gibts schon, aber wohl nicht kostenlos. Nennt sich XCP und ist von ASAM standardisiert. Wobei der Transportlayer meistens Can und Flexray ist, da das ganze aus dem Automotivebereich kommt. Aber Prinzip funktioniert es so du es selber machen wolltest. Xcp-Slave fürs Target und Xcp-Master für den Pc gibts von verschiedenen Herstellern aber wahrscheinlich privat nicht bezahlbar.
Hi wenn du noch die Datentypen rausfinden willst kannst du z.B. die Debuginfos im elf lesen (was wohl nicht so einfach ist oder ich hab noch nicht die passende Bibliothek gefunden) oder die Datentypen der jeweiligen Variablen z.B. mit ctags ermitteln. Matthias
Also bei den proffesionellen Produkten muss man den Datentyp wissen und seperat angeben. Genauso den Aufbau eines Structs, da ja nur die Start-Adresse im Map-File steht. Die Adressen der einzelnen Members werden unter Berücksichtigung des Alginment dann ausgerechnet.
Genaus diese Idee wurde hier im Forum schonmal diskutiert. Ich finds nur leider nicht mehr ;-(
Hi hab ich eben nochmal ein bisschen umgesehen. Mit Hilfe von dwarfdump (http://reality.sgiweb.org/davea/dwarf.html) und der besprochenen map Datei sollten sich alle benötigten Informationen ermitteln lassen. Das ist aber sicher alles andere als eine fünfminütige Fingerübung bis man alles soweit hat. Matthias
Hallo, vielen Dank für die vielen Antworten. Wie gesagt bin ich Anfänger und hatte gehofft eine fertige Lösung würde schon existieren ;-). Ich werde mir das Thema wohl erst später anschauen und zunächst jeden "Befehl" einzeln implementieren. Viele Grüße, Christian
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.