Hallo zusammen,
ich bin mit dem ICC8 AVR Compiler von ImageCraft und mit der
Code::Blocks Entwicklungsumgebung auf ein Problem getreten, auf das ich
keine Lösung finde.
Ein Beispiel:
1 | #include <macros.h>
|
2 | #include <iom644pv.h>
|
3 |
|
4 | typedef int INT;
|
5 |
|
6 | typedef struct{
|
7 | int a;
|
8 | int b;
|
9 | } MYSTRUCT;
|
10 |
|
11 | int main(void)
|
12 | {
|
13 | //PORTB = 0; // Wird dieser Befehl vor der Deklaration von 'a' und 'myStruct' ausgeführt, treten besagt Fehler auf
|
14 |
|
15 | INT a;
|
16 | MYSTRUCT myStruct;
|
17 |
|
18 | a = 0;
|
19 | myStruct.a = 0;
|
20 |
|
21 | PORTB = a;
|
22 | PORTB = myStruct.a;
|
23 |
|
24 | while(1)
|
25 | {
|
26 | }
|
27 | return 0;
|
28 | }
|
Wie zu sehen ist verwende ich in dem Beispiel typedef und struct. Der
gezeigte Code lässt sich auch fehlerfrei kompilieren.
Aber wenn vor der Deklaration von 'a' und 'myStruct' etwas "Anderes"
gemacht wird, wie z.B in eine Funktion gesprungen oder wie hier ein
Register angesprochen wird, gibt es beim übersetzen Fehler wie:
- illegal use of type name `INT'
- syntax error; found `a' expecting `;'
- undeclared identifier `a'
Das Programm lässt sich also nur Überetzen, wenn in der main-Fuktion als
erstes alle Variablen deklariert werden die etwas mit typedef und struct
zu tun haben.
Wie kann das sein?
Das selbe (bis auf andere includes) Programm läuft einwandfrei unter dem
AtmelStudio 6 und dem GCC Combiler.
Hat jemand eine Idee?
LG
Hauke