Forum: Compiler & IDEs Problem mit parity.h


von Jack (Gast)


Lesenswert?

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

von Jörg Wunsch (Gast)


Lesenswert?

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.

von Jack (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

"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

von Peter D. (peda)


Lesenswert?

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

von Jörg Wunsch (Gast)


Lesenswert?

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...

von Jack (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Jack (Gast)


Lesenswert?

Hallo Peter Dannegger
Danke für die Hilfe, es funktioniert.

    Gruss
      Jack

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
Noch kein Account? Hier anmelden.