Hallo, Ich verwende AT90CAN128 und habe dazu eine rein theoretische Frage: Szenario: Auf dem CAN-Bus kommt ein Frame zu dem es ein passendes MOb gibt und ein Hit wird erkannt. Die IDT, IDE DLC weden geupdated und die 8 Daten-Bytes werden im Register des MOb abgelegt. -> RXOK Was passiert nun wenn ein weiterer Frame mit der gleichen ID, jedoch anderen Daten, kommt bevor ich in meinem Programm die Daten des alten Frame ausgelesen habe? Werden die Register einfach überschrieben? Oder bleibt der Frame im Receive-Buffer bis das das Register des MOb wieder frei ist?
Die Message-Box wird erst wieder durch erneutes beschreiben von CANCDMOB freigeschaltet.
Das MOb wird also mit Setzen des RXOK disabled. Also sehe ich es richtig, dass weitere Frames der gleichen ID bis zum Auslesen und Reset von CANCDMOB einfach ignoriert werden?
Ja, solange die Messsage-Box nicht wieder auf Empfang geschaltet wird nimmt sie halt keine Daten an. Das dürfte sich aber in der Praxis eher nicht so auswirken das Botschaften verloren gehen, der CAN ist ja doch recht langsam. Eine CAN-ISR die einfach nur die Daten aus dem MoB schaufelt ist in weniger als 2µs fertig. Wie kurz kann ein Frame sein? Ich komme auf mindestens 52 Bits bei einem Byte Daten, also 52µs bei 1MBit. 8 Byte Nutzdaten und 500kBit wären dann 216µs. Also richtig viel Zeit dafür zu sorgen, dass die Daten verstaut sind. 100% Buslast hat man dann ja auch nicht.
Man kann auch mehrere MOBs auf den gleichen ID setzen. Allerdings wird dann immer der unterste freie befüllt, d.h. die Reihenfolge ist nicht garantiert. Man kann dann mit dem Timestamp feststellen, welcher MOB die früheste Nachricht enthält.
Man kann auch mehrere belegen, klar. Aber wofür? Wenn man es nicht schafft eine MoB in >> 50µs frei zu machen, dann werden auch drölf MoBs früher oder später voll sein.
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.