www.mikrocontroller.net

Forum: Compiler & IDEs Problem mit parity.h


Autor: Jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter Dannegger
Danke für die Hilfe, es funktioniert.

    Gruss
      Jack

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.