Hallo habe ein Problem mit der Headerdatei parity.h. Wie kann ich diese beim Empfang oder Senden von Daten verwenden. Wenn ich der Funktion "parity_even_bit(val)" einen Wert übergebe, fehlt danach im Listing diese Funktion. Wie kann ich nun das Parity-Bit prüfen? Kleines Beispiel wäre gut. Gruss Jack
Die ,,Funktion'' ist in Wirklichkeit ein C-Präprozessormakro, d. h. der erzeugte Code dafür wird life an der entsprechenden Stelle im Programm hinterlegt. Damit kannst Du natürlich im Listing keine entsprechende Funktion sehen. Das hättest Du übrigens durch Nachsehen im entsprechenden Headerfile schnell selbst erkennen können.
Hallo Jörg Wunsch aber selbst im AVR-Studio mit der Simulation der Hex-Datei wird diese nicht aufgerufen. Mein Problem liegt beim Aufrufen des Makros. Ich übergebe ihr einen Wert und weis nicht wie ich das Parity-Bit nun prüfe. Was und wie bekomme ich etwas zurück? Gruss Jack
"Was und wie bekomme ich etwas zurück?" Du bist wohl sehr neu in der C-Programmierung ? Der Rückgabewert einer Funktion ist typischer Weise die Funktion selbst, außer sie ist vom Typ "void". Und wenn Du diesen nirgendwo zuweist, ist es auch klar, daß sie komplett wegoptimiert wird. Peter
P.S.: Bei Macros kann man auch die Parameter zur Rückgabe mißbrauchen. Da das aber sehr fehlerträchtig ist, sollte man es besser nicht machen. Peter
Der Makro gibt natürlich in der Tat einen Wert zurück, d. h. er evaluiert zu einem Ausdruck, den man auf der rechten Seite einer Zuweisung benutzen kann. Benutzt habe ich ihn auch noch nicht, aber der Makrocode suggeriert mir, daß er den Wert 1 zurückgibt, wenn der übergebene Wert gerade Parität hat, den Wert 0 sonst. Bevor ich all das mov/xor/swap/lsr dort wirklich verstehe, würde ich das lieber über einem Satz bekannter Eingabewerte simulieren und mir das Ergebnis angucken. :-) p. s.: Ja, er ist noch nicht dokumentiert. Steht auch in doc/TODO im Sourcecode drin, daß dies noch zu tun ist. Wenn das also jemand ausprobiert hat, nehmen wir auch noch Dokumentation dafür entgegen...
Hallo Peter Dannegger 1. Ja ich bin neu in C 2. Was ist hier falsch bei meiner Deklaration #include <avr\io8535.h> #include <avr\parity.h> char parity_even_bit(char val); char Parity; void main(void) { Parity=parity_even_bit(3); } Gruss Jack
Ich glaube mal, für ein Macro darfst Du keinen Prototypen anlegen, da es ja keine echte Funktion ist. Also: #include <avr\io8535.h> #include <avr\parity.h> // char parity_even_bit(char val); <- Problem !!! char Parity; void main(void) { Parity=parity_even_bit(3); } Und Du solltest dann mit "Parity" irgendwas machen, z.B. auf einen Port ausgeben. Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.