Forum: Mikrocontroller und Digitale Elektronik Probleme mit statischen Methoden/Membern + IRQ_Handler


von Daniel F. (franken_3)


Lesenswert?

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ß

von Jim M. (turboj)


Lesenswert?

Poste bitte mal die Fehlermeldungen komplett.

von Daniel F. (franken_3)


Lesenswert?

||warning: command line option '-std=c99' is valid for C/ObjC but not for C++ 
[enabled by default]|
||warning: command line option '-std=c99' is valid for C/ObjC but not for C++ 
[enabled by default]|
src\InterruptHandlers.cpp||In function 'void TIM6_DAC_IRQHandler()':|
src\InterruptHandlers.cpp|50|error: 'myNamespace' has not been declared|
||=== Build finished: 1 errors, 2 warnings (0 minutes, 0 seconds) ===|


Wenn ich die Header-Datei in welcher ich die Klasse angelegt habe mit 
einbinde in die InterruptHandler.c Datei, kommen keine Fehler mehr aber 
ich kann das Programm nicht mehr laden/Debugen. Scheint also auch was 
faul zu sein.

Ich muss gleich zugeben, das ich mit statischen Methoden und 
Membervariablen zuvor noch nie was programmiert habe und daher nicht so 
sehr viel Ahnung habe.

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.