Problem mit parity.h

Gast #78078
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
Gast #78079
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.
Gast #78080
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
#78081
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
Gast #78083
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...
Gast #78084
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
#78085
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren