mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfänger braucht Hilfe in C (MSP430)


Autor: peterlustig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
also erstmal zu mir ich bin in C ein kompletter Anfänger da ich von der 
Schule aus nur mit C# gearbeitet habe. Jetzt wollte ich mich einmal 
näher mit C eclipse beschäftigen. Ich habe hier einen vorgegebenen 
Quellcode aber wenn ich diesen Übernehme funktioniert dieser nicht 
Richtig. Wie sieht den genau die Datei test1.c aus und das dazugehörige 
makefile?
Ich hoffe ihr könnt mir helfen, denn sonst bin ich echt am verzweifeln 
hier :D
#include <msp430x14x.h>
#include "test1.h"
char eingabe;
int eingabeflag;
void main(void)
{
    unsigned int i;
    eingabeflag = 0;
    WDTCTL = WDTPW + WDTHOLD; // Stop WDT
    BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL
    do
    {
        IFG1 &= ~OFIFG; // Clear OSCFault flag
        for (i = 0xFF; i > 0; i--); // Time for flag to set
    }
    while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
    BCSCTL2 |= SELM1+SELM0; // MCLK = LFXT1 (safe)
    UCTL0 = CHAR; // 8-bit character
    UTCTL0 = SSEL0; // UCLK = ACLK
    UBR00 = 0x45; // 8MHz 115200
    UBR10 = 0x00; // 8MHz 115200
    UMCTL0 = 0x00; // 8MHz 115200 modulation
    ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
    IE1 |= URXIE0; // Enable USART0 RX interrupt
    P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
    P3DIR |= 0x10; // P3.4 output direction
    _EINT(); // Enable interrupts
    ausgabe ("\n\r Waehle Zahl zwischen 0 und 2!\n\r");
    for (;;)
    {
        if (eingabeflag == 1) //check input flag
        {
            switch (eingabe)
            {
                case '0':
                ausgabe ("Sie haben die 0 gewaehlt!\n\r");
                eingabeflag = 0;
                break;
                case '1':
                ausgabe ("Sie haben die 1 gewaehlt!\n\r");
                eingabeflag = 0;
                break;
                case '2':
                ausgabe ("Sie haben die 2 gewaehlt!\n\r");
                eingabeflag = 0;
                break;
                default:
                ausgabe("Die Eingabe war nicht korrekt!\n\r");
                eingabeflag = 0;
            }
        }
    }
}

void ausgabe (char *inText) //function to print text in hyper terminal
{
    char *cpText; //intern pointer

    for (cpText = inText; *cpText; cpText++) //print char untill pointer 
= null
    {
        while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
        TXBUF0 = *cpText;
    }
}

interrupt[UART0RX_VECTOR] void usart0_rx (void)
{
    eingabe = RXBUF0; // read input character
    eingabeflag = 1; // set input flag
}

Autor: Dieter Engelhardt (netdieter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
peterlustig wrote:
> Hallo,
> also erstmal zu mir ich bin in C ein kompletter Anfänger da ich von der
> Schule aus nur mit C# gearbeitet habe. Jetzt wollte ich mich einmal
> näher mit C eclipse beschäftigen. Ich habe hier einen vorgegebenen
> Quellcode aber wenn ich diesen Übernehme funktioniert dieser nicht
> Richtig. Wie sieht den genau die Datei test1.c aus und das dazugehörige
> makefile?
> Ich hoffe ihr könnt mir helfen, denn sonst bin ich echt am verzweifeln
> hier :D
Formatierung:!!!!
> #include <msp430x14x.h>
> #include "test1.h"
> char eingabe;
> int eingabeflag;
> void main(void)
> {
>     unsigned int i;
>     eingabeflag = 0;
.....

Wenn Du jetzt noch detailiert beschreibst WAS nicht funktioniert, dann 
schaut es sich auch vielleicht mal jemand an.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
peterlustig wrote:

> Quellcode aber wenn ich diesen Übernehme funktioniert dieser nicht
> Richtig.

Definiere 'funkioniert nicht richtig'

Kriegst du Compilerfehler.
Macht das Programm nicht das was du erwartest?
Was erwartest du? Was passiert statt dessen?

Autor: peterlustig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten, die "Aufgabenstellung" lautet wie folgt:

Ein Tastendruck auf dem Keyboard des PCs wird detektiert und als 
Charakter zur RS-232 Schnittstelle des PCs gesandt. Der Mikrocontroller 
liest die Daten aus und generiert eine entsprechende Antwort. Das 
Einlesen erfogt mittels einer Interruptroutine. Liegt ein Charakter am 
Eingang der Schnittstelle des Controllers an, wird das Interrupt 
aktiviert und durchlaufen. Der Buffer wird ausgelesen und das 
Eingabeflag gesetzt. In der Switch-Anweisung wird der Charakter 
¨uberpr¨uft und eine entsprechende Antwort generiert. Für die Ausgabe an 
den PC wird die Funktion ausgabe erstellt. Diese schreibt jeden 
Charakter des Antwortsatzes auf den Buffer bis das Satzende erreicht 
ist.

Beim Kompilieren kommt folgende Meldung:

make -k all
msp430-gcc -mmcu=msp430x149 -DMSP -O   -o Testfile
msp430-gcc: no input files
make: *** [Testfile] Error 1
make: Target `all' not remade because of errors.

Als Builder werden "CDT Makefilebuilder" und "Scanner Configuration 
Builder" verwendet.

Ich muss sagen, dass ich noch nie mit C und in Eclipse programmiert habe 
:(

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir doch mal im Makefile diese Zeile an

> msp430-gcc -mmcu=msp430x149 -DMSP -O   -o Testfile

und dann sag mir: welches ist wohl das Input-File (also das *.c File) 
welches vom Compiler zu übersetzen ist.

Richtig. Da ist keines. Und genau das sagt dir auch der Compiler.

Dein Problem hat nichts mit C an sich oder mit Programmierung zu tun, 
sondern mit der Bedienung deiner Tools.

Autor: peterlustig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was heißt das jetzt konkret? Was muss ich genau tun, was erstellen? 
Sorry, ich hab echt keine Ahnung, da ich so gut wie keine Kenntnis 
besitze. Allerdings habe ich diesen Quellcode vorgegeben und soll es zum 
Laufen kriegen, fragt sich nur wie!?

Benutzen tue ich Eclipse SDK und um es auf den Mikrocontroller zu 
schreiben Olimex MSP430 Programmer.

Danke

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
peterlustig wrote:
> Und was heißt das jetzt konkret?

das du im Makefile in der zitierten Zeile den Namen deines .c-Files 
angeben musst...

Autor: Dieter Engelhardt (netdieter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eclipse erzeugt doch die passenden Makefiles automatisch und mit der 
aktuellen Version vom MSPGCC musst du eh den internen Makefile Builder 
benutzen.
Schau mal hier: http://supachris.homeip.net/Eclipse_MSPGCC.zip

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.