mikrocontroller.net

Forum: Gesperrte Threads Probleme mit Prgramm barauch schnelsst möglich hilfe


Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
ich habe ein Problem mit folgendem Programm und zwar macht er mir 
folgende erros und warnnings
wäre schön wenn ihr mir helfen könntet.

../Werkzuegwechsler.c:14: warning: data definition has no type or 
storage class
../Werkzuegwechsler.c:14: warning: type defaults to 'int' in declaration 
of 'k'
../Werkzuegwechsler.c: In function 'main':
../Werkzuegwechsler.c:25: error: expected ';' before 'if'
../Werkzuegwechsler.c:222: error: 'end' undeclared (first use in this 
function)
../Werkzuegwechsler.c:222: error: (Each undeclared identifier is 
reported only once
../Werkzuegwechsler.c:222: error: for each function it appears in.)
../Werkzuegwechsler.c:222: error: expected declaration or statement at 
end of input
../Werkzuegwechsler.c: At top level:
../Werkzuegwechsler.c:222: fatal error: opening dependency file 
dep/Werkzuegwechsler.o.d: No such file or directory
compilation terminated.
make: *** [Werkzuegwechsler.o] Error 1
Build failed with 6 errors and 2 warnings...





 #include <avr/io.h>                     //Einbinden der Header Datei 
der Ein und Ausgänge
 #include <stdint.h>                     //Einbinden der Header Datei 
zur verwendung von Integer
 #include <avr/interrupt.h>                  //Einbinden der Header 
Daeti zum verwenden des Timers

  int j;k;                        //Bekannt gebnen der Variablen j, k
  void warte (int zeit) ;                  //Bekannt gabe der Funktion 
warte

   int main (void)
  {

    while(1)                       //Endlosschleife
    {
      DDRC = 0xff                    //Alle Pins des Port C werden als 
Ausgänge gesetzt


        if (PB0 == 1 & PB4 == 1)          //Springe in die Schleife wen 
Z Achse auf 1/10 SPS  = 1 und Freigabesignal = 1
        {

          j = 0;                  //Setze j auf 0

          PC0 = 1;                //Setze Z Achse Richtung auf 1

            for (j = 0; j <80; j++)        //Zähle bis 80(Pulse) dan 
Spring aus der Schleife raus
            {

              PC1 = 1;            //Setze Z Achse Puls = 1

              warte  (5000);          //Einstellen der Zeit der 
Positiven Halbwelle

              PC1 = 0;            //Setze Z Achse Puls = 0

              warte  (5000);          //Einstellen der Zeit der 
Negativen Halbwelle


              if(j = 80)            //Nach den 80 Pulsen springe in 
diese Schleife
              {

                PD0 = 1;          //Setze Z Achse auf 1/10 Ausgang SPS 
auf 1

                  if(PD0 = 1)        //Wenn Z Achse auf 1/10 Ausgang SPS 
auf 1 ist Springe hier rein
                  {

                    if(PB5 = 1)      //Wenn Signal Erhalten 1 ist 
Springe hier rein
                    {

                      PD0 = 0;    //Setze Z Achse auf 1/10 Ausgang SPS 
auf 0

                    }          //Ende Schleife if(PB5 = 1)

                   }            //Ende Schleife if(PD0 = 1)

              }                //Ende Schleife if(j = 80)

            }                  //Ende Schleife for (j = 0; j <80; j++)

        }                      //Ende Schleife if (PB0 == 1 & PB4 == 1)



        if (PB1 == 1 & PB4 == 1)          //Springe in die Schleife wen 
Z Achse ab 1/10 SPS = 1 und Freigabesignal = 1
        {

          j = 0;                  //Setze j auf 0

          PC =0 0;                //Setze Z Achse Richtung auf 0

            for (j = 0; j <80; j++)        //Zähle bis 80(Pulse) dan 
Spring aus der Schleife raus
            {

              PC1 = 1;            //Setze Z Puls = 1

              warte  (5000);          //Einstellen der Zeit der 
Positiven Halbwelle

              PC1 = 0;            //Setze Z Puls = 0

              warte  (5000);          //Einstellen der Zeit der 
Negativen Halbwelle


              if(j = 80)            //Nach den 80 Pulsen spirneg in 
diese Schleife
              {

                PD1 = 1;          //Setze Z Achse ab 1/10 Ausgang SPS 
auf 1

                  if(PD1 = 1)        //Wenn Z Achse ab 1/10 Ausgang SPS 
auf 1 ist Springe hier rein
                  {

                    if(PB5 = 1)      //Wenn Signal Erhalten 1 ist 
Springe hier rein
                    {

                      PD1 = 0;    //Setze Z Achse ab 1/10 Ausgang SPS 
auf 0

                    }          //Ende Schleife if(PB5 = 1)

                   }            //Ende Schleife if(PD1 = 1)

              }                //Ende Schleife if(j = 80)

            }                  //Ende Schleife for (j = 0; j <80; j++)

        }                      //Ende Schleife if (PB1 == 1 & PB4 == 1)



        if (PB2 == 1 & PB4 == 1)          //Springe in die Schleife wen 
Schrittmoto Werkzeugwechsler rechts = 1 und Freigabesignal =1
        {

          j = 0;                  //Setze j auf 0

          PC2 = 1;                //Setze Schrittmotor Werkzeugwechsler 
Richtung auf 1

            for (j = 0; j <10; j++)        //Zähle bis 10(Pulse) dan 
Spring aus der Schleife raus
            {

              PC3 = 1;            //Setze Schrittmotor Werkzeugwechseler 
Puls = 1

              warte  (1000);          //Einstellen der Zeit der 
Positiven Halbwelle

              PC3 = 0;            //Setze Schrittmotor Werkzeugwechseler 
Puls = 0

              warte  (1000);          //Einstellen der Zeit der 
Negativen Halbwelle


              if(j = 10)            //Nach den 10 Pulsen spirneg in 
diese Schleife
              {

                PD2 = 1;          //Setze Schrittmotor Werkzeugwechsler 
Rechts SPS auf 1

                  if(PD2 = 1)        //Wenn Schrittmotor 
Werkzeugwechsler Rechts SPS auf 1 ist Springe hier rein
                  {

                    if(PB5 = 1)      //Wenn Signal Erhalten 1 ist 
Springe hier rein
                    {

                      PD2 = 0;    //Setze Schrittmotor Werkzeugwechsler 
Rechts SPS auf 0

                    }          //Ende Schleife if(PB5 = 1)

                   }            //Ende Schleife if(PD3 = 1)

              }                //Ende Schleife if(j = 10)
            }                  //Ende Schleife for (j = 0; j <10; j++)

        }                      //Ende Schleife if (PB2 == 1 & PB4 == 1)



        if (PB3 == 1 & PB4 == 1)          //Springe in die Schleife wen 
Schrittmoto Werkzeugwechsler links = 1 und Freigabesignal = 1
        {

          j = 0;                  //Setze j auf 0

          PC2 = 0;                //Setze Schrittmotor Werkzeugwechsler 
Richtung auf 0

            for (j = 0; j <10; j++)        //Zähle bis 10(Pulse) dan 
Spring aus der Schleife raus
            {

              PC3 = 1;            //Setze Schrittmotor Werkzeugwechseler 
Puls = 1

              warte  (1000);          //Einstellen der Zeit der 
Positiven Halbwelle

              PC3 = 0;            //Setze Schrittmotor Werkzeugwechseler 
Puls = 0

              warte  (1000);          //Einstellen der Zeit der 
Negativen Halbwelle


              if(j = 10)            //Nach den 10 Pulsen spirneg in 
diese Schleife
              {

                PD3 = 1;          //Setze Schrittmotor Werkzeugwechsler 
Links SPS auf 1

                  if(PD3 = 1)        //Wenn Schrittmotor 
Werkzeugwechsler Links SPS auf 1 ist Springe hier rein
                  {

                    if(PB5 = 1)      //Wenn Signal Erhalten 1 ist 
Springe hier rein
                    {

                      PD3 = 0;    //Setze Schrittmotor Werkzeugwechsler 
Links SPS auf 0

                    }          //Ende Schleife if(PB5 = 1)

                   }            //Ende Schleife if(PD3 = 1)

              }                //Ende Schleife if(j = 10)

            }                  //Ende Schleife for (j = 0; j <10; j++)

          }                    //Ende Schleife if (PB3 == 1 & PB4 == 1)

      }                        //Ende Hauptprogramm



void warte   (int zeit)                    //Funktion Warte

{
    k=0x00;                        //Variable auf 0 setzen
    TCCR0 = (1<<CS01);                  //Timer starten mit 1/8 des CPU 
Taktes

      while (k<=zeit)                  //solange variable kleiner als 
zeit ist
      {

        while (TOV0==0)                //solange Timer nicht überläuft
        {
          ;
        }

        k++;                    //Variable k + 1
      }

    TCCR0=0;                      //Timer aus
}

end;

: Verschoben durch Admin
Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha schrieb:

wer soll denn ein so formatierten quellcode lesen könnne?

Aber das sieht mir schon falsch aus.

> int j;k;

schreibt lieber
int j;
int k;

oder int j,k;

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow... so rotzfreche, stinkfaule aber trotzdem extrem dringliche 
anfragen gibts hier selten.
rechne mit viel gegenliebe - ich fang mal an.

> ../Werkzuegwechsler.c:25: error: expected ';' before 'if'
bist du zu dumm zum lesen, oder verstehst du nicht das kleinste bisschen 
englisch?

> ../Werkzuegwechsler.c:222: error: 'end' undeclared (first use in this
> function)
bist du zu dumm zum lesen, oder verstehst du nicht das kleinste bisschen 
englisch?

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha schrieb:
> if(PD3 = 1)

Das steht da auch 27 mal so drin. if (PD3 == 1)

Beseitige erstmal diese Fehler. Dann rück' deinen Code vernünftig ein, 
daß es keine Zumutung mehr ist, das durchzusehen.

Sascha schrieb:
> end;

Sowas gibt es in C nicht.

mfg.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie soll jemand rauskriegen, was in Zeile 14 steht???

Wenn Du es eilig hast, gehe langsam.

Lies Dir in Ruhe die Postingregeln durch und versuchs nochmal.
Lies auch einmal Korrektur vor dem Abschicken.


Peter

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha schrieb:
> Werkzuegwechsler.c

Dateiname falsch.

(Weiter lese ich nicht, um mir die gute Stimmung nicht zu versauen.)

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, end; könnte es prinzipiell schon geben, wenn es irgendwo vorher 
definiert wurde. Main habe ich übersehen oder es existiert gar nicht?
Stephan.

Autor: Name (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Solche Anfragen sollte man wortlos in die Tonne schmeißen, jede Antwort 
ist extrem kontraproduktiv. Warum habe ich im Beitrag "Einheitlicher 
Umgang usw." ausgeführt.

@Mod: Thread löschen!

Autor: Währzoikwäxxlehr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> Lies Dir in Ruhe die Postingregeln durch und versuchs nochmal.
> Lies auch einmal Korrektur vor dem Abschicken.

Klaus Wachtler schrieb:
> Dateiname falsch.
> (Weiter lese ich nicht, um mir die gute Stimmung nicht zu versauen.)

Hey Leute, Leute! Für sowas hat man doch keine Zeit, wenn man "schnelsst 
möglich hilfe baraucht".
Etwas mehr Verständnis bitte!

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> bist du zu dumm zum lesen, oder verstehst du nicht das kleinste bisschen
>> englisch?

Michael, dein Ton ist unsachlich und deine Grammatik zum Heulen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan schrieb:
> Main habe ich übersehen oder es existiert gar nicht?

Main und Rhein nicht, aber main. :-)

Aber alle Achtung für deinen Mut!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha schrieb:
> if(j = 10)       //Nach den 10 Pulsen spirneg in diese Schleife
Siehe http://if-schleife.de

Du hättest leichter keine Kommentare in dein Programm geschrieben, dann 
könnte man das besser lesen...

Und lies mal die Zeilen da oben direkt über dem Eingabefenster:
Antwort schreiben
Wichtige Regeln - erst lesen, dann posten!
    * Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
Und C-Dateien am besten mit der Endung .c

> if (PB0 == 1 & PB4 == 1)
Du wirst mit diese Zeile (und ähnlichen) nicht das erreichen, was du 
willst. Da sind gleich ein paar Fehler drin...
Nummer 1: Das & in C ist ein bitweises Und, du willst hier aber 
eigentlich logisch verknüpfen. Sieh dir mal den Unterschied der & sowie 
der && Operatoren genauer an.
Nummer 2 und 3: Sieh mal nach, was PB0 ist. Richtig: es ist ein define 
mit dem Wert 0. Und 0 ist nicht == 1, deshalb ist diese Abfrage immer 
falsch.
Genau das selbe mit PB4. Dieses Makro repräsentatiert den Wert 4, und 
deshalb ist 4==1 immer falsch.
Und desahlb wird diese if-Abfrage nie ausgeführt...

Lies dir doch einfach mal ein C-Grundlagenbuch durch. Und die ganzen 
Tutorials hier im Forum. Einfach nur irgendwo irgendwas herkopieren 
klappt so nicht...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Name schrieb:
> Warum habe ich im Beitrag "Einheitlicher
> Umgang usw." ausgeführt.

Unter welchem Namen?

Martin schrieb:
>>> bist du zu dumm zum lesen, oder verstehst du nicht das kleinste bisschen
>>> englisch?
>
> Michael, dein Ton ist unsachlich und deine Grammatik zum Heulen.

Passt also super zur Frage.

Autor: Sascha (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So habe mal das Programm als TXT dokument angehangen hoffe es ist jetzt 
besser zu lessen

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, mein Ton ist unsachlich! Ja Katastrophe!
Gott sei Dank hast du uns das mitgeteilst, sonst wärs mir und dem Rest 
der Welt ja völlig entgangen.

Achja, an meinem Deutsch wirst du außer regional üblichen 
Verschleifungen und der ein oder anderen Unzulänglichkeit selben 
Ursprungs keinen Fehler finden.

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so habe das Programm jetzt auch auf folgende Errors reduzieren können.

../Werkzuegwechsler.c:26: error: expected ';' before 'if'
../Werkzuegwechsler.c: At top level:
../Werkzuegwechsler.c:221: fatal error: opening dependency file 
dep/Werkzuegwechsler.o.d: No such file or directory
compilation terminated.

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha schrieb:
> So habe mal das Programm als TXT dokument angehangen hoffe es ist jetzt
>
> besser zu lessen

Noch schlimmer.

mfg.

Autor: der so 'nicht' funktioniert! (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uuuuiiihh,

großes Chaos in deinem Code, die "Formatierung" ist
ja unter aller S.. , mit verlaub gesagt.

und das hier

> int j;k;

ist "falsch"

sollte

int j,k;

...

den Rest tu ich mir nicht an. :(

Formatier deinen CODE mal richtig! Von "einrücken" hast
du noch nichts gehört?
...lesen terminated "wegen Augenkrebsgefahr" 

Alter Schwede...

Grüße...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha schrieb:
> So habe mal das Programm als TXT dokument angehangen
Und ich sach noch:
>> Und C-Dateien am besten mit der Endung .c
Weil dann, du wirst es kaum glauben, hier im Forum so eine wundersame 
Syntaxhighlighting-Geschichte losgeht und damit sogar dein Quelltext 
lesbarer wird...

EDIT: Stell mal die Tabs in deinem Editor ab und statt dessen 4 
Leerzeichen ein...

Autor: Name (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sascha
Deine Probleme lassen sich ganz einfach lösen: del Programm.txt
Anschließend den Netzwerkstecker ziehen und fertig!

Autor: Sascha (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ok endschuldig meinen Ton und meine Rechtschreibung aber ich muss das 
Programm so schnell wie möglich Fertig bekommen da es sehr wichtig ist.
Und nun das Programm nochmal als C datei mit guter Formatierung.

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> damit sogar dein Quelltext
> lesbarer wird...

Nicht besonders schwer :-)

zu Thema:
Das sieht für mich danach aus, als würdest du etwas von SPS(?) auf einen 
AVR portieren wollen.
Daher solltest du erst mal c lernen, davor wirds nix werden.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Oh, mein Ton ist unsachlich! Ja Katastrophe!
> Gott sei Dank hast du uns das mitgeteilst, sonst wärs mir und dem Rest
> der Welt ja völlig entgangen.

> Achja, an meinem Deutsch wirst du außer regional üblichen
> Verschleifungen und der ein oder anderen Unzulänglichkeit selben
> Ursprungs keinen Fehler finden.

Geht also, wenn du nur willst. Allein hinter dem einleitenden 'Oh' hätte 
ich gern ein 'Gott' gelesen.

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Endschuldigt bitte aber ich bin dabei C zulernen in der Schule 
allerdings Programmiere ich sonst einen 80C552 von NXP und keinen Atmega 
32 von Atmel und normalerweise programiere ich auch in Keil und nicht 
AVRStudio.

Ich wäre um Hilfreiche Beiträge von euch sehr dankbar.

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha schrieb:
> Endschuldigt bitte aber ich bin dabei C zulernen in der Schule

Preisfrage: Was macht dieses Konstrukt:

> if(PD0 = 1)

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Gott sei Dank hast du uns das mitgeteilst ...

Was mir noch auffiel. ist eine gewisse Ich-Schwäche in deinem Beitrag. 
Das entnahm ich dem 'uns' in deinem deinem Satz, der eindeutig an dich 
gerichtet war.

Autor: Alex K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha schrieb:
> Ok endschuldig meinen Ton und meine Rechtschreibung aber ich muss das
> Programm so schnell wie möglich Fertig bekommen da es sehr wichtig ist.
> Und nun das Programm nochmal als C datei mit guter Formatierung.

Es fehlen Semikolons, Vergleiche bei if sind falsch, Leerzeichen in 
Funktionsaufrufen sind auch unorthodox...

Ganz im ernst, da sind dermaßen viele Fehler drin, da hab ich auch keine 
Lust noch im Detail zu sagen, wo jetzt genau was falsch ist. Es sind 
nicht nur programmiertechnische Fehler sondern auch Tippfehler usw.. 
Rudimentärste C-Konstrukte sind falsch umgesetzt...

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[/c]        if (PB0 == 1 & PB4 == 1)          //Springe in die Schleife 
wen Z Achse auf 1/10 SPS  = 1 und Freigabesignal = 1
[/c]
Das klappt so nicht.
Willst du einen einzelnen (zwei einzelne) Pin abfragen, musst du das so 
schreiben:
if ( (PINB & (1<<PB0)) && (PINB & (1<<PB1)) )
So und nicht anders.

[/c]          PC0 = 1;                //Setze Z Achse Richtung auf 1
[/c]
Willst du einen einzelnen Pin setzen, musst du das so schreiben:
PORTC |=  (1<<PC0);       //setzen
PORTC &= ~(1<<PC0);       //löschen
So und nicht anders.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha schrieb:
> Ok endschuldig meinen Ton und meine Rechtschreibung aber ich muss das
> Programm so schnell wie möglich Fertig bekommen da es sehr wichtig ist.

dann hättest du eher anfangen, in der C-Vorlesung richtig aufpassen, 
oder jemanden bezahlen müssen.

In dem Code steckt soviel Unkenntnis der Grundlagen und prinzipielle 
Fehler, dass hier ein Paar Tips nicht ausreichen.
Und niemand wird dir hier kostenlos ein Programm schreiben.

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst einmal danke für eure Hilfe. Werde das Programm jetzt mal so wie 
ihr es mir gesagt habt umschreiben.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.