mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Datentyp von Header-File in Header-File einbinden


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich will den Datentyp aus Header 1 ic_t in eine zweites Header 2 
File includieren um Ihn in fan_t zu verwenden, dabei bekomme ich 
folgenden Fehler:

.\SRC\Control\FAN_CONTROL\fan_control.h(31): error:  #20: identifier 
"ic_t" is undefined

Meine google suche hat leider zu keinem Erfolg geführt, hat mir 
vielleicht jemand einen Tip wie es richtig geht?

//Header 1 -> input_capture.h
/* Define to prevent recursive inclusion 
-------------------------------------*/
#ifndef __input_capture_H
#define __input_capture_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>
#include "stm32f4xx_hal.h"

typedef enum {
    IC_STATE_NO_INIT = 0,
    IC_STATE_OK,
    IC_STATE_ERROR
} ic_status_t;

typedef struct {
    ic_status_t status;
    uint16_t   rpm;
    uint16_t   timer;
    TIM_HandleTypeDef   hICtim;
    TIM_HandleTypeDef *p_channel;
    uint32_t   icChannel;
    uint16_t  lastICVal;
    uint16_t  actualSteps;
    uint16_t  targetSteps;
  uint16_t    lastCntVal;
  uint16_t    cntSteps;
} ic_t;

/* declaration of function prototypes 
-----------------------------------------*/
void ic_fan_start(ic_t* pThis);
uint16_t ic_get_fan_rpm (ic_t *pThis);
uint32_t ic_calc_prescaler(uint32_t freq);
void ic_fan_init(ic_t *pThis, uint32_t tim_cnt_mode);
void fan_input_capture_isr(ic_t * pThis);

#ifdef __cplusplus
}
#endif

#endif /* __input_capture_H */

//Header 2 -> -> fan_control.h
/* Define to prevent recursive inclusion 
-------------------------------------*/
#ifndef __fan_control_H
#define __fan_control_H

#ifdef __cplusplus
extern "C" {
#endif


#include "stdint.h"
#include "input_capture.h"
#include "pwm.h"

typedef enum {
    FAN_STATE_IDLE = 0,
    FAN_STATE_ON,
    FAN_STATE_ERROR,
} fan_state_t;

typedef struct {
    fan_state_t state;
    ic_t tacho;
    pwm_t   pwm;
    uint16_t timer;
    float esum;
} fan_t;

/* Private typedef 
-----------------------------------------------------------*/
void set_ic_fan1(fan_t* pThis);
fan_state_t fan_run (fan_t *pThis);

uint16_t fan_getActualRPM (fan_t *pThis);
void fan_pi_controller (fan_t *pThis);
fan_state_t fan_run (fan_t * pThis);

#ifdef __cplusplus
}
#endif

#endif /* __fan_control_H */

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bist du im richtigen Verzeichnis?
D.h. hast du verschiedene Versionen von input_capture.h ?

Autor: Steve (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Denn Header sieht er oder zumindest bekomme ich da keinen Fehle, ich 
habe eine Ordner Struktur in Bezug auf die jeweiligen Layer und Module 
angelegt und den Pfad anschliessend (Keils uVison 5) für alle Files 
eingebunden (siehe Bild).

Autor: Steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dirk B. schrieb:
> D.h. hast du verschiedene Versionen von input_capture.h ?

nur das file

Autor: Torsten R. (Firma: robitzki.de) (torstenrobitzki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde mal tippen, dass der Fehler in dem Teil des Codes liegt, den 
Du uns nicht zeigst. Typischerweise treten solche Fehler auf, wenn zwei 
header sich gegenseitig includieren. Kann es ein, dass Du mehrere 
Versionen der Datei auf der Platte hast (/old /back /copy)?

Edit: Lass Dir mal den Präprozessor-Output vom Compiler generieren und 
durchsuche den, nach dem fehlenden Typen.

BTW: Bezeichner, die zwei Unterstriche enthalten gehören dem Compiler 
und sollten nicht von Dir verwendet werden.

mfg Torsten

: Bearbeitet durch User
Autor: Stefanus F. (Firma: Äppel) (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe in dem Lösungsansatz von Steve auch keinen Fehler.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.