Forum: Mikrocontroller und Digitale Elektronik Trotz "Define" kommt "undeclared(fist use in this function)


von Noobie (Gast)


Lesenswert?

Hallo zusammen,

ich habe 3 Datein (Defines.h, Defines.c, Main.c).
Ich möchte meinen Ports und Pins Namen geben, um dann mit diesen Namen 
statt PORTC oder PC0 etc. weiterzuarbeiten.

Defines.h
1
#define Disp_DDR DDRC
2
#define Pin_BF PC7
3
4
void uc_Init(void);

Defines.c
[c]
void uc_Init(void){
Disp_DDR |= (1<<Pin_BF);}
[\c]

Main.c
[c]
#include <stdint.h>
#include <avr/io.h>

int main(void)
{uc_Init();}
[\c]

Ich will also nur Pin7 von PortC als Ausgang definieren.
Beim compilieren bekomme ich aber immer folgenden Fehler:
'DDRC' undeclared (first use in this function)
'PC7' undeclared (first use in this function)

Ich benutzte das AVR Studio 5 und will einen Atmega8515 verwenden.
Ich hoffe ihr könnt weiterhelfen.

von jz23 (Gast)


Lesenswert?

Defined.c muss Defines.h einbinden. Außerdem bindet deine main.c nicht 
den Header ein.

von Rolf H. (b0d0)


Lesenswert?

OK, aber der Compiler meckert auch nicht das "define" an, sondern 
bemängelt dass die Symbole DDRC und PC7 unbekannt sind. Vielleicht heißt 
der Original-Namen des Ports gar nicht DDRC und das Pin 7 hat einfach 
den numerischen Wert 7?

von Noobie (Gast)


Lesenswert?

Oh, da habe ich wohl etwas vergessen...
Der Fehler kommt trotzdem noch. Als Update:

Defines.h
1
#define Disp_DDR DDRC
2
#define Pin_BF PC7
3
4
void uc_Init(void);

Defines.c
1
#include "Defines.h"
2
void uc_Init(void){
3
Disp_DDR |= (1<<Pin_BF);}

Main.c
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include "Defines.h"
4
int main(void)
5
{uc_Init();}

von Noobie (Gast)


Lesenswert?

Rolf H. schrieb:
> Vielleicht heißt
> der Original-Namen des Ports gar nicht DDRC und das Pin 7 hat einfach
> den numerischen Wert 7?

Ich möchte den Atmega 8515 verwendet und habe dies auch im AVR Studio 
eingestllt. Dieser hat ein DDRC und PC7

von Harry L. (mysth)


Lesenswert?

in defines.c muß ebenfalls avr/io.h eingebunden werden.

von Rolf H. (b0d0)


Lesenswert?

Versuch doch mal DDRC und PC7 direkt zu verwenden, statt Disp_DDR und 
Pin_BF. Ich wette, du bekommts immer noch die selbe Fehlermeldung.

von Noobie (Gast)


Lesenswert?

Harry L. schrieb:
> in defines.c muß ebenfalls avr/io.h eingebunden werden.

Problem gelöst.

VIELEN DANK für die schnelle Hilfe.

Echt cooles Forum

von Rolf H. (b0d0)


Lesenswert?

Noobie schrieb:
> Ich möchte den Atmega 8515 verwendet und habe dies auch im AVR Studio
> eingestllt. Dieser hat ein DDRC und PC7

Das ist sicherlich richtig, aber dass kann der C-Compiler nicht wissen. 
An dem "define" liegt es bestimmt nicht. Den Rat von Harry L. würde ich 
befolgen.

Hintergrund: Durch das "define" werden sämtliche vorkommende Symbole 
"Disp_DDR" durch "DDRC" ersetzt. D.h., überall wo du Disp_DDR verwendest 
steht jetzt DDRC. Damit der Compiler weiß, was er damit machen soll, 
muss das Symbol DDRC ebenfalls durch irgendwas definiert sein. Das wird 
dann sicherlich in der avr/io.h stehen. Wenn du die mit einem Editor 
öffnest wirst du sicherlich dort die Definition von DDRC finden. Lässt 
du diese "include" weg, gibt der Compiler dir die Fehlermeldung.

von Theor (Gast)


Lesenswert?

@Noobie

Harry hat die Lösung schon genannt, denke ich.

Du musst berücksichtigen, dass jede C-Datei für sich übersetzt wird und 
die Fehlermeldung genau und vollständig anschauen. Sie enthält 
Information darüber bei welchem Vorgang und welcher Datei der Fehler 
auftritt.

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.