Hallo zusammen, ich versuche grad mit WinAVR folgenden Code zu kompilieren: https://github.com/usedbytes/neopixel_i2c Alle zusätzlich benötigten Libs sind eingepflegt (siehe Datei im Anhang). Beim "make all" werden mir allerdings ohne Ende Fehler ausgeworfen (siehe weiter unten). Liegt das an mir oder an dem Programm? Habe bisher nie mit WinAVR gearbeitet. Was kann ich tun, damit ich es korrekt kompilieren kann? ############################### set -e; avr-gcc -MM -mmcu=attiny85 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=ws2812/light_ws2812_AVR/Light_WS2812/light_ws2812.lst -Iws2812/light_ws2812_AVR -DF_CPU=8000000 -std=gnu99 ws2812/light_ws2812_AVR/Light_WS2812/light_ws2812.c \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > ws2812/light_ws2812_AVR/Light_WS2812/light_ws2812.d; \ [ -s ws2812/light_ws2812_AVR/Light_WS2812/light_ws2812.d ] || rm -f ws2812/light_ws2812_AVR/Light_WS2812/light_ws2812.d set -e; avr-gcc -MM -mmcu=attiny85 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=i2c/i2c_machine.lst -Iws2812/light_ws2812_AVR -DF_CPU=8000000 -std=gnu99 i2c/i2c_machine.c \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > i2c/i2c_machine.d; \ [ -s i2c/i2c_machine.d ] || rm -f i2c/i2c_machine.d set -e; avr-gcc -MM -mmcu=attiny85 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst -Iws2812/light_ws2812_AVR -DF_CPU=8000000 -std=gnu99 main.c \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > main.d; \ [ -s main.d ] || rm -f main.d -------- begin -------- avr-gcc (WinAVR 20100110) 4.3.3 Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiling: main.c avr-gcc -c -mmcu=attiny85 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst -Iws2812/light_ws2812_AVR -DF_CPU=8000000 -std=gnu99 main.c -o main.o main.c: In function 'set_leds_global': main.c:21: warning: implicit declaration of function 'ws2812_setleds_constant' main.c:21: error: 'REG_GLB_G' undeclared (first use in this function) main.c:21: error: (Each undeclared identifier is reported only once main.c:21: error: for each function it appears in.) main.c:21: error: 'N_LEDS' undeclared (first use in this function) main.c: In function 'update_leds': main.c:26: error: 'I2C_N_GLB_REG' undeclared (first use in this function) main.c:26: error: 'N_LEDS' undeclared (first use in this function) main.c: In function 'do_reset': main.c:31: error: 'N_LEDS' undeclared (first use in this function) main.c:32: error: 'I2C_N_GLB_REG' undeclared (first use in this function) main.c:35: error: 'REG_GLB_G' undeclared (first use in this function) main.c:36: error: 'REG_GLB_R' undeclared (first use in this function) main.c:37: error: 'REG_GLB_B' undeclared (first use in this function) main.c:42: error: 'REG_CTRL' undeclared (first use in this function) main.c: In function 'swirly': main.c:55: error: 'N_LEDS' undeclared (first use in this function) main.c:56: error: 'I2C_N_GLB_REG' undeclared (first use in this function) main.c: In function 'main': main.c:131: error: 'REG_CTRL' undeclared (first use in this function) main.c:131: error: 'CTRL_RST' undeclared (first use in this function) main.c:133: error: 'CTRL_GLB' undeclared (first use in this function) make.exe: *** [main.o] Error 1 > Process Exit Code: 2
Vergessen in deiner Main die benötigen Header zu includen?
Auszug Main.c: #include <util/delay.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <Light_WS2812/light_ws2812.h> #include <i2c/i2c_slave_defs.h> #include <i2c/i2c_machine.h> Auszug Makefile: # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c i2c/i2c_machine.c ws2812/light_ws2812_AVR/Light_WS2812/light_ws2812.c EXTRAINCDIRS = ws2812/light_ws2812_AVR DIRAVR = c:/WinAVR-20100110 Die angegebenen Verzeichnisse enthalten die entsprechenden Dateien. Meinst du es wird trotzdem etwas nicht gefunden?
Es gibt diesen Ordner #include <Light_WS2812/light_ws2812.h> nicht.
>Es gibt diesen Ordner >#include <Light_WS2812/light_ws2812.h> >nicht. Doch gibt es. Schau ins makefile unter EXTRAINCDIRS oder so. >Meinst du es wird trotzdem etwas nicht gefunden? Natürlich, steht doch oben. Überall wo "undeclared" steht wurde etwas nicht gefunden. Es fehlt. Frag den Autor wo der Kram geblieben ist.
Ich habe nochmal alles neu zusammengestellt. Warum auch immer wird nur noch folgendes bemängelt: main.c: In function 'set_leds_global': main.c:21: warning: implicit declaration of function 'ws2812_setleds_constant' main.c:21: error: 'REG_GLB_G' undeclared (first use in this function) main.c:21: error: (Each undeclared identifier is reported only once main.c:21: error: for each function it appears in.) main.c:21: error: 'N_LEDS' undeclared (first use in this function) main.c: In function 'update_leds': main.c:26: error: 'I2C_N_GLB_REG' undeclared (first use in this function) main.c:26: error: 'N_LEDS' undeclared (first use in this function) main.c: In function 'do_reset': main.c:31: error: 'N_LEDS' undeclared (first use in this function) main.c:32: error: 'I2C_N_GLB_REG' undeclared (first use in this function) main.c:35: error: 'REG_GLB_G' undeclared (first use in this function) main.c:36: error: 'REG_GLB_R' undeclared (first use in this function) main.c:37: error: 'REG_GLB_B' undeclared (first use in this function) main.c:42: error: 'REG_CTRL' undeclared (first use in this function) main.c: In function 'swirly': main.c:55: error: 'N_LEDS' undeclared (first use in this function) main.c:56: error: 'I2C_N_GLB_REG' undeclared (first use in this function) main.c: In function 'main': main.c:131: error: 'REG_CTRL' undeclared (first use in this function) main.c:131: error: 'CTRL_RST' undeclared (first use in this function) main.c:133: error: 'CTRL_GLB' undeclared (first use in this function) make.exe: *** [main.o] Error 1 Das liegt leider an dem Code. Diese Variablen(?) die da in den Funktionen gesetzt bzw. abgerufen werden, existieren nur in dieser main.c (es gibt Beispielsweise nirgendwo sonst "REG_CTRL"). Ohne Behebung dieser Fehler kann ich die Datei nicht kompilieren. Was kann ich da tun (außer den Autor zu fragen - wäre die letzte Möglichkeit)?
:
Bearbeitet durch User
Alfred S. schrieb: > Was kann ich da tun (außer den Autor zu fragen - wäre die letzte > Möglichkeit)? Selber deklarieren. Sind doch nur uint8_t Variablen. P.S. Wobei wahrscheinlich nur N_LEDS wichtig ist und die Anzahl der LEDs angibt.
:
Bearbeitet durch User
Ich habe mal alle Undeklarierten deklariert: #define N_LEDS 1 // Nur 1 LED angeschlossen! #define I2C_N_GLB_REG 0 #define REG_CTRL 0 #define CTRL_RST 0 #define CTRL_GLB 0 #define REG_GLB_G 0 #define REG_GLB_R 0 #define REG_GLB_B 0 Jetzt meckert der Compiler wie folgt: Compiling: main.c avr-gcc -c -mmcu=attiny85 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst -Iws2812/light_ws2812_AVR -DF_CPU=8000000 -std=gnu99 main.c -o main.o main.c: In function 'set_leds_global': main.c:31: error: lvalue required as unary '&' operand main.c: In function 'update_leds': main.c:36: warning: passing argument 1 of 'ws2812_sendarray' discards qualifiers from pointer target type main.c: In function 'do_reset': main.c:45: error: lvalue required as left operand of assignment main.c:46: error: lvalue required as left operand of assignment main.c:47: error: lvalue required as left operand of assignment main.c:48: error: lvalue required as unary '&' operand main.c:49: error: lvalue required as left operand of assignment main.c:50: error: lvalue required as left operand of assignment main.c:51: error: lvalue required as left operand of assignment main.c:52: error: lvalue required as left operand of assignment make.exe: *** [main.o] Error 1 Sind die Definitionen falsch? Müssen das vielleicht Hexwerte sein?
Alles was da angemeckert wird, ist in i2c/i2c_slave_defs.h definiert. Gehe jetzt aber nicht dabei und kopiere das einfach alles nach main.c. Finde statt dessen heraus, warum der Header bei dir nicht (oder nicht richtig) inkludiert wird.
Ich habe mal einen Blick in dein ZIP im ersten Post geworfen. Die i2c_slave_defs.h darin ist nicht die richtige. Sieht eher nach einer früheren (noch unvollständigen) Version dieser Datei aus.
Mit der i2c_slave_defs.h aus dem Anhang compiliert es dann.
Der Urheber hat also das Github Verzeichnis für die I2C Lib nicht aktualisiert: https://github.com/usedbytes/usi_i2c_slave Die i2c_slave_defs.h ist da auf einem alten Stand. Man muss die Github I2C Lib hier laden: https://github.com/usedbytes/usi_i2c_slave/tree/8dfefe6d1de6ad5fe7d19547fb8705782f18c031 Hab's ausgetauscht! Echt allerbestens Dank für den Hinweis und die Hilfe bei der Fehlersuche! Es gibt nur noch eine Warnung (wird trotzdem kompiliert, da kein Fehler): main.c:26: warning: passing argument 1 of 'ws2812_sendarray' discards qualifiers from pointer target type Ist das wichtig zu beachten?
:
Bearbeitet durch User
Alfred S. schrieb: > Der Urheber hat also das Github Verzeichnis für die I2C Lib nicht > aktualisiert: > https://github.com/usedbytes/usi_i2c_slave > Die i2c_slave_defs.h ist da auf einem alten Stand. Man muss die Github > I2C Lib hier laden: > https://github.com/usedbytes/usi_i2c_slave/tree/8d... > > Hab's ausgetauscht! Nicht getestet, aber im README steht: > Getting the code > > This project uses git submodules (I kinda wish it didn't...). > You can clone it like so: > > git clone --recursive https://github.com/usedbytes/neopixel_i2c > (..) Wenn du die Sourcen geklont statt kopiert hättest, wäre es wahrscheinlich fehlerfrei gegangen. Grüße
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.