Forum: Compiler & IDEs Error: undeclared (first use in this function)


von Khaled G. (khaled_g)


Lesenswert?

Beim Compilieren erhalte ich folgende Fehlermeldung:

Error: 'SMBvariables' undeclared (first use in this function)

kann mir Jemand weiterhelfen?

Hier der Sourcecode:
1
-----------------------------------------------------------------------
2
SMBSlave.h
3
-----------------------------------------------------------------------
4
.....
5
#define SMBvariables SV.SMBvar
6
#define SMBvar_int   SV.SMBint
7
8
#ifndef MODULE_SMBUS
9
  union { volatile unsigned char SMBvar[29][2]; volatile unsigned int SMBint[29]; } SV;
10
11
char str_MfrName[]    PROGMEM = "\014Atmel Norway"; //__flash char
12
char str_DeviceName[] PROGMEM = "\005SB100";
13
char str_DeviceChem[] PROGMEM = "\004LION";
14
char str_MfrData[]    PROGMEM = "\013MfrDataArea";
15
#else
16
  extern union { volatile unsigned char SMBvar[29][2]; volatile unsigned int SMBint[29]; } SV;
17
#endif
18
.......
1
-----------------------------------------------------------------------
2
communication.c 
3
-----------------------------------------------------------------------
4
#include <avr/interrupt.h> 
5
#include "SMBSlave.h"
6
.....
7
8
ISR(TWIBUSCD_vect)
9
{
10
  //clear bits per sbdat110, 4.4.2
11
  SMBvariables[SMBV_BattMode][hibyte] &= ~(0xE3);  
12
  
13
  if(TWBCSR & (1<<TWBCIP))  //this int was caused by bus DISCONNECT event.
14
  {
15
    TWBCSR &= ~(1<<TWBCIP);
16
//SH    ChangePowerMode(POWERMODE_IDLE,0);
17
  }
18
  else  //this int occurred due to a bus CONNECT event.
19
  {
20
    TWBCSR |= (1<<TWBCIP);
21
//SH    ChangePowerMode(POWERMODE_ACTIVE,0); 
22
  }
23
}
24
..
25
/////////////////////////////////////////////////////////////////////

von Tom M. (Gast)


Lesenswert?

Khaled G. schrieb:
> Error: 'SMBvariables' undeclared (first use in this function)
>
> kann mir Jemand weiterhelfen?

Ja, Du selbst. Was bedeutet die Fehlermeldung?

von Klaus F. (kfalser)


Lesenswert?

a) Vergiss das Getrickse.
Wenn Du auf SV.SMBvar zugreifen willst, dann schreib auch SV.SMBvar hin

b) Vergiss das Getrickse mit dem #ifndef MODULE_SMBUS
In das Header File gehören nur die Deklarationen mit extern.
In die C-File gehören die Definitionen (die ohne extern) und das 
Header-File wird zur Kontrolle mit eingebunden.

von Karl H. (kbuchegg)


Lesenswert?

ABgesehen davon.
Das Problem wird mal wieder in den ... Teilen stecken.
Ein falsches #define, ein paar #ifdef und schon wird der #define auf den 
du hier aus bist, nicht mehr ausgeführt.

Bei solchen Sachen gibt es viele Möglichkeiten. Daher ist es in den 
meisten Fällen nicht sinnvoll, Codeausschnitte zu posten, in denen du 
selber keinen Fehler siehst. Denn wir sehen da auch nicht das Problem.

von Khaled G. (khaled_g)


Angehängte Dateien:

Lesenswert?

Danke für die Antworten.

a) Vergiss das Getrickse.
Wenn Du auf SV.SMBvar zugreifen willst, dann schreib auch SV.SMBvar hin

das ist eine gute Idee.

Im Anhang befindet sich der complete Code

von Andreas B. (andreas_b77)


Lesenswert?

In communication.c findet sich nirgends ein #include "SMBSlave.h".

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.