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,...
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.