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;
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;
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?
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.
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
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!
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!
>> bist du zu dumm zum lesen, oder verstehst du nicht das kleinste bisschen>> englisch?
Michael, dein Ton ist unsachlich und deine Grammatik zum Heulen.
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:
1
Antwort schreiben
2
Wichtige Regeln - erst lesen, dann posten!
3
* 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...
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.
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.
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.
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?
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...
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.
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.
> 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.
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.
>> 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.
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...
[/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:
1
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:
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.