Gast
#1593413
Hallo Zusammen, Ich wollte mir mal den Rat von ein paar erfahrenen Programmierern einholen bevor ich mein erstes größeres Projekt mit mehreren Interrupts in Angriff nehmen. Im folgenden versuche ich mal meine (geplante, skizzierte) Programmübersicht darzustellen. Anschließend stelle ich die eine oder andere Frage. Der µC meiner Wahl ist ein MSP430F2617. Hauptprogramm: while-Schleife: If(TimerB_flag gesetzt) {TimerB_Flag reset; Sensoren/Daten auslesen (SPI,I²C, seriell); Berechnungen durchführen; Daten ggf. auf SD_Karte(SPI); } If(Alert_flag gesetzt)Aktion; Interrupts: -TimerB setzt jede Sekunde kurz das TimerB_Flag (eine Zeile) -TimerB-Intervall für Setzen eines Alive_1 Signals auf PIN(500ms, eine Zeile) -TimerB-Intervall für Setzen eines Alive_2 Signals auf PIN (50ms, eine Zeile) - TimerB für Abfrage eines Pins mit Zeitstempel (Überprüfung, ob PIN rechtzeitig bedient wurde), ggf. Setzen eines Alert_Flags (ca. alle 600 ms, eine Zeile) - Interrupt auf normalem Interrupt-Pin (Hochzählen einer globalen Variable, eine Zeile) Nun die Fragen/Erläuterungen: 1. Ich wollte versuchen die Interrupts so klein wie möglich zu halten und größere "Arbeiten" in der main-Schleife zu erledigen (Übergabe von Flags, Hochzählen globaler Variablen). 2. Was passiert, wenn ich in der Schleife gerade meine Sensoren auslese (via SPI oder I²C) und just in diesem Augenblick ein Interrupt aufpoppt? Wird die Kommunikation genau dort fortgesetzt, wo sie unterbrochen wurde? Könnten dabei nicht Daten verloren gehen? Anm.:Die Sensoren müssen alle der Reihe nach ausgelesen werden, um danach Berechnungen durchzuführen. Ich hoffe mein Problem ist klar geworden und würde mich auf eine angeregte Diskussion freuen. Das Programm befindet sich, wie schon angedeutet, noch im Planungsstatus, damit ich Missverständnissen meinerseits einen Riegel vorschieben kann. Gruß Seb