Forum: Mikrocontroller und Digitale Elektronik MSP430 - IAR C-Spy Macros


von Stefan (Gast)


Lesenswert?

Hallo Zusammen,

ich hoffe, dass mir einer von euch bei meiner Frage weiterhelfen kann!
Ich möchte mit einem MSP430F2012 (Entwicklungsumgebung IAR V3.42A,
USB-Stick EZ430, spy-by-wire) eine Akkuladeschaltung realisieren.
Dabei werden Akkuspannung, Akkutemperatur und Ladestrom zu bestimmten 
Zeiten gemessen (mit ADC10). Eine Zeitbasis ist auch vorhanden.

In der Entwicklungsphase möchte ich nun überprüfen, ob das alles auch so
funktioniert, wie ich mir das vorstelle und dazu will ich mir die 
gemessenen Größen mit Timestamp protokollieren. D.h. also der MSP läuft 
im Debug-Modus, lädt den Akku wie programmiert und z.B. jede Sekunde 
werden die gemessenen Größen in ein File gespeichert, ohne den 
Programmablauf zu unterbrechen.
Eine Möglichkeit wäre natürlich, die Daten seriell an den PC zu 
übertragen und dort zu speichern. Bedeutet allerdings eine Software-UART 
im MSP zu implementieren, die ich nachher nicht mehr brauche.

Jetzt die Frage:
Ist es mit den C-Spy Macros auch möglich, alle erfassten Daten in ein 
File speichern zu lassen? Hat das schonmal jemand gemacht, ist das ein 
erfolgversprechender Ansatz? Wenn ja, ist der Macro-Overhead erträglich, 
d.h. kommt der MSP seiner eigentlichen Aufgabe noch nach oder bremst das 
zu sehr ein?

Danke schonmal im Voraus,
Stefan

von Uhu U. (uhu)


Lesenswert?

Wo sind denn die C-Spy Macros dokumentiert? Bist du sicher, daß die auch 
mit dem EZ430 funktionieren?

von Stefan (Gast)


Lesenswert?

>Wo sind denn die C-Spy Macros dokumentiert?
Im IAR Embedded Workbench User-Guide... letztes Kapitel.

>Bist du sicher, daß die auch mit dem EZ430 funktionieren?
Nö, sicher bin ich nicht.
Aber ich denke schon, da die Macros eine Sache von C-Spy sind
und C-Spy wiederum mit'm EZ430 kann.

Ich habe gestern ein wenig rumprobiert
(allerdings mit dem Parallelport FET).
Wenn man einen Log-Breakpoint setzt, dann erfüllt dieser
meine Anforderungen... außer, daß sich die Daten nicht in ein
File speichern lassen, sondern im Debug-Window geloggt werden.
Zudem ist das ganze recht langsam.
Eine andere Möglichkeit ist eben ein Macro zu verwenden und es
mit einem 'normalen' Code-Breakpoint zu verbinden. Hat aber
den Nachteil, daß der Programmablauf am Breakpoint natürlich anhält
und nicht wie gewünscht weiterläuft! Außer es gibt ein Macro, welches
den Ablauf automatisch wieder aufnimmt?!

Hmm, da bislang anscheinend keiner sowas gemacht hat, muss ich wohl
selbst den schwere Weg gehen... :-)

von Michael (Gast)


Lesenswert?

Hi,

wende dich mal an den MSP430 Support von TI. Die müssten da eigentlich 
was für dich haben.

von Stefan (Gast)


Lesenswert?

@Michael
Danke für den Tip, aber IAR wäre als Gesprächspartner sicher besser 
geeignet. Hab mir auch die App-Notes von denen angeschaut, aber so recht 
schlau bin ich daraus auch noch nicht geworden.

von Michael (Gast)


Lesenswert?

Ne ne, es gibt von TI eine DLL zur Ansteuerung des Debuggers. Diese 
bindet IAR auch nur ein.

Vor kurzem ist auch eine Application Note von TI veröffentlicht worden, 
wo der Zugriff auf die DLL beschrieben ist. Du müsstest also von deinem 
Programm auf diese DLL entsprechend zugreifen und hast dann alle 
Funktionen, die du im Debug-Modus auch hast.

von Stefan (Gast)


Lesenswert?

Aha... nee die App-Note kenne ich nicht.
Aber wenn da die DLL beschrieben ist, würde das ja bedeuten, dass ich 
einen eigenen Debugger schreiben müsste, um die DLL zu benutzen.
Ich wollte aber eigentlich einfach C-SPY nutzen :-)

Vielleicht habe ich mich oben auch nur zu kompliziert ausgedrückt?
Was ich eigentlich möchte ist folgendes:
Im µC (MSP430F2012) werden z.B. jede Sekunde mehrere ADC10 Kanäle 
gesampled. Diese Werte benutze ich, um die Akkuladung zu steuern.
Da die Werte ja aber schon im µC vorliegen, möchte ich diese auch gleich 
auf den PC übertragen, um sie dort besser analysieren zu können!
Allerdings ist dies nur in der Entwicklungsphase notwendig. Später läuft 
das Ding autark vor sich hin!
Ich dachte jetzt nur, es gäbe vielleicht eine 'einfache' Lösung, an 
diese Werte zu kommen...

von Michael (Gast)


Lesenswert?

Okay. Mit dem C-SPY ist es glaube ich nicht möglich, dass zu 
automatisieren.

Du müsstest dir ja keinen vollständigen Debugger schreiben. Im Prinzip 
reicht es ja, wenn du zunächst dir an eine bestimmte Adresse einen 
Breakpoint setzt, den Controller startest und wartest, bis er auf den 
Breakpoint trifft. Dann list du das die Speicheradresse, wo dein Wert 
gespeichert ist, aus und speicherst diesen Wert in einer Datei. 
Anschließend kannst du den Controller wieder starten und warten.

Sollte eigentlich nicht so umfangreich werden.

von Michael (Gast)


Lesenswert?

Oh Gott, ich möchte diesen Text korrigieren :-)
Ich hoffe, du weißt trotzdem, was ich meine.

von Uhu U. (uhu)


Lesenswert?

> Oh Gott, ich möchte diesen Text korrigieren :-)

Wenn du dich registrierst und einloggst, ist das möglich. Da steht 
nämlich für einige Zeit unter deinem Beitrag folgende Linkzeile:

1
 Beitrag melden | Bearbeiten | Löschen | Antwort | Antwort mit Zitat

von Stefan (Gast)


Lesenswert?

Jaja, ich verstehe schon, was Du meinst :-)

>Im Prinzip reicht es ja, wenn du zunächst dir an eine bestimmte Adresse
>einen Breakpoint setzt, den Controller startest und wartest, bis er auf
>den Breakpoint trifft.
Genau das kann ich ja in C-Spy machen. Dem Breakpoint wird ein Macro 
zugeordnet, welches dann ausgeführt wird (um z.B. Daten in ein File zu 
speichern. Dieses Macro existiert auch schon, wie ich mittlerweile 
herausgefunden habe: __writeFile oder __fmessage).
Mein Problem ist nur, dass der Breakpoint das µC-Programm unterbricht 
und nicht mehr automatisch weiter ausführt.
Außerdem bekomme ich wohl ein Timingproblem, weil der Filezugriff doch 
recht lange dauert und in der Zeit der µC gestoppt bleibt.

Ich befürchte, dass ich mir doch eine UART-Schnittstelle in den µC 
programmieren muss. Dumm nur, dass der 2012 nun gerade eben 'nur' SPI 
und I2C hardwaremäßig unterstützt :-(

von Christian R. (supachris)


Lesenswert?

Stefan wrote:

> Ich befürchte, dass ich mir doch eine UART-Schnittstelle in den µC
> programmieren muss. Dumm nur, dass der 2012 nun gerade eben 'nur' SPI
> und I2C hardwaremäßig unterstützt :-(

Wäre zumindest ne sinnvolle Möglichkeit. Und die Software-UART per Timer 
gibts doch bei TI als Quellcode. Ist wirklich ziemlich einfach, vor 
allem, wenn du nur Senden willst. Ich hab die Soft-UART mit 6MHz SMCLK 
mit 57600 betreiben können, ohne Fehler.

von Stefan (Gast)


Lesenswert?

Software-UART ist schon klar.
Problem ist nur, dass ich den Timer schon anderweitig in Beschlag 
genommen habe und jetzt schauen muss, wie ich da die Ressourcen 
vernünftig verteile, ohne Chaos anzurichten :-)
Deshalb wäre eine in HW gegossene UART besser gewesen...

Trotzdem mal Danke an alle!

von Uhu U. (uhu)


Lesenswert?

Du könntest einen zweiten 2012 per SPI ankoppeln und den die Weitergabe 
per USART machen lassen.

von Stefan (Gast)


Lesenswert?

Hmm... ja könnte ich :-)
Dann könnte ich mir aber auch eine SPI-zu-UART Bridge reinbasteln.
Das ist aber dafür, dass es nur zum Testen gedacht ist, etwas zu 
übertrieben, finde ich. Ich probier's dann erst mal in Software.

von Uhu U. (uhu)


Lesenswert?

Stefan wrote:
> Hmm... ja könnte ich :-)
> Dann könnte ich mir aber auch eine SPI-zu-UART Bridge reinbasteln.
> Das ist aber dafür, dass es nur zum Testen gedacht ist, etwas zu
> übertrieben, finde ich. Ich probier's dann erst mal in Software.

Es reicht doch, wenn du den zweiten 2012 auf einem Steckbrett 
zusammenstoppelst und zum Test mit deiner Schaltung verbindest.

von Stefan (Gast)


Lesenswert?

Schon, aber die Soft-UART muss ich auch dort implementieren.
Falls ich bei 'nur' einem 2012 Ressourcenprobleme bekomme, dann werden 
ich's wohl so machen müssen!
Schau'n mer mal, dann seh'n mer schon...

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
Noch kein Account? Hier anmelden.