Hallo,
ich möchte ein aktuelles Firmwareprojekt eines STM32F4xx, geschrieben in
C, in ein C++ Projekt migrieren, um für ein Firmwareupdate Klassen etc.
nutzen zu können. Es findet zudem ein Wechsel der IDE statt (CooCox zu
TrueStudio). Kompilierfähig ist bereits alles. Wenn ich ein C Projekt
unter TrueStudio anlege, funktioniert die Timing Funktion mit Systick
problemlos. Sobald ich ein C++ Projekt verwende, kompiliert auch alles
ohne Probleme, beim Debuggen bleibt das Programm aber in der Delay
Funktion hängen.
Die Variable Systick_Delay ist als
1 | static volatile uint32_t Systick_Delay;
|
in der systick.cpp Datei angelegt.
Code für die µs Delay Funktion:
1 | void delay_us(volatile uint32_t delay)
|
2 | {
|
3 | Systick_Delay = delay;
|
4 |
|
5 | while(Systick_Delay != 0);
|
6 | }
|
Initialisierung des Systicks:
1 | void systick_init(void)
|
2 | {
|
3 | RCC_ClocksTypeDef RCC_Clocks;
|
4 |
|
5 | // alle Variablen zurücksetzen
|
6 | Systick_Delay=0;
|
7 |
|
8 | RCC_GetClocksFreq(&RCC_Clocks);
|
9 | SysTick_Config((RCC_Clocks.HCLK_Frequency / 3000000));
|
10 | }
|
Die Delay Funktionen für die Millisekunden und Sekunden sind aus der µs
- Funktion abgeleitet.
Der Systick Handler sieht folgendermaßen aus:
1 | void SysTick_Handler(void)
|
2 | {
|
3 | //Tick für Delay
|
4 | if(Systick_Delay != 0x00)
|
5 | {
|
6 | Systick_Delay--;
|
7 | }
|
8 | }
|
Hat irgendjemand eine Idee, was C++ stören könnte, sodass die Delay
Funktion plötzlich nicht mehr funktioniert? Ich bin mittlerweile total
ratlos.
Ich habe bereits die CooCox - Standardkonfiguration, die beim erstellen
des Projekts angelegt wird, komplett in TrueStudio übernommen, habe die
systick - Dateien als .c deklariert und mit
included, habe alle Clock Settings incl. PLL überprüft, aber ich finde
einfach keinen Fehler.