Eclipse Funktion wird nicht aufgerufen STM32 ARM

Gast #4572358
Lesenswert?

Hallo Zusammen,

ich hab ein kleines Problem. Ich hab Eclipse mit ARM GCC und der STM 
Standart Lib installiert. Als Plattform hab ich von der Uni momentan ein 
Nucleo STM32 F411RE.

Es geht um folgendes, ich will einfach nur eine LED am Port A Pin 5 
Blinken lassen. Mit folgendem Code funktioniert es auch:
1
#include <stm32f4xx_gpio.h>
2
#include <stm32f4xx_tim.h>
3
#include <stm32f4xx_rcc.h>
4
#include <misc.h>
5

6

7
int main()
8
{
9

10
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
11

12
  GPIO_InitTypeDef gpioStructure;
13
  gpioStructure.GPIO_Pin = GPIO_Pin_5;
14
  gpioStructure.GPIO_Mode = GPIO_Mode_OUT;
15
  gpioStructure.GPIO_Speed = GPIO_Speed_50MHz;
16
  GPIO_Init(GPIOA, &gpioStructure);
17

18
  GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET);
19

20

21
    for (;;) {
22
      GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET);
23
      for (int i = 0; i < 5000000; i++);     // Warte damit man es Blinken sieht
24
        GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
25
        for (int i = 0; i < 5000000; i++);
26

27
    }
28

29
}

Wenn ich jetzt aber meine Initialisierung in eine Funktion pappe, wie 
folgt:
1
#include <stm32f4xx_gpio.h>
2
#include <stm32f4xx_tim.h>
3
#include <stm32f4xx_rcc.h>
4
#include <misc.h>
5

6
void InitIOs()
7
{
8
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
9

10
  GPIO_InitTypeDef gpioStructure;
11
  gpioStructure.GPIO_Pin = GPIO_Pin_5;
12
  gpioStructure.GPIO_Mode = GPIO_Mode_OUT;
13
  gpioStructure.GPIO_Speed = GPIO_Speed_50MHz;
14
  GPIO_Init(GPIOA, &gpioStructure);
15

16
  GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET);
17

18
}
19

20

21

22
int main()
23
{
24
  InitIOs();
25

26
    for (;;) {
27
      GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET);
28
      for (int i = 0; i < 5000000; i++);     // Warte damit man es Blinken sieht
29
        GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
30
        for (int i = 0; i < 5000000; i++);
31

32
    }
33

34
}

Funktioniert das ganze nicht mehr. Die Sache dabei ist, das es vorher 
mal alles funktioniert hat. Seitdem ich von Win7 auf Win10 umgestiegen 
bin, hab ich nur noch Probleme in dieser hinsicht. Eclipse etc wurde 
wieder "frisch" installiert.

Hat jemand eine Idee? Ich bin da leider mit meinem Latein am Ende..
Gast #4572373
Lesenswert?

Hab mich jetzt mal angemeldet.

Also die LED Blink nicht mehr. Es sieht so aus, als würde die Funktion 
zum Initialisieren des GPIOs nicht aufgerufen.

In der Console von Eclipse (falls du das mit Compiler Auszug meinst) 
steht folgendes:
1
21:03:38 **** Incremental Build of configuration Debug for project SDChanger ****
2
make all 
3
'Invoking: Cross ARM GNU Print Size'
4
arm-none-eabi-size --format=berkeley "SDChanger.elf"
5
   text     data      bss      dec      hex  filename
6
   5769      176      412     6357     18d5  SDChanger.elf
7
'Finished building: SDChanger.siz'
8
' '
9

10
21:03:39 Build Finished (took 894ms)

Es sieht für mich so aus, als würde Eclipse den Code schon richtig 
compilieren
Gast #4572382
Lesenswert?

>Also die LED Blink nicht mehr.

Leuchtet sie dauernd? Deine Verzögerungsschleifen könnten
vom Compiler wegoptimiert werden weil sie nichts tun.
Normalerweise nimmt man für so was Timer.

Versuch mal

        for (volatile int i = 0; i < 5000000; i++);
Gast #4572395
Lesenswert?

holger schrieb:
>>Also die LED Blink nicht mehr.
>
> Leuchtet sie dauernd? Deine Verzögerungsschleifen könnten
> vom Compiler wegoptimiert werden weil sie nichts tun.
> Normalerweise nimmt man für so was Timer.
>
> Versuch mal
>
>         for (volatile int i = 0; i < 5000000; i++);

Nene, die LED macht gar nichts. Sie leuchtet nichtmal. Ich hab schon 
versucht die LED vor der for-Schleife einzuschalten und die Loop leer zu 
lassen. Hat auch nicht funktioniert.

clonephone82 schrieb:
> Managed project oder makefile?  Compiler optimization  und debug
> Einstellungen überprüft?

Der Builder ist extern von ARMGCC sprich die make.exe. Compiler 
optimization musst du mir mal auf die Sprünge helfen, da finde ich so 
schnell nichts bei den vielen Einstellungsmöglichkeiten
Gast #4572416
Lesenswert?

Chrissel schrieb:
> Mit folgendem Code funktioniert es auch:
...
> Wenn ich jetzt aber meine Initialisierung in eine Funktion pappe, wie
> folgt:
...
>
> Funktioniert das ganze nicht mehr. Die Sache dabei ist, das es vorher
> mal alles funktioniert hat. Seitdem ich von Win7 auf Win10 umgestiegen
> bin, hab ich nur noch Probleme in dieser hinsicht.

Hä? Was denn nu? Es geht niht mehr seit Du die Initialisierung in eine 
Funktion gepackt hast, oder seit Du auf Win10 umgestiegen bist?
Irgendwie gibst Du zwei Ursachen für Dein Problem an...

Klappt's unter Win10 ohne InitIOs-Funktion (also alles in der main)?
Wenn ja, was soll dann das gejammer' wegen Win10?

Die nucleo-Boards haben doch einen ST-Link drauf, oder? Hast Du das 
Programm mal im Debugger durchgesteppt?

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