mikrocontroller.net

Forum: Compiler & IDEs Portieren von Beispielsources


Autor: Reiner Rottmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir jemand Tipps geben, wie man am Besten Beispielsources, die
ursprünglich nicht für GCC oder für ein anderes MSP430 Modell
geschrieben wurden portieren kann?

Ich habe teilweise noch ganz schön Schwierigkeiten, da etwas zum Laufen
zu bringen. z.B. die Demoprogramme exklusiv für den MSP430-449STK-B
(ursprünglich für IAR) bekomme ich nicht zum Laufen, obwohl sie für die
verwendete Hardware gedacht sind.

Dieses Beispiel kann ich auch nicht kompilieren. Ich habe die ISR
angepasst, aber es kommt immernoch die Fehlermeldung "syntax error
before numeric constant" bei der Interrupt Service Routine:

===============
/*********************************************************************
  initialization of hardware UART0 on MSP430x44x

  File:  main_hardware.c
  Author:  Rudolf Brunner rudolf.brunner@gmx.ch
  Date:  30.4.03

  Description:  This file echos a received character @ 4800 baud

                MSP430F449
             -----------------
         /|\|              XIN|-
          | |                 |
          --|RST          XOUT|-
            |                 |
            |             P2.4|----------->
            |                 | 4800 - 8N1
            |             P2.5|<-----------

*********************************************************************/

/*********************************************************************
  includes
*********************************************************************/
#include <msp430x44x.h>

/*********************************************************************
  function prototypes
*********************************************************************/
void init_UART(void);

/*********************************************************************
  implementations
*********************************************************************/
int main(void)
{
  init_UART();
  for(;;);
  return 0;
}

void init_UART(void){
  P4DIR = 0xff;
  P4OUT = 0x00;
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
  FLL_CTL0 |= XCAP14PF;                 // Configure load caps
  UTCTL0 = SSEL0;                       // UCLK = ACLK
  UBR00 = 0x06;                         // 32kHz @ 4800 baud
  UBR10 = 0x00;                         // 32kHz @ 4800 baud
  UMCTL0 = 0xef;                        // Modulation Sequence
7-7-7-7-6-7-7-7
  UCTL0 = CHAR;                         // 8-bit character SWRST
  ME1 |= UTXE0 + URXE0;                 // Enable USART0 TXD/RXD
  IE1 |= URXIE0;                        // Enable USART0 RX interrupt
  P2SEL |= 0x30;                        // P2.4,5 = USART0 TXD/RXD
  P2DIR |= 0x10;                        // P2.4 output direction
  _EINT();                              // Enable interrupts
}

/*********************************************************************
  interrupt service routine ISR
*********************************************************************/
//interrupt (UART0RX_VECTOR) void usart0_rx(void)***HIER DER FEHLER***
interrupt(UART0RX_VECTOR) void isr_usart1rx(void)
{
  while ((IFG1 & UTXIFG0) == 0);        // USART0 TX buffer ready?
  TXBUF0 = RXBUF0;                      // RXBUF0 to TXBUF0
  P4OUT = RXBUF0;
}
==============

Sind eigentlich teilweise voll die billigen Programme aber trotzdem
komme ich nicht mal dazu sie zu kompilieren. Kann mir da jemand
weiterhelfen?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Reiner!

Erst mal: http://mspgcc.sourceforge.net/manual/x917.html

Demnach müsste Deine ISR-Deklaration so aussehen:
interrupt(UART0RX_VECTOR) isr_usart1rx(void)
{
  while ((IFG1 & UTXIFG0) == 0);        // USART0 TX buffer ready?
  TXBUF0 = RXBUF0;                      // RXBUF0 to TXBUF0
  P4OUT = RXBUF0;
}

Viel Erfolg!

Gruß,
Patrick...

Autor: Reiner Rottmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Anleitung habe ich gelesen und auch schon ziemlich alles ausprobiert
davon. Auch wenn das Void weggelassen wird, kommt der gleiche Fehler.
Die Konstanten habe ich extra auch in den Headerfiles nochmal gesucht
um sicherzustellen, dass die auch passen, aber trotzdem meckert der
Compiler...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm,
Poste doch mal bitte den gesamten Code und die Fehlermeldung...

Gruß,
Patrick...

Autor: Reiner Rottmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlermeldung des Compilers: "syntax error
before numeric constant"

Der Sourcecodode ist vollständig. Die Includes sind mspgcc Standard.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, hm...
Ich meinte eigentlich, daß Du die komplette Fehlermeldung posten
solltest, aber egal, habe gerade gesehen, daß Du die signal.h nicht
inkludierst.

#include <signal.h>

Da ist alles notwendige für Interrupts drin...

Gruß,
Patrick...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu jeder Fehlermeldung gehört doch eine Zeilennummmer.
Ohne die sucht man die Stecknadel im Heuhaufen.


Peter

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(fast?) alle Beispielprogramme von TI (C und Assembler) gibt es übrigens
auch für MSPGCC, vielleicht kannst du dir da ein paar Sachen abschauen.
Speziell für dein Vorhaben:
http://cvs.sourceforge.net/viewcvs.py/*checkout*/m...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab das gerade mal ausprobiert, wenn ich die signal.h nicht inkludiere,
dann kommt:

test1.c:4: syntax error before numeric constant

Gruß,
Patrick...

Autor: Reiner Rottmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Signal.h ist in der msp430x44x.h bereits inkludiert.

Die Zeilennummer hab ich nicht angegeben, da der Source zusammen mit
meinem Text geschrieben ist. Aber ich habe die Stelle markiert, also
genau der Anfang der ISR.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht bin ich ja blind und meine Suchfunktion im Emacs fehlerhaft,
jedenfalls ist die signal.h nicht in der msp430x44x.h inkludiert!

Gruß,
Patrick...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahja, hier mal die zwei Versionen von test1.c, kompiliert mit
# msp430-gcc -o test.elf test1.c
ohne jegliche Warnung:

test1.c
--8<--
#include <msp430x14x.h>
#include <signal.h>

interrupt(UART0RX_VECTOR) isr_usart1rx(void)
{
  while ((IFG1 & UTXIFG0) == 0);        // USART0 TX buffer ready?
  TXBUF0 = RXBUF0;                      // RXBUF0 to TXBUF0
  P4OUT = RXBUF0;
}

int
main(void)
{
  while(1);
}

--8<--

Zweite Version, kompiliert nicht, bricht mit error
test1.c:4: syntax error before numeric constant
ab:

test1.c
--8<--
#include <msp430x14x.h>
//#include <signal.h>

interrupt(UART0RX_VECTOR) isr_usart1rx(void)
{
  while ((IFG1 & UTXIFG0) == 0);        // USART0 TX buffer ready?
  TXBUF0 = RXBUF0;                      // RXBUF0 to TXBUF0
  P4OUT = RXBUF0;
}

int
main(void)
{
  while(1);
}

--8<--

Nachvollziehbar?

Autor: Reiner Rottmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt. Mein Fehler. In den Headerdateien von GCC ist die Signal.h noch
nicht eingetragen. Fügt man es hinzu klappt das Kompilieren. Vielen
Dank!

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde das nicht in die GCC-Header einfügen, macht doch keinen Sinn!
Inkludier das Zeugs doch in Deinem Projekt...

Gruß,
Patrick...

Autor: Reiner Rottmann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
//
// Dieses Programm erzeugt ein Rechteckmuster an der RS232
Schnittstelle.
// Kann man verwenden um mit dem Oszilloskop die Schnittstelle zu
debuggen.
//
#include  <signal.h>
#include <msp430x44x.h>
#include  <io.h>

int main(void)
{
  int j,i;
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
  FLL_CTL0 |= XCAP14PF;                 // Configure load caps
  UTCTL0 = SSEL1;                       // UCLK = SMCLK
  UBR00 = 0x6D;                         // 1MHz 9600
  UBR10 = 0x00;                         // 1MHz 9600
  UMCTL0 = 0x00;                        // no modulation
  UCTL0 = CHAR;                         // 8-bit character SWRST
  ME1 |= UTXE0 + URXE0;                 // Enable USART0 TXD/RXD
  IE1 |= URXIE0;                        // Enable USART0 RX interrupt
  P2SEL |= 0x30;                        // P2.4,5 = USART0 TXD/RXD
  P2DIR |= 0x10;                        // P2.4 output direction
//  _EINT();                              // Enable interrupts
  TXBUF0=1;
  RXBUF0=0;
  for (;;)
  {
    P5DIR = BIT7;                         // Set P5.7 to output
direction
    P5OUT = BIT7;                         // Lights on
    TXBUF0!=TXBUF0;
    for(i = 0; i < 100; i++){for(j = 0; j < 2; j++);};
    RXBUF0!=RXBUF0;
    for(i = 0; i < 100; i++){for(j = 0; j < 2; j++);};

//    _BIS_SR(CPUOFF);                    // Enter LPM0
//    _NOP();                             // Required only for C-spy
  }
  return 0;
}

Hab den Beispielsource mal angepasst und die Interruptroutine
rausgenommen. In der Endlosschleife müsste er doch eigentlich ein
Rechteckmuster an Pin 2.4 und 2.5 erzeugen oder? Kann das jemand
verifizieren? Hab das diesen Code auch mal für den msp430 kompiliert
angefügt.

Welches Signal hat man auf dem Oszi zu erwarten. Hab ein
Terminalprogramm auf Handshake=off eingestellt und sinnlose
Zeichenfolgen an den Ausgang geworfen und es waren bei mir immer nur 6
ganz kleine Spikes mit 40mV und Tastkopf 10:1. Kaum vom
Hintergrundrauschen zu unterscheiden aber eindeutig auf Tasteneingaben
zurückzuführen. An den Pins der Platine finde ich nur Rauschen...

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.