Forum: Mikrocontroller und Digitale Elektronik Pic 18F46J50 exp() beinflusst timer


von Dirk (Gast)


Lesenswert?

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

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

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...

von Dirk (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.