www.mikrocontroller.net

Forum: Compiler & IDEs Doppelter Funktionsaufruf beim AT90CAN128


Autor: Walter Wummpe (wummpe)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Moin

ich benutze 2 AT90CAN128 und möchte mehrere Bytes über den CAN-Bus
verschicken. Dazu versende ich immer 3 Datenbytes mit einigen
Zusatzinformationen (Byte Nummer) zum 2. AT90CAN128. Dieser bestätigt
dem Empfang und es werden die nächsten verschickt.

Das Problem ist, dass die Funktion (void konf_datei_senden(void)) ab
und zu doppelt ausgeführt wird, allerdings nicht doppelt aufgerufen
wird. So kommt es dazu, dass 2 oder 3 Bytes verloren gehen.

Hier mal ein kleines Beispiel, der Code ist im Anhang.

. => µC empfängt die Empfangsbestatigung und ruft die Funktion
konf_datei_senden() auf.

-{Zahl} => Positionsnummer der verschickten Dateien

.-3.-6.-9.-12.-15.-18.-21.-24.-27.-30.-33.-36-38.-41.

Wie man sieht wird beim 36 Byte die Funktion nachmal ausgeführt ohne
das eine Empfangsbestätigung vorhanden ist.
Hatte jemand schonmal so ein ähnliches Problem?

Gruß
Wummpe

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schmeiß mal schnell cli/sei aus den Interrupts raus, das ist Mumpitz.
Sollte eigentlich jeder wissen, der mal ein AVR-Datenblatt in der Hand
gehalten hat.


Daß Bytes verloren gehen, ist vollkommen normal, wenn Du so einen
riesen Zeitvernichter wie printf im Interrupt ausführst.

Solche Programme funktionieren nie !

Wenn Du Glück hast, benötigt printf den UART-Interrupt und Du hast nen
prima Deadlock.


Peter

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit jetzt nicht nochmal alles durchgekaut werden muss, lies mal z.B.
http://www.mikrocontroller.net/forum/read-2-351284.html

Autor: Walter Wummpe (wummpe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@peter dannegger:
cli() und sei() habe ich erst reingepackt als es Probleme gab, genauso
wie die printf Anweisung. Diese habe ich nur zum Auffinden des Fehlers
reingepackt. Aber auch ohne diese Sachen kommen die Daten nicht richtig
an.

@johnny.m:
Ich weiss nicht wie mir der Beitrag helfen soll. Die ISR vom CAN wird
nicht zweimal aufgerufen, nur die Funktion die die Daten versendet wird
2x ausgeführt.

wummpe

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wumpe

"Aber auch ohne diese Sachen kommen die Daten nicht richtig an."


Und warum führst Du uns dann erst auf die falsche Fährte und schickst
nen aufgeblähten Code ?

Denkst Du, sowas macht Spaß ?


Außerdem schicken Leute in der Regel immer genau das Codefragment an
dem es garantiert nicht liegt.

Und dann natürlich eins, das nicht mal compilierbar ist.

Sehr gerne wird auch was geschickt, was nicht mit dem getesten Code
übereinstimmt.

Selbst wenn man nur einen Kommentar rausnimmt, muß man es nochmal
testen, ob der Fehler immer noch da ist.

Und wenn 2 MCs beteiligt sind, muß man natürlich auch beide Programme
schicken.


Also mir ist die Lust vergangen.


Peter

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.