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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Alfred S. (hood)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Vergessen in deiner Main die benötigen Header zu includen?

von Alfred S. (hood)


Bewertung
0 lesenswert
nicht 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)


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

von dummy (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
nein variablen.

von Stefan E. (sternst)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht lesenswert
Mit der i2c_slave_defs.h aus dem Anhang compiliert es dann.

von Alfred S. (hood)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht lesenswert
Alfred S. schrieb:
> Ist das wichtig zu beachten?

Nein, ist unkritisch.

von schotter (Gast)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.