mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AtmelStudio7 include von Header funktioniert auf einmal nicht mehr?


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: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bis heute bin ich mit dem include immer gut zurecht gekommen, jetzt auf 
einmal bekomme ich eine Fehlermeldung beim kompilieren.

Error unknown type name 'CKMEM_P'

Der Type ist in der Datei ckpro.h definiert...
ckpro.h

#ifndef _ckpro_h_     // Datei immer nur einmal einfügen
#define _ckpro_h_ 1    // Version 0.01

#include <stdint.h>
#include <main_var.h>

#define CK_FH_TYPA  0x11223344
#define CK_FH_TYPB  0x55667788
#define CK_FH_SIZE  128
#define CK_FH_VER  1

//--- Speicherplatz Structure ---
struct sCkMem {
  uint8_t flag;      // Speicherkanal FLAG
  uint8_t dummy;      // FREI!
  uint8_t c;      // Werte für C Port
  uint8_t l;      // Werte für L Port
};
typedef const struct sCkMem* CKMEM_P;

#endif

In der Headerdatei zu dem C File, indem ich den Typen verwende und wo 
auch die Fehlermeldung hin verweist, habe ich die ckpro.h wie folgt 
angegeben.

...
#include "ckpro.h"
...

Und trotzdem findet er die Typenbezeichnung nicht (mehr)?
Was habe ich da übersehen?

Ich komme nicht drauf. :-(

Hat jemand einen Tip?

Gruß AVRli...

Autor: Rätsell Rata (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVRli schrieb:
> bis heute bin ich mit dem include immer gut zurecht gekommen, jetzt auf
> einmal bekomme ich eine Fehlermeldung beim kompilieren.

Warum zeigst du nicht den Sourcecode bei dem der Fehler
auftritt? So wie hier kann man nur raten was du tust. Und
dazu haben viele keine Lust.

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag...


screen_ckpro.h
#ifndef _screen_ckpro_h_  // Datei immer nur einmal einfügen!
#define _screen_ckpro_h_  1

#include <stdint.h>
#include "main_var.h"
#include "ckpro.h"

// LC CONFIGURATION - Anzeige
  #define FRAME_LC_X    0
  #define FRAME_LC_Y    STA_Y // + STA_H
  #define FRAME_LC_W    128
  #define FRAME_LC_H    144

typedef enum {ckNIL, ckBP, ckLP, ckHP} eCkConfig;

void update_ckpro_screen(CKMEM_P ckmem);
//                       ^
// HIER wird der         |
// Fehler angezeigt -----+
//
#endif

...
und
...

screen_ckpro.c
#include "screen_ckpro.h"

///////////////////////////////////////////////
// Aktualisiert alles Daten auf dem Display...
//////////////////////////////////////////////
void update_ckpro_screen(CKMEM_P ckmem)
{
  eCkConfig config;

  config = ckLP;
  if (ckmem->l & 0x80) config = ckHP;

  if ( (config == ckLP) && ((ckmem->l & 0x7F) == 0) 
  && (ckmem->c == 0) ) config = ckBP;

  paint_lc_config(lc_cfg_x, lc_cfg_y, config);
}

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte es sein, daß in Deinem Dateisystem mehrere Varianten der Datei 
ckpro.h herumlungern?

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Könnte es sein, daß in Deinem Dateisystem mehrere Varianten der Datei
> ckpro.h herumlungern?

Das habe ich jetzt mal Systemweit suchen lassen, es gibt nur die eine im 
Programmordner. :-(

Der Witz ist, es lief sonst, ich weiß nicht, was ich heute alles 
geändert habe. Auf einmal war die Meldung da, jetzt bekomme ich sie 
nicht weg. :-(

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe was mit den Header Files nicht richtig verstanden. :-(
Ich habe das Problem gefunden, kann es aber nicht lösen!

"ckpro.h" wird in "screen_ckpro.h" includiert.
Zuvor wird "main_var.h" in "screen_ckpro.h" includiert.
In "main_var.h" wird "screen_all.h" inkludiert.
"screen_all.h" inkludiert wiederum "screen_ckpro.h".

Nicht das sich nun hier die Schlage selbst in den Schwanz beißt?
Ich nahm immer an, das man mit den #ifndef Schaltern in den .h Files 
solche mehrfach Beziehungen untereinander "blockt".

In "main_var.h" und "main_var.c" liegen Definitionen, Strukturen und 
Variablen, die ich global im Projekt benötige.

Gruß AVRli...

Autor: Rätsell Rata (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Include-Chaos wage ich nicht zu durchblicken, mir ist
das echt zu blöd mich da einzudenken. Das darf jemand anders
erledigen.

Wenn das jemand auflösen soll wirst du wohl nicht umhin kommen
dein komplettes Projekt zu posten.

Nur soviel:

In eine *.h Datei gehören nur Funktionsprototypen, Struktur-
Definitionen, Typdefinitionen und Defines/Konstanten. Aber
sicherlich keine Variablen und Funktionen.

Alles andere führt in den totalen Urwald.

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rätsell Rata schrieb:
> In eine *.h Datei gehören nur Funktionsprototypen, Struktur-
> Definitionen, Typdefinitionen und Defines/Konstanten. Aber
> sicherlich keine Variablen und Funktionen.

Variable und Funktionen liegen dann im passendes .c im .h nur der 
Funktionskopf aus dem .c
und die Variablen die im .c definiert sind,
im .h nur mit
extern uint8_t mainResult

Aber ich muss Dir schon Recht geben, etwas Chaos ist da schon, ich muss 
mir mal eine bessere Aufteilung überlegen. :-/

Autor: Andreas J. (andj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schieb in der screen_ckpro.h das "#include "ckpro.h" mal direkt unter 
den Include Guard. Wenn du den Inculde Guard z.B. versehentlich in 2 
Header Dateien gleich genannt hast, könnte so ein Fehler auftauchen.

Zudem sehe ich keinen Grund, warum du in der Datei ckpro.h das "#include 
<main_var.h>" drin hast.

Ich benutze übrigens immer "#pragma once" als include guard. Das ist 
zwar nicht im Standard, aber ich habe auch noch nie einen Compiler 
gesichtet, der das nicht unterstützt.

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.