Closed fabiansch closed 7 years ago
Guten Abend Herr Schimke,
die ISR kann nur eine Pulse Message schicken. Wenn sich zeitlich zum Beispiel zwei Bits von Port B ändern, dann muss die ISR dies in einer Pulse Message übertragen. Was ist den eigentlich, wenn sich an Port B und den Input-Pins von Port C etwas gleichzeitig ändert? Da muss man mal schauen, wie die Karte die Interrupts behandelt.
Nun zum Thema "Die SW Schicht soll nichts über die Bitlogik" wissen. Diese Sicht teile ich. Da kann man mehrere Wege gehen: (1) Man macht das Demultiplexing in die logischen Events in der ISR. Das widerspricht der Regel "Mache die ISR möglichst klein und einfach". Warum, besprechen wir demnächst in der VL.
(2) Man macht das Demultiplexen in der HAL. Hier gibt es wieder zwei Möglichkeiten. Zum einen kann die HAL entsprechende Funktionen anbieten. Oder in der HAL läuft ein Thread, der die Pulse Messages der ISR erhält und diese demultiplext. Dieser Thread kann dann z.B. mehrere Pulse Messages an einen Chanel schicken. Diese Kommunikation kann auch auf andere Weise ablaufen.
Klärt das die Frage?
Mit freundlichen Grüßen
Franz K.
Moin Herr Korf,
ist die Annahme korrekt, dass es von der Sensorik nur zwei unterschiedliche Pulse Message Typen gibt, die von der HAL an die Softwareschicht gesendet werden?
Die Softwareschicht generiert dann aus dem Vergleich der alten Werte der entsprechenden Ports Signale wie z.B. light_barrier_0_interrupted?
Dem spricht entgegen, dass die Softwareschicht nichts über die Bitlogik wissen sollte, aber kann man in einer ISR denn mehrere Pule Messages abschicken?
Liebe Grüße, Fabian Schimke