Forum: Mikrocontroller und Digitale Elektronik WinAVR -> neopixel_i2c Github-Code -> Fehlermeldungen


von Alfred S. (hood)


Angehängte Dateien:

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

von Frank (Gast)


Lesenswert?

Vergessen in deiner Main die benötigen Header zu includen?

von Alfred S. (hood)


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?

von aSma>> (Gast)


Lesenswert?

Es gibt diesen Ordner
#include <Light_WS2812/light_ws2812.h>
nicht.

von dummy (Gast)


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.

von Alfred S. (hood)


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)?

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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
von Alfred S. (hood)


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?

von Flip B. (frickelfreak)


Lesenswert?

nein variablen.

von Stefan E. (sternst)


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

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.

von dummy (Gast)


Angehängte Dateien:

Lesenswert?

Mit der i2c_slave_defs.h aus dem Anhang compiliert es dann.

von Alfred S. (hood)


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?

: Bearbeitet durch User
von Stefan E. (sternst)


Lesenswert?

Alfred S. schrieb:
> Ist das wichtig zu beachten?

Nein, ist unkritisch.

von schotter (Gast)


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

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.