Hallo,
ich habe heute versucht auf meinem STM32F4 Board eine statische
Klassenmethode in einer Timer-Interrupt-Routine aufzurufen.
Leider schaffe ich es einfach nicht, das es Fehlerfrei übersetzt wird
bzw. wenn es ohne Fehlermeldungen übersetzt wird startet der Debuger
nicht mehr.
Ich möchte gerne 3 ADC-Werte auslesen und diese in einem geschützten
(private) Bereich der Klasse ablegen. Die IRQ-Handler befinden sich in
einer anderen Quelldatei
1 | #ifndef CONTROL_H_INCLUDED
|
2 | #define CONTROL_H_INCLUDED
|
3 |
|
4 |
|
5 | //SPL laden
|
6 | #include "stm32f4xx_conf.h"
|
7 | //#include "globale.h"
|
8 |
|
9 | //uint16_t CAnalogConvert::ADC1_Val;
|
10 |
|
11 |
|
12 | namespace myNamespace
|
13 | {
|
14 |
|
15 |
|
16 | class CAnalogConvert
|
17 | {
|
18 | private:
|
19 | static uint16_t ADC1_Val;
|
20 | static uint16_t ADC2_Val;
|
21 | static uint16_t ADC3_Val;
|
22 |
|
23 | public:
|
24 | static void updateADC(void)
|
25 | {
|
26 | ADC1_Val = ADC_GetConversionValue(ADC1);
|
27 | }
|
28 |
|
29 | };
|
30 |
|
31 | uint16_t CAnalogConvert::ADC1_Val = 1;
|
32 | uint16_t CAnalogConvert::ADC2_Val = 1;
|
33 | uint16_t CAnalogConvert::ADC3_Val = 1;
|
34 |
|
35 | }//end namespace ibg
|
36 |
|
37 |
|
38 |
|
39 | #endif /* CONTROL_H_INCLUDED */
|
1 | extern "C" void TIM6_DAC_IRQHandler(void)
|
2 | {
|
3 | TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
|
4 |
|
5 | myNamespace::CAnalogConvert::updateADC();
|
6 |
|
7 | //Test
|
8 | GPIO_ToggleBits(GPIOD, GPIO_Pin_13);
|
9 |
|
10 | }
|
Kann das sein, das man im Interrupt vielleicht nicht auf C++ Elemente
zugreifen kann da ja EXTERN "C" ??
Danke schon mal.
Gruß