STM32F0 Fehler: "_ansi.h: No such file or directory"

OP #4445370
Hallo,

ich beschäftige mich gerade mit einem STM32F0 Discovery Board und bin 
dabei, ein einfaches LED-Blinkprogramm zu schreiben. Dazu habe ich das 
Tutorial im 
https://www.mikrocontroller.net/articles/STM32_CooCox_Installation
durchgeführt und auf das STM32F0 Board adaptiert. Das funktioniert auch 
schon.
Um das Setzen der Ausgänge zu vereinfachen habe ich eine Funktion 
erstellt. Dieser Funktion übergebe ich den Pin, den ich setzen möchte, 
und den Wert. In der Funktion wird die Pinnummer in einen Dezimalwert 
umgewandelt und dem Set- bzw. Resetregister übergeben.
Für die Funktion pow(2, pin) benötige ich die Math.h.

CooCox meckert jetzt aber, dass er "_ansi.h" nicht finden kann.

Wie kann ich den Fehler beheben? Gibt es eventuell eine andere 
Möglichkeit das Setzen der Pins zu vereinfachen?

Hier der Code:

1
#include "stm32f0xx.h"
2
#include "math.h"
3

4
void Delay (int a);
5
void setOutC (int pin, int val);
6

7
int main(void)
8
{
9

10
  RCC->AHBENR |= RCC_AHBENR_GPIOCEN; // Clock für Port C aktivieren
11

12
      GPIOC->MODER = 0x55555555; // PINC.0 .. PINC.15 als Ausgang definieren
13

14
      while(1) // Endlosschleife
15
      {
16
          setOutC(9,0); //Funktionsaufruf: PINC.9 = 0
17
          setOutC(8,0); //Funktionsaufruf: PINC.8 = 0
18
        //GPIOC->BRR = 0b0000001100000000; // Alle LEDs aus
19
          Delay(500000);
20
          setOutC(8,1); //Funktionsaufruf: PINC.8 = 1
21
          //GPIOC->BSRR = 0b0000001000000000; // LED 1 ein
22
          Delay(500000);
23
          setOutC(9,1); //Funktionsaufruf: PINC.9 = 1
24
          //GPIOC->BSRR = 0b0000000100000000; // LED 2 ein
25
          Delay(500000);
26

27
      }
28
}
29

30
// Delay
31
void Delay (int a)
32
{
33
    volatile int i,j;
34

35
    for (i=0 ; i < a ; i++)
36
    {
37
        j++;
38
    }
39

40
    return;
41
}
42

43
void setOutC (int pin, int val)
44
{
45
  if(val==0){
46
    GPIOC->BRR = pow(2,pin);
47
  } else if(val==1) {
48
    GPIOC->BSRR = pow(2,pin);
49
  }
50
  return;
51
}

Info: Ich bin absoluter C-Neuling. (Habe nur etwas Erfahrung in Java)

Danke im Voraus!
Angehängte Dateien:
Luca E. schrieb:
> Für die Funktion pow(2, pin) benötige ich die Math.h.

Wenn Du stattdessen
1
 1<< pin;
nimmst, dann brauchts auch keine "math.h" und das Ergebnis ist um 
Größenordnungen schneller. Ich vermisse ansonsten die Float-ABI Optionen 
für GCC, keine Ahnung ob soft-float der Default bei ARM Cortex-M0 ist.
Gast
Luca E. schrieb:

> Info: Ich bin absoluter C-Neuling.

Sieht man. Besser mit Basiswissen in C anfangen, Stichwort 
Bit-Operationen.

Und für math.h braucht es die Linker Option -lm und die Definition, 
welches FP Modell verwendet werden soll, gibt da recht viele. Beim FP 
ganz sicher Soft-FP.

math.h braucht aber hier keiner.
OP
Jim M. schrieb:
> Wenn Du stattdessen
> 1<< pin;
> nimmst

Danke, das funktioniert.

John Doe schrieb:
> Lies mal erst ein C-Tutorial...

Ja, das werde ich tun.

Aktuell habe ich das Problem, das ich das Board nicht mehr programmiert 
bekomme... "Error: Connect failed, check config and cable connection"
Der ST-Link wird im Gerätemanager angezeigt, an der Config habe ich 
nichts verändert und ist mit der aus dem Tutorial identisch...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.