Forum: Compiler & IDEs Atmel Studio 7 c/c++ Compiler Problem


von Alexander S. (docalex)


Lesenswert?

Moins,

Ich verwende in einem Projekt in Atmal Studio den TWI Treiber von Atmel. 
Der ist in C geschrieben, ich programmiere in C++. Deshalb muss ich ihn 
mit einbinden.

Mein Problem ist nun, dass der C-Compiler die Definitionen aus dem .h 
file nicht mehr im .c file findet:

Hier kleine Auszüge aus den Programmen:

TWI_Master.h
1
#ifndef TWI_Master_h
2
#define TWI_Master_h
3
4
#ifdef __cplusplus
5
extern "C" {
6
/****************************************************************************
7
  TWI Status/Control register definitions
8
****************************************************************************/
9
#define TWI_BUFFER_SIZE 4   // Set this to the largest message size that will be sent including address byte.
10
11
#define TWI_TWBR            0x0C         // TWI Bit rate Register setting.
12
                                        // Se Application note for detailed 
13
                                        // information on setting this value.
14
15
und so weiter ....

TWI_Master.c:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include "TWI_Master.h"
4
5
6
static unsigned char TWI_buf[ TWI_BUFFER_SIZE ];    // Transceiver buffer
7
static unsigned char TWI_msgSize;                   // Number of bytes to be transmitted.
8
static unsigned char TWI_state = TWI_NO_STATE;      // State byte. Default set to TWI_NO_STATE.
9
10
union TWI_statusReg TWI_statusReg = {0};            // TWI_statusReg is defined in TWI_Master.h
11
12
/****************************************************************************
13
Call this function to set up the TWI master to its initial standby state.
14
Remember to enable interrupts from the main application after initializing the TWI.
15
****************************************************************************/
16
void TWI_Master_Initialise(void)
17
18
usw....

Hier spuckt mir der Compiler folgende Fehlermeldungen aus:
1
    Building file: .././TWI_Master.c
2
    Invoking: AVR8/GNU C Compiler : 5.4.0
3
C:\Users\steingas\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\TWI_Master.c(52,31): error: 'TWI_BUFFER_SIZE' undeclared here (not in a function)
4
     static unsigned char TWI_buf[ TWI_BUFFER_SIZE ];    // Transceiver buffer
5
                                   ^
6
C:\Users\steingas\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\TWI_Master.c(54,34): error: 'TWI_NO_STATE' undeclared here (not in a function)
7
     static unsigned char TWI_state = TWI_NO_STATE;      // State byte. Default set to TWI_NO_STATE.
8
                                      ^
9
C:\Users\steingas\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\TWI_Master.c(56,7): error: variable 'TWI_statusReg' has initializer but incomplete type
10
     union TWI_statusReg TWI_statusReg = {0};            // TWI_statusReg is defined in TWI_Master.h

Da im .c file TWI_BufferSize und TWI_NO_State definiert wurden müsste 
der compiler diese eigentlich finden.

Diese Definitionen sind von Atmel.
Wo liegt der Fehler?

Viele Grüße

Alexander

von Stefan E. (sternst)


Lesenswert?

1
#ifdef __cplusplus
2
extern "C" {
3
...
4
...
5
...
6
}
7
#endif
->
1
#ifdef __cplusplus
2
extern "C" {
3
#endif
4
...
5
...
6
...
7
#ifdef __cplusplus
8
}
9
#endif

von Alexander S. (docalex)


Lesenswert?

Stefan E. schrieb:

Wenn Du damit sagen willst, ich hätte das }#endif vergessen, nein, das 
ist drin (ganz am Ende). wollte nur den Post klein halten.

Wenn Du etwas anderes sagen wolltest, hab ichs nicht verstanden.

viele Grüße

Alexander

: Bearbeitet durch User
von Stefan E. (sternst)


Lesenswert?

Alexander S. schrieb:
> Wenn Du etwas anderes sagen wolltest, hab ichs nicht verstanden.

Ich habe zuerst die Struktur gezeigt, wie du sie jetzt hast, und danach, 
wie sie sein sollte, damit du das Header-File mit C und C++ nutzen 
kannst.

von Alexander S. (docalex)


Lesenswert?

Ahh ... jetzt versteh ich.

getestet. tut.

danke.

von CAN (Gast)


Lesenswert?

Hallo,

er will damit sagen das du zweimal
1
#ifdef __cplusplus
 und zweimal
1
#endif
 brauchst zusätzlich zu deinem include guard

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.