CAN MOB durchrotieren und alles löschen inkl. CAN-MSG nötig?

Gast #6951614
Lesenswert?
• ▲
▼
Hallo, ich habe schon einige CAN Beispiele gesehen wo zu Beginn in einer 
Schleife die MOBs durchrotiert werden und einige Register gelöscht 
werden, dann gibt es eine weitere verschachtelte Schleife die jeden der 
8 Messagebuffer durchrotiert und löscht.

Ich wollte mal fragen, ob das wirklich alles nötig ist, ich benutze nur 
1 MOB und wollte jede CAN Nachricht sobald der RX Interrupt kommt 
abholen, hier sollte es zeitlich keine Probleme geben dass ich den 
Buffer überhaupt benötige. Da die Nachrichten sehr langsam übertragen 
werden.

Kann mir jemand sagen ob das alles nötig ist. Ohne das ein Interrupt 
ausgelöst wird, frage ich keinen CAN-Nachricht ab, also sollte doch 
falls da vorher Müll drinstand, es egal sein ob Sie überschrieben wird. 
Oder wird keine neue Nachricht dort abgelegt wenn schon etwas drinsteht?

Es geht um die AVR CAN µC z.B. AT90CAN, ATMega16/32/64M1,...
Gast #6954730
Lesenswert?
• ▲
▼
Das ist bestimmt das hier:
1
for (i=0; i<6; i++)
2
{
3
 CANPAGE = (i<<4); // select MOb
4
 CANCDMOB = 0x00; // disable MOb
5
 CANSTMOB = 0x00; // clear status
6
 CANIDT1 = 0x00; // clear ID
7
 CANIDT2 = 0x00;
8
 CANIDT3 = 0x00;
9
 CANIDT4 = 0x00;
10
 CANIDM1 = 0x00; // clear mask
11
 CANIDM2 = 0x00;
12
 CANIDM3 = 0x00;
13
 CANIDM4 = 0x00;
14
 for (j=0; j<8; j++)
15
 {
16
  CANMSG = 0x00; // clear data
17
 }
18
}

Diese Register werden beim Reset nicht zurück gesetzt.
Da kann also auch irgendwas drin stehen.
Und wenn man einen Bootloader einsetzt erst recht was sinnvolles.

Gegenfrage, was bringt das die paar Zeilen da nicht drin zu lassen?
Die werden doch nur einmal zum Programm-Start ausgeführt und kosten doch 
quasi keine Laufzeit oder Speicher.

Und dann gibt es immer ein nächstes Projekt.
Gast #6955168
Lesenswert?
• ▲
▼
klar kann man machen, kostet auch keine Laufzeit oder Speicherplatz.

Ich programiere es in Assembler und habe das kleine Problem das dies im 
AVR-Studio 4.19x nicht simuliert wird. Ist für mich wie ein Blindflug da 
ich meine Programme immer vorher ausgiebig im Simulator durchteste.

Nun gut ich habe ja diese 6er Schleife für meinen 6 MOBs und in jeder 
Schleife habe ich 8 mal nach einander das Löschen des Buffers drin also 
ohne Schleife. Ob das autoimcrement jetzt funktioniert oder nicht ist 
halt ein Ratespiel.

Im 7er Studio komme ich gar nicht zum simulieren da verlangt er nach 
einem Debugger bzw. Programmiergerät.

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.