mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kommunikation AVR <=> PC mittels USART und .map-Datei


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: ttl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist eine der blödesten Ideen die ich je gehört habe

Autor: Mar Vol (marvol)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Luftpumpe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Luftpumpe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genaus diese Idee wurde hier im Forum schonmal diskutiert. Ich finds nur 
leider nicht mehr ;-(

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.