Pic 18F46J50 exp() beinflusst timer

Gast #1699811
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
(Firma: Promaxx.net) #1699828
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...
Gast #1699987
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren