Servus Ich habe mal ne Frage wegen den Gültigkeiten von Nachrichten die übern CAN Bus gehen sollen. Angenommen beim Sender staut sich die Sendewarteschlange und eine im Puffer befindliche Nachricht muss warten. Es gibt ja Situationen in denen eine Nachricht ihre Gültigkeit verliert, richtig? Wie macht man das in der Praxis? Gibt es zu jedem Identifier eine Look-up-Tabelle wo die Gültigkeit einer jeden ID gespeichert ist? gruß S
Bei CAN ist das nicht so. Bei einem Protokoll, dass über CAN überträgt, kann das so sein. Hast du noch konkretere Angaben was du vor hast?
Soll ne Art Gateway/Bridge zwischen 2 CAN Netzen werden. Es gibt nen bestimmten Zyklus in dem der Datenaustausch erfolgt. Daher sammeln sich CAN Nachrichten an. Und ich dachte, ich muss jene aus der Warteschlange löschen, die eh keine Gültigkeit mehr haben.
Hat das vielleicht was mit dem "Earliest Deadline First" gemeinsam?
Se wrote: > Angenommen beim Sender staut sich die Sendewarteschlange und eine im > Puffer befindliche Nachricht muss warten. Wenn Du eine Sendewarteschlange haben willst, mußt Du sie in Software emulieren. Der CAN-Bus selber hat keine Warteschlange, alle Nachrichten werden streng nach Priorität (lowest ID first) gesendet. Nachrichtenm die veralten können, sollte man eben nicht in eine Warteschlange packen, sondern einfach direkt in einen der 15 Datenpuffer stellen. Dann setzt man einen Timeout auf, der dann diesen Puffer wieder freigibt, wenn die Nachricht noch nicht gesendet wurde. Dabei auf die richtige Reihenfolge achten, damit nicht versehentlich die Nachricht zerstört wird, wenn sie gerade gesendet wird. Peter
Dort in den einzelnen Datenpuffern kann es aber auch sein, dass mal nicht gesendet wird und neue Daten nachrücken. Du meinst, es mit einem Timeout zu lösen. Das ist OK. Wenn ich dennoch ein Earliest-Deadline-Fist Verfahren einbaue, wie kann ich dann sagen welche ID welche Deadline hat? Weis das nur der "Erbauer" des CAN Netzes?
Se wrote: > Wenn ich dennoch ein Earliest-Deadline-Fist Verfahren einbaue, wie kann > ich dann sagen welche ID welche Deadline hat? Wenn die Nachrichten nach ID gesendet werden dürfen, kannst Du soviele Nachrichten einstellen, wie der CAN-Chip Sendepuffer hat. Wenn Du eine andere Reihenfolge wünschst, mußt Du einen Softwarepuffer programmieren und darin eine Dir genehme Sortierung vornehmen. Es kann dann aber nur ein Sendepuffer des CAN-Chips verwendet werden. Der Timeout muß nun prüfen, ob die Nachricht noch im Softwarepuffer ist oder schon im Senderegister. Das Senderegister kann man dann disablen, muß aber noch testen, ob gerade kein Senden erfolgt (Flag testen). Ist das Senden beendet, kann das nächste Paket aus dem Softwarepuffer geholt werden. Peter
Wenn der Bus dauernd am Anschlag laeuft, dh dauernd verstopft ist sollte man sich ueberlegen, ob man noch auf der richtigen Spur ist. Allenfalls sollte man die Geschwindigkeit um eine Groessenordnung erhoehen (bringt nur was bei grossen Blocklaengen), einen anderen Bus waehlen, einen zweiten Bus einziehen, das Meldungskonzept ueberdenken. Ich fuehl mich nicht mehr wohl, wenn mein Bus mehr als 30% belastet ist. Ist natuerlich auch eine Sache der Arbitrierung. Wenn die Arbitrierung sauber ist, kann man dauernd auf 100% gehen.
Vergass noch : Solange eine Meldung innerhalb einer maximale Wartezeit abgeliefert wird geht's noch. Unbrauchbar wird's wenn keine maximale Wartezeit mehr gibt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.