Forum: Mikrocontroller und Digitale Elektronik CAN MOB durchrotieren und alles löschen inkl. CAN-MSG nötig?


von CAN_Newbie (Gast)


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,...

von Peter D. (peda)


Lesenswert?

Es reicht natürlich, wenn Du ein MOB zum Empfangen und ein MOB zum 
Senden initialisierst.
Für Empfangs-MOBs müssen die Daten nicht genullt werden, die werden ja 
eh überschrieben.

von Rudolph (Gast)


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.

von Guest (Gast)


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.

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
Noch kein Account? Hier anmelden.