Was genau geht denn nicht?
Compilerfehler?
Gar keine Ausgabe?
Falsche Ausgabe?
Funktioniert eine simple Textausgabe?
Vielleicht kannst du mal genaueres schreiben,
so wird es eher Kristallkugel-Lesen...
Martin
Beim Einlesen eines Ports musst du das PINx Register benutzen und nicht
das PORTx Register.
Binäre Konstanten gehen wohl, zumindest beim GCC mit vorhandenem Patch.
Und Die Sache mit uPortB wird vermutlich auch genau den gleichen Code
kompilieren, wie das andere.
Trotzdem Sachen wie 0birgendwas gehören nicht zum C-Programmieren.
Schliesslich ist er Anfänger und will bestimmt Ansi-C und nicht
irgendeinen "Frickler"-Dialekt lernen.
Stephan wrote:
> Jeder C-Compiler heisst für dich wohl gcc?
Der GCC kann das auch noch gar nicht so lange...
Abgesehen davon kann die Binärdarstellung in einigen Fällen Sinn
machen, wenn es tatsächlich um Bitmuster geht. Und mit Bitmustern hat
man im µC-Bereich des öfteren zu tun. (Ich selbst nutze die
Binärschreibweise allerdings so gut wie gar nicht...)
Einfach mit der hexadezimalen Darstellung vertraut machen.
Die kann wirklich jeder C compiler und nach etwas Übung "sieht" man
hinter jeder Hex-Zahl auch das Bitmuster.
Geht mir jedenfalls so.
Btw. sollten die Magic Numbers durch Defines ersetzt werden.
Stephan wrote:
> Ich habe nicht gesagt das sowas sinnlos ist. Nicht Standardkonform zu> programmieren ist jedoch sehr wohl NICHT SINNVOLL.
In diesem Zusammenhang widersprichst Du Dir in diesem Satz selbst...
Es gibt auf 8-Bit-µC-Plattformen mittlerweile praktisch keinen Compiler
mehr, der das nicht kann. Und angesichts der sonstigen besonderen
Anforderungen bei Embedded-System-Programmierung sind ein paar
nicht-Standard-Erweiterungen sowieso fast unumgänglich. Und zumindest in
der Hinsicht ist der AVR-GCC noch harmlos.
Ich bin auch ein Freund weitgehend standardkonformer Programmierung,
aber es gibt nunmal je nach Plattform Dinge, die ein Compiler, dessen
Sprachstandard sich auf die Programmierung ganz anderer Plattformen (PC)
bezieht, nicht bringt. Auf einem PC jucken einzelne Bits praktisch
niemanden, auf einem 8-Bit-µC aber durchaus.
> Jeder C-Compiler heisst für dich wohl gcc?
Da ich Linux nutze und ab, zu in meiner Freizeit ATmegas programmiere
und früher unter Windows DevCPP benutze habe... Ja. ;-)
Die Verbreitung habe ich aber wirklich überschätzt, der Compiler vom
CodeComposer meckert, Visual Studio meckert...
Und das man dem Standard folgen sollte ist auch richtig.
> Abgesehen davon kann die Binärdarstellung in einigen Fällen Sinn> machen, wenn es tatsächlich um Bitmuster geht. Und mit Bitmustern hat> man im µC-Bereich des öfteren zu tun. (Ich selbst nutze die> Binärschreibweise allerdings so gut wie gar nicht...)
Ich früher nur am Anfang, jetzt ist es dann doch immer Hex und dann
auch noch oft über ein define. ;-)
@ Bastler (Gast)
Die geschweiften Klammern braucht man nicht, habe ich so auch noch nie
gesehen... würde mich wohl eher verwirren.
Gast wrote:
> Einfach mit der hexadezimalen Darstellung vertraut machen.> Die kann wirklich jeder C compiler und nach etwas Übung "sieht" man> hinter jeder Hex-Zahl auch das Bitmuster.
Das ist in diesem Fall sicher die beste Methode, die ich selbst auch
empfehle.
> @ Bastler (Gast)> Die geschweiften Klammern braucht man nicht, habe ich so auch noch nie> gesehen... würde mich wohl eher verwirren.
Ich beziehe mich auf die Klammern in der switch-case-Anweisung... nicht
auf die anderen. ;)
Der Hauptfehler dürfte sein, daß er davon ausgeht, daß alle anderen Pins
0 sind.
Wenn nur ein Pin interessiert, dann darf man auch nur diesen einen
testen, d.h. switch ist hier völlig fehl am Platze.
Z.B. so:
Wenns wirklich Bitmuster sein müssen (und ja, auch dafür gibt es absolut
rechtfertigende Umstände):
1
for i in `seq 0 255`; do echo -n "#define B"; for b in `seq 7 -1 0`; do if [ $(($i & (1 << $b))) -gt 0 ]; then echo -n "1"; else echo -n "0"; fi; done; echo -e "\t\t$i"; done