also irgendwann versteh ichs natürlich auch nicht mehr...
ich habe doch geschrieben, dass ich ich die Interruptleitung nur mitgelegt habe, um die Kompaitiblität zum PC zu erhalten und trotzdem einfach REchenzeit bei den Slaves zu sparen.
Das was hanni beschreibt ist genau das was ich mit dem 9. Datenbit meine.Das heisst im Datenblatt eben MPCM(MultiProcessorCommunicationMode). Also genau das wonach du suchst.
DA hast du deinen echten RS485 Bus. Nur zwei Leitungen. Nur beim Senden der Adresse springen die Slaves (und zwar alle) für ein Byte in die Empfangsroutine. Nur der, der auch angepsrochen wurde, hat dann kurz etwas mehr zu tun.
Nichts anderes machen Controller am Profibus. Entweder man hört die ganze Zeit jedes Byte am Bus ab, oder man definiert ein Zeichen bzw. Merkmal (9. DAtenbit) welches eine Adresse kennzeichnet. Dadurch spart man dann uach enorm REchenzeit bei den Slaves.
Ich verstehe jettzt nicht ganz, was daran nicht echt sein soll (außer die Interruptleitung, die ich aber auch als "nicht jedermanns Sache" beschreiben habe, und gleich im anschluss das 9. DAtenbit erwähnt habe)
Zu deiner Frage:
eben gerade das muss verhindert werden. Du solltest es vermeiden, dass aus einer Interruptroutine heraus wieder ein Interrupt ausgelöst werden kann (zumindest wenn du dies nicht bewusst machst). Dass bedeutet im klartext Interrup sperren, entweder gleich global alle oder nur die entsprechenden (Datenblatt).Wenn während dieser IRQ-Routine nun wieder ein IRQ ausgelöst wird,
und währen diesem wieder und wieder.
Irgendwann muss doch der Speicher für die Rücksprungadressen (Return) mal platzen.
Andere Möglichkeit ist, deine Interruptroutine so kurz zu halten, dass diese der Auslösefrequenz hinterherkommt. Ich präferiere jedoch die erste Variante, da dort probleme von vorneherein ausgeschlossen werden.
Ansonsten, wenn ud dies nicht beachtest, läuft dir irgendwann der Stack über. DAs ist richtig. Dann gibts Chaos im Controller.
Hoffe, dass jetzt Probleme beseitigt sind.
Gruß
Baui







Zitieren

Lesezeichen