Hi
Bei meinem Versuch ein Display in C anzusteuern, zeigt der Compiler
Fehlermeldungen in der Delay.h an. Die Fehler sind natürlich in meinem
Code, aber ein = expected Fehler hab ich in dieser Form noch nie
gesehen.
Außerdem sind noch andere, für mich nicht klärbare Fehler drin (kommen
aber erst wieder wenn die jetzigen behoben sind.
Philip schrieb:> #define F_CPU = 8000000>> hat er drin :) (siehe zip File)
Ah. Zip File habe ich übersehen.
Na dann haben wir ja den Übeltäter:
Da versucht wieder einer C zu programmieren, ohne ein vernünftiges
Lehrbuch :-)
Übrigens kann man den Text, den Windows in Konsolenfenstern ausgibt, als
Text in die Zwischenablage kopieren - und hier als Text zitieren.
Eine Bitmap als Screenshot ist einfach nicht nötig.
Rufus t. Firefly schrieb:> Übrigens kann man den Text, den Windows in Konsolenfenstern ausgibt, als> Text in die Zwischenablage kopieren - und hier als Text zitieren.>> Eine Bitmap als Screenshot ist einfach nicht nötig.>
Sorry weiß auch nicht was ich vorher gemacht hab, hat nicht
funktioniert, als ich STRG + C gedrückt hab.
Sam schrieb:> Wenn ich es weg mach stehen die restlichen Fehler noch da.> Ich hab das auch nur dran gemacht weil er Compiler das sagte.
Das, mein Herr, ist die schlechteste Begründung die du finden kannst.
Ein Compiler ist nur 'eine Maschine'. Jeder denkende Mensch ist einer
Maschine überlegen.
Du sollst
* dir die angemäkelten Code Stellen ansehen
* überlegen was da falsch sein könnte. Dazu muss man allerdings
die C Regeln kennen.
* Die 'Korrekturvorschläge' des Compilers immer mit dem Hintergedanken
in Betracht ziehen, dass der Compiler auch grauslich falsch liegen
kann. Denn wie gesagt: Der Compiler ist nur eine Maschine
> Wenn ich es weg mach stehen die restlichen Fehler noch da.
Du hast denselben Fehler noch an anderen Stellen gemacht.
Schau mal in die lcd.c hinein
In der lcd.h
das hier
1
voidLcdInit();
ist kein Prototyp. Das lässt offen, wie die Argumentliste tatsächlich
aussieht.
Das hier
1
voidLcdInit(void);
wäre der korrekte Prototyp
Das hier
1
voidLcdWrite(constchar[80]txt);
ist ausser falsch, nur noch falsch
1
voidLcdWrite(constchartxt[]);
Aber eigentlich macht man das nicht so. ...
1
voidLcdWrite(constchar*txt);
... ist die gebräuchlichere Form
Und morgen besorgst du dir gleich ein C-Buch und beginnst zu LESEN.
Das hat keinen Sinn, eine Sprache wie C nach der Methode 'Versuch und
Irrtum' bzw. 'Ich kann schon erraten wie das alles funktioniert' zu
erlernen.
Ist ja gut, ich hab ein C++ Buch, da muss man nicht xyz(void) angeben.
Und Array in C++ Hab ich nie leiden können.
Aber trotzdem danke.
Jetzt kommen halt die Fehler die ich vorher schon mal hatte:
D:\Projekte\Atmega\sd karte>make.exe all
-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
Compiling: main.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char
-funsigned-bitfiel
ds -fpack-struct -fshort-enums -Wall -Wstrict-prototypes
-Wa,-adhlns=main.lst -
std=gnu99 -DF_OSC=8000000 -MD -MP -MF .dep/main.o.d main.c -o main.o
In file included from main.c:8:
f:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:85:3: warning:
#warnin
g "F_CPU not defined for <util/delay.h>"
main.c: In function 'main':
main.c:22: warning: implicit declaration of function 'Clear'
Compiling: lcd.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char
-funsigned-bitfiel
ds -fpack-struct -fshort-enums -Wall -Wstrict-prototypes
-Wa,-adhlns=lcd.lst -s
td=gnu99 -DF_OSC=8000000 -MD -MP -MF .dep/lcd.o.d lcd.c -o lcd.o
In file included from lcd.c:2:
f:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:85:3: warning:
#warnin
g "F_CPU not defined for <util/delay.h>"
lcd.c: In function 'LcdSend':
lcd.c:69: error: expected ';' before numeric constant
lcd.c:70: error: expected ';' before numeric constant
lcd.c:71: error: expected ';' before numeric constant
lcd.c:72: error: expected ';' before numeric constant
lcd.c:73: error: expected ';' before numeric constant
lcd.c:74: error: expected ';' before numeric constant
lcd.c:75: error: expected ';' before numeric constant
lcd.c: In function 'LcdWrite':
lcd.c:81: warning: implicit declaration of function 'WriteChar'
lcd.c: At top level:
lcd.c:85: error: expected identifier or '(' before '}' token
make.exe: *** [lcd.o] Error 1
Bei den #define waren ein paar =
Keine Ahnung warum ich die da hingeschrieben hab.
Der ; Fehler: Liegt das an dem #define bla x.y das der keinen Punkt
akzeptiert?
Karl heinz Buchegger schrieb:> Wenn du schon in C nicht so fit bist, dann sieh dir wenigstens bei> anderen an, wie man solche Dinge macht.
Das weiß ich, dass man das so macht. Allerdings war txt als Array
definiert und somit stimmte das Durchzählen.
Sam schrieb:> Sorry weiß auch nicht was ich vorher gemacht hab, hat nicht> funktioniert, als ich STRG + C gedrückt hab.
Damit geht das auch nicht. Rechtsklick mit Maus und "Markieren" bei
nicht aktivem QuickEdit-Modus, sonst direkt Markieren mit Linksklick.
Kopieren in die Zwischenablage mit Enter/Return.
Ist bei den ernstgemeinten Windowsversionen seit 1993 so.
> #warning "F_CPU not defined for <util/delay.h>"
..zeig mal her was Du jetzt drin stehen hast für F_CPU (normalerweise
gibt man das übrigens als Kommandozeilenoption, behelfsweise im
Makefile, an - oder in einem extra Header, den dann alle Module
includieren können. So (und nur so) vermeidet man mehrfache (und ggf.
widersprüchliche) defines.).
> main.c:22: warning: implicit declaration of function 'Clear'
Heisst die möglicherweise LcdClear()?
> lcd.c:69: error: expected ';' before numeric constant
[..]
Aua. Schau Dir mal [1] an.
HTH
[1] http://www.mikrocontroller.net/articles/Bitmanipulation
g457 schrieb:>> lcd.c:69: error: expected ';' before numeric constant> [..]>> Aua. Schau Dir mal [1] an.>> HTH>> [1] http://www.mikrocontroller.net/articles/Bitmanipulation
Tja weißt du was, das hab ich schon die ganze Zeit offen, da ich sowas
nie vorher brauchte (und keine Ahnung davon hatte).
Ich hab gedacht das geht so:
PORTB.6 = 1;
Und das gleiche mache ich doch: Ich picke mir den Bit den ich brauche
raus und setzte den Bit im Register. Das dass nicht geht ist ja klar,
aber warum kapier ich nicht.
>> [1] http://www.mikrocontroller.net/articles/Bitmanipulation>> Tja weißt du was, das hab ich schon die ganze Zeit offen, da ich sowas> nie vorher brauchte (und keine Ahnung davon hatte).> Ich hab gedacht das geht so:>> PORTB.6 = 1;>> Und das gleiche mache ich doch:
∗hust∗ bei mir zeigt obige Seite was anderes an, z.B. im Abschitt [1]
steht da sowas wie
Ich hab glaub ich das irgendwo mal gelesen gehabt (vielleicht für
Bascom, da geht das).
LCD_CTRL |= ((data & 0x01) << LCD_RS)
LCD_DATA |= (((data & 0x02) << LCD_DB4) | ((data & 0x04) << LCD_DB5) |
((data & 0x08) << LCD_DB6) | ((data & 0x10) << LCD_DB7));
LCD_CTRL |= (1 << LCD_EN);
LCD_CTRL |= (0 << LCD_EN);
Hier kommt das:
lcd.c: In function 'LcdSend':
lcd.c:72: error: called object '(int)data << 7 & 255' is not a function
make.exe: *** [lcd.o] Error 1
Fehler ist in LCD_DATA...
Auf dem ersten Blick fehlt hinter LCD_CTRL ein ;
[Ich bin mal so naiv und glaube dass der Code kopiert und nicht
(fehlerbehaftet) abgeschrieben worden ist...]
Christoph H. schrieb:> Strichpunkt in der Zeile davor fehlt.
Erster... ;-)
Mal 'ne Frage, wo kommst du her, dass du Strichpunkt sagst? Dass das ein
Semikolon ist, hat mir Wikipedia verraten, aber wo diese Bezeichnung
üblich ist, würde ich trotzdem gerne wissen. ;-)
Link zu schrieb:> Mal 'ne Frage, wo kommst du her, dass du Strichpunkt sagst? Dass das ein> Semikolon ist, hat mir Wikipedia verraten, aber wo diese Bezeichnung> üblich ist, würde ich trotzdem gerne wissen. ;-)
Semicolon?
im engl. Sprachraum.
Ein 'Doppelpunkt' schimpft sich dort 'Colon'.
Ein 'Fast-Doppelpunkt' ist daher ein 'Semi-Colon'
Karl heinz Buchegger schrieb:>> Mal 'ne Frage, wo kommst du her, dass du Strichpunkt sagst? Dass das ein>> Semikolon ist, hat mir Wikipedia verraten, aber wo diese Bezeichnung>> üblich ist, würde ich trotzdem gerne wissen. ;-)>> Semicolon?
Neee, ;-)
Strichpunkt ist mir gar nicht geläufig. :-)
Link zu schrieb:> Karl heinz Buchegger schrieb:>>> Mal 'ne Frage, wo kommst du her, dass du Strichpunkt sagst? Dass das ein>>> Semikolon ist, hat mir Wikipedia verraten, aber wo diese Bezeichnung>>> üblich ist, würde ich trotzdem gerne wissen. ;-)>>>> Semicolon?> Neee, ;-)> Strichpunkt ist mir gar nicht geläufig. :-)
:-)
Österreich
: ist ein Doppelpunkt
; ist ein Strichpunkt
Karl heinz Buchegger schrieb:> Link zu schrieb:>> Karl heinz Buchegger schrieb:>>>> Mal 'ne Frage, wo kommst du her, dass du Strichpunkt sagst? Dass das ein>>>> Semikolon ist, hat mir Wikipedia verraten, aber wo diese Bezeichnung>>>> üblich ist, würde ich trotzdem gerne wissen. ;-)>>>>>> Semicolon?>> Neee, ;-)>> Strichpunkt ist mir gar nicht geläufig. :-)>> :-)> Österreich
Och echt. Sonst habt ihr doch so schöne eigene Namen...
Sowas wie:
-Eierschwammerl
-Naßwadi
Sam schrieb:> Ist ja gut, ich hab ein C++ Buch, da muss man nicht xyz(void) angeben.> Und Array in C++ Hab ich nie leiden können.
C++ ist nicht C, also kannst du auch dessen Regeln nicht alle anwenden.
Sam schrieb:> Karl heinz Buchegger schrieb:>> Wenn du schon in C nicht so fit bist, dann sieh dir wenigstens bei>> anderen an, wie man solche Dinge macht.>> Das weiß ich, dass man das so macht. Allerdings war txt als Array> definiert und somit stimmte das Durchzählen.
Nein, war es nicht. Das hätte aber auch in deinem C++-Buch erklärt sein
müssen.
Christoph H. schrieb:> Jop, bin aus AT. Immer diese Sprachbarrieren... ;)
Es ist ja bekannt, daß der größte Unterschied zwischen Deutschland und
Österreich die gemeinsame Sprache ist.
Bayer schrieb:> Auch bei uns in Bayern heißt ";" "Strichpunkt",> liegt an der guten Nachbarschaft.
Okay, damit ich mal gegenhalten kann: bei uns wäre es Streekpunkt
(Plattdeutsch), und nein, das habe ich nachschlagen müssen... ;-)