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


von peterlustig (Gast)


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
}

von Dieter E. (netdieter) Benutzerseite


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:!!!!
1
> #include <msp430x14x.h>
2
> #include "test1.h"
3
> char eingabe;
4
> int eingabeflag;
5
> void main(void)
6
> {
7
>     unsigned int i;
8
>     eingabeflag = 0;
9
.....

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

von Karl H. (kbuchegg)


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?

von peterlustig (Gast)


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 
:(

von Karl H. (kbuchegg)


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.

von peterlustig (Gast)


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

von Justus S. (jussa)


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...

von Dieter E. (netdieter) Benutzerseite


Lesenswert?


von Christian R. (supachris)


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

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.