Hallo Zusammen, Folgendes Problem: - Task Betriebssystem alle 10ms, Timer0-gesteuert. - Timer3 löst mittels Überlauf alle 300µs ein Interrupt aus. Im Interrupt timer3 wird nur ein Pin-Zustand abgefragt. Aktiviere ich nun in der 10ms task eine exp() Funktion aus math.h wird der timer3 nicht mehr alle 300µs ausgelöst, sondern minimal nur noch ca. alle 350µs. Die e-funktion wird noch nicht einmal ausgeführt sondern nur mit-compiliert (andere Vorbedingung fehlt) (selbe habe ich mit timer0 getestet, gleiches Verhalten) Woran kann das liegen? Stack Falsch eingestellt? Dauert restore nach Interrupt so lange? (float werte). Compiler mcc18.exe von microchip free version 3.22
Ich befürchte, Du spielst mit dem Gedanken, innerhalb der Interrupt-Routine eine EXP-Funktion einzusetzen. 6 - setzen ! Das kann das langsame zeitunkritische Hauptprogramm machen. Die INT-Routinen müssen fix verlassen werden um Platz für andere zu schaffen! Die INT-Routine kann ein Flag setzen, das das Hauptprogramm abfragt und dann die Berechnungen anstellt...
Danke für die Antwort. Die exp() läuft in der 10ms Task die ausserhalb der Interruptvektoren liegt. Wie gesagt ich compiliere die Funktion nur mit. Innerhalb der Task wird diese nicht ausgeführt da Sie innerhalb einer if() Abfrage liegt. Das Ergebnis ist halt das der Interrupt scheinbar später ausslöst als wenn ich die Funktion nicht mit compiliere. Gruß Dirk
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.