Dag Beste mensen,

Ik heb het laatste jaar weer veel informatie van het circuitsonline gehaald. En heb nu een vraag die miss wel in een andere discussie staat maar ik kan het in ieder geval niet vinden.

Het volgende:

Op school moeten we met een microcontroller (atmega 16 en AVR Studio) een robot aantsturen. Dit programma is opgebouwd uit een 4 tal source files en een header file. Mijn vraag is nu moet ik voor elke source file een aparte header file hebben of is een header file genoeg? En hoe moet ik precies de globale variabelen declaren. Ik heb ze nu alleen in main gedeclaleerd maar dit vind de compiler niet goed.

Dus samengevat:

-Mijn vraag is nu moet ik voor elke source file een aparte header file hebben of is een header file genoeg?

-Hoe moeten de globale variabelen gedclaleerd worden in een project met een header file?

Alvast bedankt

Als je één header hebt, met daarin


#include abc.c
#include def.c

plaats je de globale variabelen in de header, vóór de include's. De precompiler plakt in zo'n geval alles achter mekaar, alvorens het aan de compiler door te geven.

Als je 2 *source* files hebt en in de een een functie staat die in de ander gebruikt wordt. Dan moet je inderdaad gebruik maken van een header file.

Heb je echter maar 1 source file, dan is het netjes om een header te gebruiken, maar zeker niet verplicht.

Als je wel headers gaat gebruiken, dan heb je eigenlijk twee manieren om deze te gebruiken.

Microchip zelf heeft 1 header file voor een module functie.
Oftewel 1 uart.h, spi.h etc.
Echter, elke functie die hier in gedefinieerd is, wordt onderverdeeld per file.

dus uart_write.c, uart_read.c, etc.

Dit kan handig zijn, indien je wenst. Ik vind het zelf persoonlijk omslachtig en als je overstapt naar andere programmeer talen (C++) redelijk ongebruikelijk.

Normaal gesproken heb je 1 header file en 1 source file als *een paartje*.
uart.h en uart.c
spi.h en spi.c

Heb je in je header file een *global* variabele? Dan moet je deze extern declareren.

Oftewel:


#ifndef _EXAMPLE_H
#define _EXAMPLE_H

extern unsigned char aGlobalVar;

#endif

#include "example.h"

unsigned char aGlobalVar = 0;

Nu is er een globale variable aGlobalVar gedefinieerd en geinitialiseerd. Alle source files die nu example.h includen hebben toegang tot die variabele.

Als je meer vraagjes hebt, stel ze gerust *kijkt naar signature*