Hallo, ich berechne in einer timer.cpp paar Werte, diese sind konstant. Ich benötige jedoch eine Konstante davon in meinem Hauptprogramm. konkret: isr_refresh_Time ganz unten Je mehr ich über das extern und static lese umso weniger verstehe ich. Gehe ich richtig in der Annahme das es funktioniert, wenn ich in main.cpp die Deklaration so wiederhole?
1 | >> main.cpp << |
2 | |
3 | extern float isr_refresh_Time; |
Wenn diese Variable nicht konstant wäre, wäre dann jeder Zugriff darauf egal wo immer auf den aktuellen Wert möglich egal wo der Wert geändert würde?
1 | >> time.h << |
2 | |
3 | #pragma once
|
4 | |
5 | |
6 | //------------------------------------------------------------------------
|
7 | >> time.cpp << |
8 | |
9 | #include "timer.h" |
10 | |
11 | // Berechnungen für Timer Einstellung
|
12 | constexpr float Aufl = 1.0; // einstellbare Auflösung |
13 | constexpr float fCPU= 1.0*F_CPU/1000000; // [MHz] |
14 | |
15 | // ISR Zeit
|
16 | constexpr float microS_pro_ISR (uint8_t L, uint8_t R) { |
17 | return (1000.0/(L-R)); |
18 | }
|
19 | |
20 | // CPU Takt/(1/benötigte ISR Intervallzeit[µs]/Auflösung)/Prescaler)-1 und +0.5 gerundet
|
21 | constexpr uint16_t CompareMatch_TOP (float microS, float aufloe) { |
22 | return (uint16_t) ((fCPU/(1.0/microS/aufloe)/8)-0.5); |
23 | }
|
24 | |
25 | // echte Timer ISR Intervallzeit [µs]
|
26 | constexpr float ISR_refresh_Time (uint16_t TOP) { |
27 | return ((1.0*(TOP+1))*8.0/fCPU); |
28 | }
|
29 | |
30 | constexpr float micros_pro_isr = microS_pro_ISR (111, 66); |
31 | constexpr uint16_t compareMatch_TOP = CompareMatch_TOP (micros_pro_isr, Aufl); |
32 | extern constexpr float isr_refresh_Time = ISR_refresh_Time (compareMatch_TOP); |