STM32: wie Struktur übergeben

Gast #5950058
Lesenswert?

Hallo,

ich habe ein STM32 und möchte in einer Funktion den aktuellen Pegel des 
Portpins auf dem Display ausgeben. Die Funktion wird an vielen Stellen 
aufgerufen und soll den Quellcode an den Stellen übersichtlicher machen 
(jeweils nur 1 Quellcodezeile).

Mit der Funktionsdeklaration habe ich gewisse Probleme. Es funktioniert 
zwar, aber der Compiler meckert, wenn ich die Datei über *.h einbinde.

1
void pinpegel_ausgeben(GPIO_TypeDef* Port, uint16_t uiPin, unsigned int uiX, unsigned int uiY)
2
  {
3
  uint8_t currentRtcIntState;
4
  
5
  currentRtcIntState = HAL_GPIO_ReadPin(Port, uiPin);
6
  if(currentRtcIntState == 0)
7
    displaybefehl_text_ausgeben_TFT(uiX, uiY, "0");
8
  else
9
    displaybefehl_text_ausgeben_TFT(uiX, uiY, "1");
10

11
  return;

Der Aufruf der Funktion ist wie folgt:
1
pinpegel_ausgeben(MB1_RST_GPIO_Port, MB1_RST_Pin, KT0T+KT91H, KT91I+0*KT91J);



Wie muß die Funktionsdeklaration aussehen? Wäre nett, wenn mir jemand 
weiter helfen könnte.

Grüße Holger
Gast #5950116
Lesenswert?

Holger schrieb:
> Mit der Funktionsdeklaration habe ich gewisse Probleme. Es funktioniert
> zwar, aber der Compiler meckert, wenn ich die Datei über *.h einbinde.

Falls du Funktionen über *.h Dateien einbindest ist das
grundsätzlich der falsche Weg.

Funktionen werden in *.c Dateien geschrieben und deren Prototypen
in *.h Dateien für andere bekannt gemacht.
Gast #5950122
Lesenswert?

Wenn ich die Funktion in diagnose.h deklariere, kommt folgende Meldung:
unknown type name 'GPIO_TypeDef' in diagnose.h

Gebe ich nichts in diagnose.h an, so kommt in der *.c die folgende 
Warnung:
implicit declaration of function 'pinpegel_ausgeben'; did you mean 
'statsbilder_neu_ausgeben'? [-Wimplicit-function-declaration]

Ich verwende Segger V4.16
Gast #5950127
Lesenswert?

Ungebildeter schrieb:
> Falls du Funktionen über *.h Dateien einbindest ist das
> grundsätzlich der falsche Weg.
>
> Funktionen werden in *.c Dateien geschrieben und deren Prototypen
> in *.h Dateien für andere bekannt gemacht.

In diagnose.c ist diese mit Funktion mit "void 
pinpegel_ausgeben(GPIO_TypeDef* Port, uint16_t uiPin, unsigned int uiX, 
unsigned int uiY)" definiert.

In diagnose.h das selbe, nur mit Strichpunkt hinten dran. Wie erwähnt, 
geht das Ganze nicht, wenn ich die Bekanntmachung in diagnose.h mache.
Gast #5950128
Lesenswert?

Holger schrieb:
> Wenn ich die Funktion in diagnose.h deklariere, kommt folgende Meldung:
> unknown type name 'GPIO_TypeDef' in diagnose.h

Du brauchst dann noch die Bezüge aus gpio.h.

Also alle *.c Dateien die diagnose.h inkludieren sollten vorher
noch z.B. stm32f4xx_gpio.h (kommt drauf an welchen STM du
verwendest) inkludieren.
Gast #5950148
Lesenswert?

ich habe nun auch in diagnose.h
#include "stm32f7xx_hal.h" ergänzt. Nun kommt die Meldung nicht mehr.
1
#ifndef DIAGNOSE_H
2
#define DIAGNOSE_H
3

4
#include "stm32f7xx_hal.h"
5

6
void pinpegel_ausgeben(GPIO_TypeDef* Port, uint16_t uiPin, unsigned int uiX, unsigned int uiY);
7

8
#endif

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