Pointer Problem

BlackDevil

Neues Mitglied
09. Mai 2009
282
0
0
Sprachen
Servus

Ich habe einen Fehler bei der Arbeit mit einem Pointer.
Error schrieb:
../isr.c: In function '__vector_1':
../isr.c:15: error: dereferencing pointer to incomplete type
../isr.c: In function '__vector_2':
../isr.c:22: warning: unused variable 'flaggen'
make: *** [isr.o] Error 1


flags.c
Code:
struct isr_flags{
	bool start_stop_flag;
	bool reset_flag;
	bool timer_flag;
}pisr_flags; // Flag Struct Initialisieren

struct isr_flags *get_flags(void)
{
	return &pisr_flags;
}

Ich hatte zu erst die Definition des Structs in der .h - da hat er gemeckert das es mehrmals Definitiert wird. Okay, ich habs dann in die .c gepackt und das hat den Fehler schon mal behoben. Die Zeile wo der Fehler von oben auftritt ist in der Funktion (ich hab das mit einem roten > gekennzeichnet)


isr.c
Code:
ISR(INT0_vect) // Start/Stop gedrückt
{
	EIMSK &= (~(1<<INT0)) | (~(1<<INT1));		// Taster deaktivieren
	struct isr_flags *flaggen = get_flags();	// Flaggen holen
[COLOR="Red"]>[/COLOR]	flaggen->start_stop_flag = true;			// Flagge setzen
}

Wir finden den Fehler nicht ... vielleicht hat jemand eine Idee!?



Grüße
 
Hmmmm, da krieg ich auch einen Knoten ins Hirn. Weiß mit den knappen Codeausschnitten auch nicht so recht aber mir sieht das nach ziemlichen Hau aus ;)

Also .....

1. Du deklarierst in flags.c einen Strukturtyp isr_flags
2. dann definierst Du eine Varaible pisr_flags.

Code:
pisr_flags; // Flag Struct Initialisieren

neeee, eine Initialisierung ist das noch nicht, allenfalls eine Definition!

weiter ....

3. dann bastelst Du Dir eine Funktion mit Rückgabewert Pointer auf isr_flags, hmmmm, ok, ich denke da spricht zunächst nichts dagegen.
Code:
struct isr_flags *get_flags(void)
{
	return &pisr_flags;
}


4. in isr.c ziehst Du den Datentyp isr_flags erneut an indem Du eine weitere Variable flaggen Pointer definierst.

==> Frage: includierst Du in isr.c die Datei flags.c ==> typischer Weise nicht den man includiert nur header-files. Nun, woher soll flags.c Dein struct kennen?

Code:
struct isr_flags *flaggen = get_flags();	// Flaggen holen
>	flaggen->start_stop_flag = true;			// Flagge setzen

Ich hab zwar schon lange nichts mehr in C gemacht aber das kommt mir spanisch vor. Ich weiß nicht mehr genau was C jetzt daraus macht aber das scheint mir das Problem zu sein. Ich vermute er legt dort ein lokales struct isr_flags an, vermauschelt dann flaggen irgendwie als vraible da rein und kann später unten mit flaggen nix anfangen weil er den Datentyp nicht auflösen kann.

Vielleicht kann hier mal ein C-Profi drauf schaun .... wo sind die nur alle :cool:

Grüße,
Markus
 
Hallo Blackdevil,

ich sehe im Moment keinen Fehler, vielleicht liegt dieser in einem anderen Programmteil. Hmmm, vielleicht liegts irgendwie am boolean.

Nutzt du den GCC Compiler WinAVR?

Poste doch einfach mal den gesamten Code, am besten als Anhang.

Dirk
 
Fehler gefunden ...

Die flags.h beginnt so
Code:
#ifndef _flags_h
#define _flags_h
[...]
(die [...] soll nur andeuten das es drunter weiter geht)

Anstatt das #endif ans Ende des Headers zu packen hab ich ihn direkt unter das define gepackt. Damit hatter natürlich immer wieder den ganzen Header "defined" und voila: Die Struct hat ein paar mal existiert.
Fehler behoben, Struct in der .h deklariert und es funktioniert :)
 
aha, da wären wir auch nur mit dem ganzen code drauf gekommen, niemals mit einem code ausschnitt! aber schön wenn du den fehler selbst gefunden hast!

grüße,
ma
 
Jep. Naja ich dachte es sei ein Problem mit dem Pointer, also hab ich alles gepostet was mit dem Pointer in direktem zusammenhang steht ;)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)