Doppelter Funktionsaufruf beim AT90CAN128

OP #365962
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
Angehängte Dateien:
Gast #365963
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
OP #365965
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
Gast #365966
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.