www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mspgcc: Problem mit puts()


Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe mir die Entwicklungsumgebung mit Eclips und dem mspgcc 
eingerichtet. Die ersten Programme laufen auch schon auf dem 
MSP430f1232.
Jetzt möchte ich gern über das JTAG-Interface (Parallelport) Ausgaben 
per puts(), oder printf() an den PC schicken.
Ich bekomme aber vom Linker die unten stehende Fehlermeldung. Kann mir 
bitte jemand weiter helfen. Muss ich eine andere Lib einbinden???

Vielen Dank für Eure Hilfe!

Gruß Tobias

C-Code:
#include <msp430x12x2.h>
#include <stdio.h>
#include <string.h>

int main(void){
  int n = 0;
  char* String = "Hallo";
  
  n = strlen(String);
  puts(String);
  

  WDTCTL = WDTPW + WDTHOLD;  // watchdog ausschalten
  
  P1SEL &= ~ 0x0F;      // Port1 I/O Funktion
  P1DIR |=  0x0F;        // Port1 Ausgang
  P1OUT &= ~0x0F;        // Port1 auf 0
  
  P1OUT |= 0x0F;
  
  puts("Hallo");

  while(1){ 
    P1OUT ^= 0x01;
    }
  
  return 0;  
}


Konsolenausgabe:
**** Incremental build of configuration Debug for project Projekt1 ****

make -k all
Building file: ../projekt1.c
Invoking: mspgcc GCC C Compiler
msp430-gcc -IC:\Programme\mspgcc\msp430\include -O0 -g3 -Wall -c 
-fmessage-length=0 -mmcu=msp430x1232 -oprojekt1.o ../projekt1.c
Finished building: ../projekt1.c

Building target: Projekt1
Invoking: mspgcc GCC C Linker
msp430-gcc -mmcu=msp430x1232 -oProjekt1 ./projekt1.o
/cygdrive/c/Programme/mspgcc/bin/../lib/gcc-lib/msp430/3.2.3/../../../.. 
/msp430/lib/msp1/libc.a(puts.o):  In function `puts':
/f/prog/msp430/sf/packaging/build/msp430-libc/src/stdlib/puts.c:31: 
undefined reference to `putchar'
/f/prog/msp430/sf/packaging/build/msp430-libc/src/stdlib/puts.c:33: 
undefined reference to `putchar'
make: *** [Projekt1] Error 1
make: Target `all' not remade because of errors.
Build complete for project Projekt1

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kopfkratz... Bist Du sicher, daß Du über das JTAG-Interface Daten auf 
den PC ausgeben kannst?

Ich vermute, daß das eher nicht geht - lasse mich aber gern vom 
Gegenteil überzeugen.

Üblicherweise steckt putchar in der C-Bibliothek, wie z.B. strlen und 
ähnliche Kandidaten auch.

Wenn der Linker sie nicht findet, dann existiert sie wohl auch nicht - 
was mich allerdings auch nicht im Geringsten wundern würde, denn putchar 
ruft üblicherweise eine Betriebssystemfunktion auf, die dafür sorgt, daß 
das Zeichen auch tatsächlich auf stdout ausgegeben wird.

Nur: Wenn kein Betriebssystem da ist - wie auf jedem nackten µC - dann 
kann man auch keine Betriebssystemfunktion aufrufen und folglich ist es 
auch nicht besonders lohnend, putchar in die C-Lib für den MSP430 zu 
packen.

putchar gibt ein einzelnes Zeichen auf stdout aus und wird von puts für 
jedes Zeichen im String aufgerufen.

Du kannst Dir putchar selbst schreiben - die wird dann von puts 
aufgerufen.

Allerdings mußt Du in Deiner putchar definieren, was mit dem Zeichen 
geschehen soll - Du hast alle Freiheiten, bist aber auch für alles 
selbst verantwortlich.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, prinzipiell ist so etwas möglich.

Der kommerzielle C-Compiler "Rowley Crossworks for MSP430" bietet für 
Debugausgaben über das JTAG-Interface eigene Funktionen an (deklariert 
in cross_studio_io.h), auch bei IAR meine ich derartiges gesehen zu 
haben.

Allerdings sind das nicht die normalen printf/puts/etc.-Funktionen, 
sondern spezielle Debug-IO-Funktionen, aber inhaltlich läuft's ja auf 
dasselbe hinaus.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, bei den beiden von mir angesprochenen kommerziellen 
Entwicklungsumgebungen existiert dieses "Etwas" - nämlich der Debugger.

Ist so etwas bei Gdb/Insight etwa nicht vorgesehen?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also per normalem Programmcode geht das nicht, da der MSP430 von "innen 
heraus" keinen zugriff auf das JTAG Interface hat. Teure kommerzielle 
Compiler machen das, aber das geht dann rein über die Debugging-Logik. 
Für den GCC/GDB hab ich sowas noch nich gesehn. Eventuell gehts mit 
stadout, aber aufm MSP430 hab ich´s noch nicht zum laufen bekommen. 
Müsste man mal im MSPGCC Entwickler Forum auf SF nachfragen....

Die Puts() oder Printf() Funktion ist vorgesehn, um per _selbst zu 
definierender_ Funktion PutChar() Zeichen z.B. über die serielle 
Schnittstelle zu senden. Oder über ein anderen beliebiges 
Kommunikationsinterface des MSP, nicht aber über JTAG.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Teure kommerzielle Compiler machen das, aber das geht dann rein über
> die Debugging-Logik.

D.h., der Debugger müßte ständig einen speziellen 
Debug-Ausgabe-Speicherbereich im MSP inspizieren, ob neue Debugausgaben 
da sind - das würde aber einen Ablauf des Programmes in Echtzeit 
verhindern, da der MSP für solche Polls jeweils in den Debug-Modus 
umgeschaltet werden muß, d.h. angehalten wird.

Eine andere Möglichkeit wäre, einen Hardware-Breakpoint zu diesem Zweck 
zu mißbrauchen - aber der fehlt dann wieder irgendwo anders. Zudem haben 
die kleinen MSPs mit dem SpyBiWire sowieso nur einen einzigen 
HW-Breakpoint...

Da sollte man doch besser den UART für solche Zwecke benutzen.

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.