WinAVR -> neopixel_i2c Github-Code -> Fehlermeldungen

OP #4906532
Lesenswert?

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
Angehängte Dateien:
OP #4911814
Lesenswert?

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?
Gast #4912008
Lesenswert?

>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.
OP #4912389
Lesenswert?

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)?
OP #4913194
Lesenswert?

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?
OP #4913297
Lesenswert?

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?
Gast #4913329
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren