Forum: Compiler & IDEs Inculde für Anfänger und welche, die es werden wollen


von Michael G. (glunzl)


Lesenswert?

Hallo!

Ich habe ein Problem beim #include, nachdem ich meine Init-Funktion für 
die HW auslagelagert habe. Target ist ein mega8515, WinAVR in aktueller 
Version.

main:
1
#include <avr/io.h>     // Register usw.
2
#include <stdint.h>    // Standard Integer Types
3
4
#include <Init.h>
5
6
// Funktionsprototypen
7
extern void Initialisierung(void) ; // Init.h
8
9
uint8_t test ;
10
11
int main(void)
12
{
13
  Initialisierung() ;
14
15
  while (1)
16
    {
17
      test = PIND ;
18
      PORTB = test ;
19
20
    }
21
  return 0 ;  // Rückgabewert der Hauptschleife
22
}

Init.h
1
// Funktionsprototypen
2
void Initialisierung(void)

Init.c
1
#include <avr/io.h>     // Register usw.
2
#include <Init.h>
3
4
/*****************************************************************************
5
*
6
*   Funktionsname   : Initialisierung
7
*
8
*   Rueckgabewerte  : Keine
9
*
10
*   Parameter    : Keine
11
*
12
*   Aufgabe     : Initialisierungen der HW
13
*
14
*****************************************************************************/
15
void Initialisierung()
16
{
17
  // PortA
18
    // Ext. SRam
19
20
  // PortB: Alles Ausgänge
21
    DDRB  = 0xff ;   // Datenrichtungsregister
22
    PORTB = 0x00 ;  // Pegel vorgeben (0= LED EIN)
23
 
24
  // PortC
25
    // Ext. SRam
26
27
28
  // PortD
29
    // Default Eingänge
30
  
31
  
32
  // MCUCR - MCU Control Register
33
    MCUCR |= (1<<SRE) ;  //Ext. SRam einschalten
34
    
35
  
36
  // Status Register
37
38
}
Ich bekomme die Fehler:
1
Compiling C: main.c
2
avr-gcc -c -mmcu=at90s8515 -I. -gdwarf-2 -DF_CPU=4000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst  -std=gnu99 -Wundef -MMD -MP -MF .dep/main.o.d main.c -o main.o 
3
main.c: In function 'Initialisierung':
4
main.c:7: error: storage class specified for parameter 'Initialisierung'
5
main.c:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
6
main.c:24: error: old-style parameter declarations in prototyped function definition
7
main.c:24: error: expected '{' at end of input
8
make.exe: *** [main.o] Error 1
Der bei mir aber mehr Durcheinander, als Ordnung bringt. Was mache ich 
verkehrt?

Gruß und Dank
Michael

von holger (Gast)


Lesenswert?

>void Initialisierung()

void Initialisierung(void)

von Roland P. (pram)


Lesenswert?

in der init.h fehlt ein ;

ausserdem brauchst du den Funktionsprototyp in der main.c nicht 
definieren. dies wird ja schon durch das include der init.h erledigt.

Gruß
Roland

von Michael G. (glunzl)


Lesenswert?

Hallo Holger!

>void Initialisierung()
void Initialisierung(void)

Das war es auch nicht, die Fehler bleiben die gleichen.

In Beitrag "Wann #include *.c oder *.h?" wird es so beschrieben.

BTW: Im Makefile die Init.c mit aufzunehmen brachte auch keine 
Besserung.

Michael

von Michael G. (glunzl)


Lesenswert?

Hallo Roland!

Beide Ratschläge führten zum Erfolg :-) Danke!

BTW: Müssen im Makefile .c Files unter dem Eintrag

# List C source files here. (C dependencies are automatically 
generated.)

eingetragen werden, oder nicht? Der Kommentar sagt ja nicht, bei mir 
funktioniert es aber nicht ohne.

Michael

von Johannes M. (johnny-m)


Lesenswert?

Michael Glunz wrote:
> BTW: Müssen im Makefile .c Files unter dem Eintrag
>
> # List C source files here. (C dependencies are automatically
> generated.)
>
> eingetragen werden, oder nicht?
Natürlich müssen sie. Woher soll der Compiler sonst von ihrer Existenz 
wissen?

Abgesehen davon ist es bei einer projektabhängigen init sinnvoller, 
diese nicht im Standard-Library-Pfad unterzubringen, sondern im 
Projektverzeichnis, und sie dann mit
1
#include "Init.h"
anstatt
1
#include <Init.h>
einzubinden.

von Michael G. (glunzl)


Lesenswert?

Ih weiß nicht, woher der Compiler weiß woher die .c Dateien noch kommen. 
Im MFile Kommentar steht:
1
# List C source files here. (C dependencies are automatically generated.)
Das ließ mich vermuten, das der Compiler die .c Dateien dort sucht, wo 
die .h Dateien gefunden wurden.

Gruß
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.