Guten Tag,
wenn ich das Code Beispiel für C zur Tasterentprellung von Peter
Danegger (http://www.mikrocontroller.net/articles/Entprellung) aptippe
bekomme ich immer diese Meldung:
Error 10 'key_press' undeclared (first use in this function)
http://www.mikrocontroller.net/articles/Entprellung
Ich verstehe nicht warum, denn diese Variable ist als volatile vor dem
Hauptprogramm sprich while(1) deklariert.
volatile uint8_t key_press;
Dennoch bekomme ich die Meldung das sie nicht deklariert wäre.
Beste Grüße
Stefan
@Stefan (Gast)
>Hier der Code stark gekürzt aber die wichtigsten Passagen:
Klassischer Tip #1: Kauf dir mal ein C-Grundlagenbuhc und lies es.
>int main(void)>{>//Deklaration der Init Funktionen>void init_cpuClock(void); //stellt Taktfrequenz auf 2MHz
Die haben in der Funktion NICHTS zu suchen!
>// LED`s>#define led_pwm TCC0.CCA>#define port_led PORTC
Ebenso nicht die #define. Die gehören in die .h Headerdateien.
>volatile uint8_t key_state;>volatile uint8_t key_press;>volatile uint8_t key_rpt;
Ebenso nicht globale Variablen! Die gehören ausserhalb von main()
https://www.mikrocontroller.net/articles/FAQ#Ich_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F
Und ordentliches Einrücken ist kein Luxus, sondern eine vitale Hilfe.
Dann passiert es dir auch nicht, dass du etwas für eine globale Variable
hältst, was in Wirklichkeit eine lokale Variable von main() ist.
Es ist meiner Meinung nach kein Zufall, dass diejenigen mit dem
schlampigst geschriebenem Code auch immer diejenigen mit den dümmsten
Fehlern sind.
Ich finde es sehr schade, dass es in diesem Forum nicht möglich ist
höflich eine Frage zu stellen und einfach eine nette Antwort darauf zu
bekommen.
In 90% der Fälle antworten Menschen die einem in irgendeiner Hinsicht
mit ihren Ansichten belehren oder beschimpfen wollen. (Denke aus
Langeweile oder Selbstverherrlichung)
Anstatt einfach höflich auf die Frage zu antworten.
Leider bin ich nicht wie ihr mit allwissender Weißheit vom Himmel
gefallen.
Danke an alle die normal und hilfreich antworten. Ihr habt mir schon oft
gut weiter geholfen.
Stefan schrieb:> Ich finde es sehr schade, dass es in diesem Forum nicht möglich ist> höflich eine Frage zu stellen und einfach eine nette Antwort darauf zu> bekommen.
Du hast ziemlich sachliche Antworten bekommen, die allesamt
sachdienlich waren.
Karl Heinz, der sonst eine Engelsgeduld an den Tag legt, hat anscheinend
einfach keine Lust mehr, ständig und immer wieder die banalsten
Grundlagen wiederzukäuen, die in jedem, aber auch wirklich jedem
C-Buch enthalten sind, und die man sich anlesen muss, wenn man mit der
Sprache arbeiten will.
Und das hat er verhältnismäßig milde formuliert.
Wenn Du Dich mit der Formulierung "schlampig geschriebener Code"
ungerecht behandelt fühlst -- das ist schlampig geschriebener Code, da
beißt die Maus keinen Faden ab. Da hat Karl Heinz einfach nur recht.
Was erwartest Du? Sollen wir Dich anlügen und schreiben, daß das aber
schon ein ganz tolles Programm mit einem ganz tollen Programmierstil
ist, aber leider leider die Compiler so doof sind, daß sie nicht
verstehen, was Du meinst?
Das bringts doch nicht.
Und auch Karl Heinz hat vor der Kritik einen hilfreichen Hinweis
angebracht.
Also: Was Dich da piekst, bist Du selbst.
Stefan schrieb:> Ich finde es sehr schade, dass es in diesem Forum nicht möglich ist> höflich eine Frage zu stellen und einfach eine nette Antwort darauf zu> bekommen.
Ich finde es sehr schade, dass viele zwar programmieren wollen, aber
noch nicht einmal über rudimentäre Kentnisse ihrer Programmiersprache
verfügen. Etwas, das mit einem Lehrbuch und etwas Übung überhaupt kein
Problem darstellt. Schliesslich haben es die Regulars auch so gelernt.
Frag dich mal selbst: würdest du auch so denken, wenn es sich um ein
Problem im Strassenverkehr handelt und dein Gegenüber keine AHnung von
den grundlegensten Verkehrsregeln hat? Was würdest du sagen, wenn ein
Autfahrer einfach einen Fussgänger auf dem Zebrastreifen niedermäht und
sich hinterher damit 'entschuldigt', dass er ja nicht gewusst hätte, was
diese seltsamen Streifen auf der Strasse für eine Bedeutung haben? Und
ausserdem hätte er wegen dem ganzen Müll hinter dem Lenkrad die Streifen
sowieso nicht sehen können.
Würdest du dann auch denken, dass es nicht besonders zielführend ist ihm
nahezulegen, dass der Berg Mc-Donalds Schachteln nichts auf der Ablage
vor dem Lenkrad verloren haben und er gefälligst für freie Sicht sorgen
soll?
@Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
>Karl Heinz, der sonst eine Engelsgeduld an den Tag legt, hat anscheinend>einfach keine Lust mehr, ständig und immer wieder die banalsten>Grundlagen wiederzukäuen, die in jedem, aber auch wirklich jedem>C-Buch enthalten sind, und die man sich anlesen muss, wenn man mit der>Sprache arbeiten will.
Wird auch Zeit. Weisheit des Alters?
>Wenn Du Dich mit der Formulierung "schlampig geschriebener Code">ungerecht behandelt fühlst -- das ist schlampig geschriebener Code, da>beißt die Maus keinen Faden ab. Da hat Karl Heinz einfach nur recht.
tststststs, das ist aber nicht kuschel-pädagogisch wertvoll! JEDER
Mensch ist toll, geradeheraus ein Genie, man muss das nur richtig
darstellen!
>Was erwartest Du? Sollen wir Dich anlügen und schreiben, daß das aber>schon ein ganz tolles Programm mit einem ganz tollen Programmierstil>ist, aber leider leider die Compiler so doof sind, daß sie nicht>verstehen, was Du meinst?
Wie wäre es mit
"Lieber Fragesteller, du hast eine sehr interessante, neue Syntax
gefunden, über die wir unbedingt einmal sprechen müsssen. Leider sind
die heute verfügbaren Kompiler aus der Steinzeit und nicht offen für ein
neues, tolerantes Weltbild der C-Programmierung. Aber lass dich nicht
beirren, eines Tages werden diese Primitivwerkzeuge dich nicht mehr in
der Auslebung deiner individuellen Persönlichkeit einschränken."
;-)
>Das bringts doch nicht.>Und auch Karl Heinz hat vor der Kritik einen hilfreichen Hinweis>angebracht.>Also: Was Dich da piekst, bist Du selbst.
Nö, der Zeitgeist, der sachliche Kritik immer mit einem persönlichen
Angriff gleichsetzt. Und die Tatsache, dass immer weniger Leute klare
Worte verstehen, geschweige denn vertragen. Kuschelsprache rulez!
Falk B. schrieb:> @Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite>>>Karl Heinz, der sonst eine Engelsgeduld an den Tag legt, hat anscheinend>>einfach keine Lust mehr, ständig und immer wieder die banalsten>>Grundlagen wiederzukäuen, die in jedem, aber auch wirklich jedem>>C-Buch enthalten sind, und die man sich anlesen muss, wenn man mit der>>Sprache arbeiten will.>> Wird auch Zeit. Weisheit des Alters?
:-)
Resignation vor der Realität.
>Du hast ziemlich sachliche Antworten bekommen, die allesamt>sachdienlich waren.
Stimmt größtenteils
>Karl Heinz, der sonst eine Engelsgeduld an den Tag legt, hat anscheinend>einfach keine Lust mehr, ständig und immer wieder die banalsten>Grundlagen wiederzukäuen,
Es ist nicht seine Pflicht mir zu antworten wenn er keine Lust hat.
>Was erwartest Du? Sollen wir Dich anlügen und schreiben, daß das aber>schon ein ganz tolles Programm mit einem ganz tollen Programmierstil>ist, aber leider leider die Compiler so doof sind, daß sie nicht>verstehen, was Du meinst?
Ich erwarte garnichts, ich hoffe das mir jemand meine Frage beantworten
kann. Nicht mehr und nicht weniger. Veileicht fang ich am besten mal
damit an ein Buch zu lesen wie man eine PC-Maus richtig hält bevor ich
hier etwas frage. Nicht das ich jemandem auf den Zeiger geh.
>Frag dich mal selbst: würdest du auch so denken, wenn es sich um ein>Problem im Strassenverkehr handelt und dein Gegenüber keine AHnung von>den grundlegensten Verkehrsregeln hat? Was würdest du sagen, wenn ein>Autfahrer einfach einen Fussgänger auf dem Zebrastreifen niedermäht und>sich hinterher damit 'entschuldigt', dass er ja nicht gewusst hätte, was>diese seltsamen Streifen auf der Strasse für eine Bedeutung haben?
Wenn mich jemand fragen würde wie eine Ampel funktioniert würde ich es
ihm erklären und ihm nicht sagen er solle sich erstmal anschauen wie ein
Auto funktioniert.
Und wenn ich dazu keine Lust hätte würde ich es bleiben lassen und ihm
nicht erklären das er die dümmstem Fragen stellt
Stefan schrieb:> Ich erwarte garnichts, ich hoffe das mir jemand meine Frage beantworten> kann.
Bis zu Deinem #Aufschrei hat jeder hier Deine Frage beantwortet. Auch
Karl Heinz.
Du solltest dringend an Deiner Kritikfähigkeit arbeiten.
xXx schrieb:> Das macht ziemlich wahrscheinlich auch nicht, was du erwartest.
Und zuerst mal stellt sich die Frage, wie überhaupt
ein Mensch diese 4 unterschiedlichen Ereignisse in 4 verschiedene
Drückverhalten des selben Tasters codieren soll.
Mehr als 2 Drückverhalten je Taste sind nicht ergonomisch.
Und für die netten Komentare kann ich nur erneut sagen:
>Ich finde es sehr schade, dass es in diesem Forum nicht möglich ist>höflich eine Frage zu stellen und einfach eine nette Antwort darauf zu>bekommen.>In 90% der Fälle antworten Menschen die einem in irgendeiner Hinsicht>mit ihren Ansichten belehren oder beschimpfen wollen. (Denke aus>Langeweile oder Selbstverherrlichung)>Anstatt einfach höflich auf die Frage zu antworten.>Leider bin ich nicht wie ihr mit allwissender Weißheit vom Himmel>gefallen.>Danke an alle die normal und hilfreich antworten. Ihr habt mir schon oft>gut weiter geholfen.
Stefan schrieb:> Wenn mich jemand fragen würde wie eine Ampel funktioniert würde ich es> ihm erklären und ihm nicht sagen er solle sich erstmal anschauen wie ein> Auto funktioniert.
Von 'Auto funktionier' war keine Rede.
Die Rede ist davon (um dein Beispiel aufzugreifen), dass du mit einem
anderen Autofahrer an einer Kreuzung zusammen gestossen bist, dem du
erklären musst, welche Bedeutung die Ampelfarben haben.
Sorry. Zu diesem Zeitpunkt ist das dann schon ein bisschen spät. Wir
reden nicht von einer Situation in der Verkehrserziehung, sondern vom
täglichen Leben. Und da würde ich, und der Gesetzgeber sieht das
genauso, eigentlich schon erwaren, dass ein aktiver Teilnehmer am
motorisierten Strassenverkehr die Bedeutung der Ampelfarben kennt. Und
wenn nicht, dann soll er zuerst in eine Fahrschule gehen! Und ja. Das
darf man ihm auch genau so sagen.
Und um das klar zu stellen.
Ich erachte den Hinweis, dass ein ordentlich formatiertes Programm viele
Probleme zu vermeiden hilft, durchaus als einen brauchbaren Hinweis.
Oft genug erlebt.
Da hat ein Neuling ein Problem, dem er selbst nicht auf die Spur kommt.
Dann siehst du dir den COde an und das erste was du als Helfer machst,
das ist erst einmal für eine ordentliche Formatierung (Einrückung) zu
sorgen. Und plötzlich sieht derjenige das Problem ganz von sich aus. Der
einzige Unterschied: vorher war der Code Kraut und Rüben, nachher war er
ordentlich und konsistent formatiert und eingerückt.
>Sorry. Zu diesem Zeitpunkt ist das dann schon ein bisschen spät. Wir>reden nicht von einer Situation in der Verkehrserziehung, sondern vom>täglichen Leben. Und da würde ich, und der Gesetzgeber sieht das>genauso, eigentlich schon erwaren, dass ein aktiver Teilnehmer am>motorisierten Strassenverkehr die Bedeutung der Ampelfarben kennt. Und>wenn nicht, dann soll er zuerst in eine Fahrschule gehen! Und ja. Das>darf man ihm auch genau so sagen.
Hast du deine Texte mal selber gelesen. Bevor wir in einer Diskussion
über das Verkehrsrecht enden gebe ich dir lieber Recht damit du beruhigt
aufhören kannst.
>Und ordentliches Einrücken ist kein Luxus, sondern eine vitale Hilfe.>Es ist meiner Meinung nach kein Zufall, dass diejenigen mit dem>schlampigst geschriebenem Code auch immer diejenigen mit den dümmsten>Fehlern sind.
Ich werde an der Stelle aus der Diskussion aussteigen und meine Fragen
wieder an Professoren an der Uni stellen. Habe meine Erfahrung mit
Forenbeiträgen von Menschen die im richtigen Leben zu wenig Ansprache
haben gemacht und bereut.
Ich möchte nochmal betonen das mir durchaus einige hier sehr geholfen
haben!
Leider übertönt vom Geräusch der dummen.
@ Rufus Τ. Firefly
>Es tut mir leid - aber Dir kann Dir hier eindeutig nicht zugestimmt>werden.
Ich denke das Problem ist das hier die Frage,
"Warum bekomme ich diese Fehlermeldung, obwohl ich es deklariert habe?",
von vielen als,
"Hier ist mein Code ich würde euch bitten mir zu sagen was schlecht
geschreiben ist und was mann vieleicht besser oder schöner machen
könnte",
verstanden wird.
Ich denke daher kommt der ganze geistige Aufruhr.
Stefan schrieb:> "Warum bekomme ich diese Fehlermeldung, obwohl ich es deklariert habe?",>> von vielen als,>> "Hier ist mein Code ich würde euch bitten mir zu sagen was schlecht> geschreiben ist und was mann vieleicht besser oder schöner machen> könnte",>> verstanden wird.
Nein, wird es nicht.
Wenn der Fehler so aussieht
1
intmain()
2
{
3
inti;
4
5
while(irgendwas)
6
{
7
}
8
}
9
10
voidfoo()
11
{
12
i=5;
13
}
und du genau diese Fehlermeldung kriegst, dann ist das Problem nicht,
dass man dir in einer 5 seitigen Abhandlung erzählen muss, wie sich die
Sache mit dem Scope in C verhält, sondern dass du mit einer vernünftigen
Formatierung
1
intmain()
2
{
3
inti;
4
5
while(irgendwas)
6
{
7
}
8
}
9
10
voidfoo()
11
{
12
i=5;
13
}
und Rückverfolgung der Klammern ausgehend von der Stelle der
FEhlermeldung nach aussen ganz von alleine siehst, dass foo das i gar
nicht sehen kann, weil du dazu in main wieder in eine Klammer
hineingehen müsstest, was nicht das ist, wie die C Regeln funktionieren.
Der Sichtbarkeitsbereich einer Variablen ist immer der umschliessende
Block. Ausserhalb dieses Blocks existiert die Variable nicht. Und jetzt
gibt es da dann noch ein paar Sonderfälle, die dann eben eine 5 seitige
Abhandlung erfordern würden - die man sich aber auch sparen kann, weil
die wirklich in jedem noch so grindigem C-Buch beschrieben sind. Für
einen Neuling reicht es aber schon, wenn man einfach nur klar macht,
dass er einfach nur die {} Blockklammern von der Problemstelle 'nach
aussen' rückverfolgen muss und in diesem Zuge muss er auf die Variable
stossen können. Nur, wie machst du das denn, wenn du dauernd rauf und
runter scrollen musst und mit den Fingern mitzählen musst, damit du die
relevanten { } Klammern überhaupt erst mal findest? Was bei meinem
Trivialbeispiel noch im Kopf machbar ist, das artet ganz schnell zu
einem Albtraum aus, wenn der Code etwas größer wird.
Formatierung und Einrückung ist eine Hilfe, die dir selbst Dinge klar
macht und auch optisch anzeigt und nicht einfach nur Selbstzweck.
Karl H. schrieb:> Es ist meiner Meinung nach kein Zufall, dass diejenigen mit dem> schlampigst geschriebenem Code auch immer diejenigen mit den dümmsten> Fehlern sind.
Da kann ich Dir nur beipflichten.
Ist ja auch logisch: Wer schon bei der Formatierung (auch wenns nur eine
"technische" Sache ist) keine Sorgfalt anlegt, machts erst recht nicht
bei der Programmlogik.
Fazit:
Hingerotztes Programm = Schlechtes Programm.
(Ausnahmen bestätigen die Regel, aber wenn, gibt es da nur ganz wenige)
P.S.
Am besten ist das da:
1
intmain(void)
2
{
3
[...]
4
{
5
6
ISR(TCD0_OVF_vect)
7
{
8
[...]
9
}
Selbst über diese Handvoll Zeilen muss man schon viermal drüberschauen,
um den Fehler zu sehen. Ungekürzt jedoch ist es der Horror.
I geh jetzt aufd Wiesn.
Würd euch auch mal frische Luft empfehlen bei teils über 54000
Forenbeiträgen laut euren Profilen.
Das sind in 10 Jahren über 10 am Tag XD.
Ich glaub das ist nicht mehr gesund.
Viel Spaß noch!
Stefan schrieb:> Ich denke das Problem ist das hier die Frage,>> "Warum bekomme ich diese Fehlermeldung, obwohl ich es deklariert habe?",>> von vielen als,>> "Hier ist mein Code ich würde euch bitten mir zu sagen was schlecht> geschreiben ist und was mann vieleicht besser oder schöner machen> könnte",>> verstanden wird.>> Ich denke daher kommt der ganze geistige Aufruhr.
Junger Freund, wenn ich so lese, woran Du Dich hier stößt, fürchte ich,
Du bist zu empfindlich für eine Ingenieurslaufbahn.
In Deinem eigenen Interesse würde ich Dir raten, Deinen Standünkt zu
überdenken - beileibe nicht nur zum Thema C!
Stefan schrieb:> I geh jetzt aufd Wiesn.> Würd euch auch mal frische Luft empfehlen bei teils über 54000> Forenbeiträgen laut euren Profilen.> Das sind in 10 Jahren über 10 am Tag XD.>> Ich glaub das ist nicht mehr gesund.>> Viel Spaß noch!
Mit der Antwort bestätigst du bloß die Meinung der anderen User.
Aber auch dir vielen Spass an der frischen Luft, wird vielleicht auch
dir gut tun.
Und benutz doch dieses Forum bitte nicht mehr wenn du nach ein paar
Sätzen Kritik direkt die User beleidigen musst, die dir anfangs noch
helfen wollten.