-
        

Ergebnis 1 bis 3 von 3

Thema: TouCAN: CAN Nachrichten empfangen durch Polling

  1. #1

    TouCAN: CAN Nachrichten empfangen durch Polling

    Anzeige

    Hi,

    Ich habe folgendes Prblem: Ich möchte CAN Nachrichten empfangen ohne Interrupts zu verwenden. (Die Anwendung hat strikte Deadlines und darf daher nicht unterbrochen werden. Denn falls auf dem CAN Bus viele Nachrichten übermittelt werden, könnte die Anwendung ihre Deadlines eventuell nicht mehr unterschreiten.) Die Nachrichtenpuffer sollen von der Anwendung zyklisch abgefragt werden: liegt eine neue Nachricht im Puffer wird diese verarbeitet. Das Problem hierbei ist, ich kann Nachrichten "verpassen", d.h. es werden 2 Nachrichten in einen Puffer geschrieben der nur eine aufnehmen kann.
    Ich verwende einen MPC555 mit TouCAN Controller (mit 16 Nachrichtenpuffern). Ist es möglich diese Puffer so einzustellen, dass mehrere Puffer als Lesepuffer konfiguriert werden und diese nacheinander befüllt werden, so dass mehrere Nachrichten (anstatt einer) pro Zyklus gespeichert werden können? Wichtig dabei ist, dass alle Puffer alle möglichen eingehenden Nachrichten aufnehmen sollen, d.h. die Filtermaske für die Puffer auf 0x00000 steht. Dies ist wichtig, weil die Anwendung unterschiedlichste zur Laufzeit nicht bekannte Nachrichten empfangen und ggf. verarbeiten soll.

    Vielen Dank im voraus,
    Stefan

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.141
    Ich kenne zwar den Controller nicht, aber ganz ohne Interrupts wird's nicht gehen, wenn Du keine Nachrichten verpassen darfst.

    Ist das ganze denn so zeitkritisch, dass das reine Einlesen der Nachrichten in einen Puffer im µC schon zu lange dauern würde? Du musst ja im Interrupt die Nachricht nicht schon auswerten, dass könntest Du ja per Polling machen.

    Ansonsten könnte ich mir höchstens vorstellen, dass Du eine kleine Funktion schreibst, in der Du den Nachrichtenpuffer, der für die nächste zu empfangende Nachricht benutzt wird, einstellst. Diese Funktion rufst Du dann in allen Empfangs-Interrupts so auf, dass immer der nächste Puffer eingestellt wird. Spätestens nach der 16. Nachricht musst Du dann aber zwangsweise alle Nachrichten speichern, sonst geht was verloren.

    askazo

  3. #3
    Vielen Dank für die Idee,


    es ist nur nicht das Problem, dass Interrupts zu lange dauern würden, sondern dass der Controller zeitgesteuert ist.

    Ich habe das jetzt so umgesetzt, dass auf einem Puffer alle unbekannten Nachrichten gelesen werden. Diese Nachrichten werden analysiert und wenn sich das System für eine Nachricht interessiert wird dem Identifier dynamisch ein eigener Lesepuffer zugewiesen.


    stefan_m

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •