Forum: Compiler & IDEs Includes nicht gefunden


von R. F. (rfr)


Lesenswert?

Hallo,

ich habe eine eclipse gestern installiert und das avr-plugin auch. 
Trotzdem gibt es Fehlermeldungen, die auf Probleme beim Finden der 
includes hideuten:
---------------------------------------------------------------------
code

---------------------------------------------------------------------
* #include  "m328pdef.inc"  */


int main(void)
{

#include "init.c"


init();

return(0);
}



#define zeile  0x0F
#define TASTPORT PORTA
#define startwert 0x08;
#define TP_DefReg DDRA

unsigned char scan_kbd(){

  unsigned char result = 0;
  unsigned char vari =0;

  if (vari == 0) vari = startwert;  /* setze bei wraparound */

  TASTPORT = vari;          /* schreibe und adressiere Zeile */
  delay (1);           /*ms*/
  result = TASTPORT;          /*lese und hole Spalte/Zeilen index*/
  vari = (vari & zeile)/2;
  return(result);

}
------------------------------------------------------------------
Ergebnisse:
--------------------------------


16:22:09 **** Incremental Build of configuration Debug for project 
TestAVR ****
make all
Building file: ../scan_kbd.c
Invoking: Cross GCC Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"scan_kbd.d" 
-MT"scan_kbd.o" -o "scan_kbd.o" "../scan_kbd.c"
../scan_kbd.c: In function ‘scan_kbd’:
../scan_kbd.c:3:18: error: ‘PORTA’ undeclared (first use in this 
function)
subdir.mk:24: recipe for target 'scan_kbd.o' failed
 #define TASTPORT PORTA
                  ^
../scan_kbd.c:14:2: note: in expansion of macro ‘TASTPORT’
  TASTPORT = vari;     /* schreibe und adressiere Zeile */
  ^~~~~~~~
../scan_kbd.c:3:18: note: each undeclared identifier is reported only 
once for each function it appears in
 #define TASTPORT PORTA
                  ^
../scan_kbd.c:14:2: note: in expansion of macro ‘TASTPORT’
  TASTPORT = vari;     /* schreibe und adressiere Zeile */
  ^~~~~~~~
../scan_kbd.c:15:2: warning: implicit declaration of function ‘delay’ 
[-Wimplicit-function-declaration]
  delay (1);           /*ms*/
  ^~~~~
make: *** [scan_kbd.o] Error 1

16:22:10 Build Failed. 3 errors, 1 warnings. (took 312ms)
-------------------------------------------------------------
Anscheinend ist die Installation nicht vollständig. Ich würde nun gerne 
wissen, was noch getan werden muss, um dieses zu ändern.

Grüsse

Robert

von Jürgen W. (Firma: MED-EL GmbH) (wissenwasserj)


Lesenswert?

Das erste include scheint irgendwie auskommentiert zu sein.

Das zweite gehört nach oben! Includes immer vor Programmcode, sonst 
gibt's auf Dauer ein Chaos.

von Oliver S. (oliverso)


Lesenswert?

Jedes, aber auch wirklich jedes avr-gcc-Programm benötigt das include 
avr/io.h

Oliver

von rfr-mailbox@gmx.de (Gast)


Lesenswert?

ich habe das include entkommentiert und geändert und avr/io.h eingefügt.
Ergebnis:
------------------------------------------------------------
 .equ SPDR6 = 6 ; SPI Data Register bit 6
                           ^~~~~~~~
../m328pdef.inc:695:18: error: unknown type name ‘SPI’
 .equ SPDR7 = 7 ; SPI Data Register bit 7
                  ^~~
../m328pdef.inc:695:27: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or 
‘__attribute__’ before ‘Register’
 .equ SPDR7 = 7 ; SPI Data Register bit 7
                           ^~~~~~~~
../m328pdef.inc:697:3: error: expected declaration specifiers before 
‘SPSR’
 ; SPSR - SPI Status Register
   ^~~~

.....
MOD: zigtausend ähnliche Fehlermeldungen glöscht
.....

 .equ INT_VECTORS_SIZE = 52 ; size in words
                              ^~~~
../m328pdef.inc:959:38: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or 
‘__attribute__’ before ‘words’
 .equ INT_VECTORS_SIZE = 52 ; size in words
                                      ^~~~~
../main.c:3:10: fatal error: avr/io.h: Datei oder Verzeichnis nicht 
gefunden
 #include <avr/io.h>
          ^~~~~~~~~~
compilation terminated.
make: *** [main.o] Error 1

18:22:16 Build Failed. 1319 errors, 4 warnings. (took 1s.70ms)

: Bearbeitet durch Moderator
von Oliver S. (oliverso)


Lesenswert?

An Stelle von 6 zilliarden sinnlosen sich wiederholenden Fehlermeldungen 
könntest du ja mal dein Programm posten, und zwar komplett, und als 
Anhang.

Oliver

von Joachim B. (jar)


Lesenswert?

rfr-mailbox@gmx.de schrieb:
> ich habe das include entkommentiert

und mein Mausrad gekillt

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

rfr-mailbox@gmx.de schrieb:
> ich habe das include entkommentiert und geändert und avr/io.h eingefügt.
> Ergebnis: ...zigtausend Fehlermeldungen...
Du hast eine Datei mit Assembler-Defines in ein C-Projekt eingebunden. 
Natürlich klatscht dir der Compiler zig Fehlermeldungen aufs Auge. Das 
ist, wie wenn dir einer die Waschmaschine auf Suaheli erklärt: du 
verstehst gar nichts, denn es ist nicht deine Sprache.

: Bearbeitet durch Moderator
von rfr-mailbox@gmx.de (Gast)


Lesenswert?

#include  "m328pdef.inc"
#include "init.c"
#include <avr/io.h>

#define zeile  0x0F
#define TASTPORT PORTA
#define startwert 0x08;
#define TP_DefReg DDRA

unsigned char scan_kbd(){

  unsigned char result = 0;
  unsigned char vari =0;

  if (vari == 0) vari = startwert;  /* setze bei wraparound */

  TASTPORT = vari;          /* schreibe und adressiere Zeile */
  delay (1);           /*ms*/
  result = TASTPORT;          /*lese und hole Spalte/Zeilen index*/
  vari = (vari & zeile)/2;
  return(result);

}

int main(void)
{
init();
return(0);
}
--------------------------------------------------------------

Lothar M. schrieb:
> rfr-mailbox@gmx.de schrieb:
>> ich habe das include entkommentiert und geändert und avr/io.h eingefügt.
>> Ergebnis: ...zigtausend Fehlermeldungen...
> Du hast eine Datei mit Assembler-Defines in ein C-Projekt eingebunden.
> Natürlich klatscht dir der Compiler zig Fehlermeldungen aufs Auge.

das hat er anscheinend. Aber was muss ich einbinden, und wo im 
Linuxsystem stehen diese? Es interessiert mich, ob diese überhaupt da 
sind.

Robert

von René H. (Gast)


Lesenswert?

https://de.m.wikibooks.org/wiki/C-Programmierung_mit_AVR-GCC/_Hello_World


Schau dir mal das als Beispiel an.

Grüsse,
René

von Johannes S. (Gast)


Lesenswert?

Und was soll das init.c? Das wird mehrfach kompiliert und der Linker 
wird meckern.

von rfr-mailbox@gmx.de (Gast)


Lesenswert?

Das compilieren von
-------------------------------------
#define F_CPU 8000000UL

#include <avr/io.h>
#include <util/delay.h>

int main (void) {

   DDRB |= (1 << PB0);

   while(1) {
       PORTB ^= (1 << PB0);
       _delay_ms(500);
   }

   return 0;
}
---------------------------------------
ergab:
___-------------------------------------

19:31:00 **** Incremental Build of configuration Debug for project 
TestAVR ****
make all
Building file: ../main.c
Invoking: Cross GCC Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.o" 
-o "main.o" "../main.c"
../main.c:3:10: fatal error: avr/io.h: Datei oder Verzeichnis nicht 
gefunden
 #include <avr/io.h>
          ^~~~~~~~~~
compilation terminated.
subdir.mk:24: recipe for target 'main.o' failed
make: *** [main.o] Error 1

19:31:00 Build Failed. 3 errors, 0 warnings. (took 325ms)

--------------------------------------------------------------
was muss ich installieren und woher bekomme ich das?

Gruss
Robert

von rfr-mailbox@gmx.de (Gast)


Lesenswert?

Das inti initialisiert die Hardware, die ich verwende.
das Programm ist aber noch nicht so weit.

Robert

von Johannes S. (Gast)


Lesenswert?

Dann gehört da ein #include "init.h" mit dem Header hin, aber nicht die 
Implementierung der .c Datei.
Ist den überhaupt eine aktuelle avr-gcc toolchain installiert? Das 
Plugin muss die nicht unbedingt mitbringen, das sind verschiedene 
Baustellen. Die Linux Distris haben oft ältere gcc Versionen im Gepäck 
und vermutlich auch keine für AVR.

von R. F. (rfr)


Lesenswert?

Ich habe das letzte mal vor einigen Jahren programmiert, habe aber jetzt 
Zeit, um mich um eine Probleme (und deren Lösungen) zu kümmern.

Allerdings habe ich keine Ahnung von Installationen.

Es w#äre hilfreich, wenn du schreiben würdest, welche version aktuell 
ist und wie ich das herausfinde. Die gcc-avr Version scheint aktuell zu 
sein, ich habe diese aus der lint-Distri installiert. Die eclipse ist 
neu,
Eclipse IDE for C/C++ Developers, Version: 2018-09 (4.9.0) Build id: 
20180917-1800.

Weiteres ist derzeit unklar.

Gruss

Robert

von René H. (Gast)


Lesenswert?

Als Root:

cd /
find ./ -name „io.h“

Grüsse,
René

von R. F. (rfr)


Angehängte Dateien:

Lesenswert?

Ergebnis s.o.

von René H. (Gast)


Lesenswert?

R. F. schrieb:
> Ergebnis s.o.

/usr/lib/avr/include/avr/io.h

also -I/usr/lib/avr/include/

Grüsse,
René

von Rolf M. (rmagnus)


Lesenswert?

rfr-mailbox@gmx.de schrieb:
> Invoking: Cross GCC Compiler
> gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.o"
> -o "main.o" "../main.c"

gcc ist nicht der Cross Compiler, sondern der für den Rechner selbst.

von Albert (Gast)


Lesenswert?

C-Buch lesen! Man inkludiert keine .c Dateien! Dann lösen sich die 
Probleme dieses Beispiels auch von selber - wenn man die Materie 
durchdrungen hat.

Das ist der beste Tip, den ich geben kann.

von Oliver S. (oliverso)


Lesenswert?

R. F. schrieb:
> ich habe eine eclipse gestern installiert und das avr-plugin auch.
> Trotzdem gibt es Fehlermeldungen, die auf Probleme beim Finden der

Du brauchst natürlich auch noch einen avr-gcc.

Oliver

von R. F. (rfr)


Lesenswert?

So!

nachdem ich einiges nachinstalliert habe, scheint es jetzt etwas besser 
zu laufen.

Eine Frage habe ich aber noch: WO werden die PB, DDRA, PORTA usw 
eingebunden?
Der Compiler findet das nicht.

Gruss

Robert

von René H. (Gast)


Lesenswert?

Die stehen in avr/io.h.

Grüsse,
René

von user (Gast)


Lesenswert?

du musst den avr-gcc verwenden, somit muss der Compiler-Aufruf mit 
avr-gcc starten, nicht mit gcc

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.