Forum: Compiler & IDEs AVR-NET-IO Ethersex Watch IO and react Compilerwarnung


von Michel (Gast)


Lesenswert?

Ich habe ein AVR-NET-IO mit aktuellem Ethersex am Start, Ausgänge samt 
Relais schalten funzt auch einwandfrei. Jetzt wollte ich die Eingänge 
per Watch IO (and react) abfragen.....
Ich vermute den Fehler beim compilieren (make). Dort erscheint nämlich 
folgende Meldung während der Compilierung:


In file included from services/watchcat/watchcat.c:50:0:
services/watchcat/user_config.h:14:141: Warnung: initialization from 
incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 0,  .rising = 1, .address = { HTONS((192 << 8) 
| 168), HTONS((178 << 8) | 47) }, .message = watchcat_text0, .func = 
ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:14:141: Anmerkung: (nahe der 
Initialisierung für »ecmd_react[0].func«)
services/watchcat/user_config.h:15:141: Warnung: initialization from 
incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 0,  .rising = 0, .address = { HTONS((192 << 8) 
| 168), HTONS((178 << 8) | 47) }, .message = watchcat_text1, .func = 
ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:15:141: Anmerkung: (nahe der 
Initialisierung für »ecmd_react[1].func«)
services/watchcat/user_config.h:16:141: Warnung: initialization from 
incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 1,  .rising = 1, .address = { HTONS((192 << 8) 
| 168), HTONS((178 << 8) | 47) }, .message = watchcat_text2, .func = 
ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:16:141: Anmerkung: (nahe der 
Initialisierung für »ecmd_react[2].func«)
services/watchcat/user_config.h:17:141: Warnung: initialization from 
incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 1,  .rising = 0, .address = { HTONS((192 << 8) 
| 168), HTONS((178 << 8) | 47) }, .message = watchcat_text3, .func = 
ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:17:141: Anmerkung: (nahe der 
Initialisierung für »ecmd_react[3].func«)
services/watchcat/user_config.h:18:141: Warnung: initialization from 
incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 2,  .rising = 1, .address = { HTONS((192 << 8) 
| 168), HTONS((178 << 8) | 47) }, .message = watchcat_text4, .func = 
ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:18:141: Anmerkung: (nahe der 
Initialisierung für »ecmd_react[4].func«)
services/watchcat/user_config.h:19:141: Warnung: initialization from 
incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 2,  .rising = 0, .address = { HTONS((192 << 8) 
| 168), HTONS((178 << 8) | 47) }, .message = watchcat_text5, .func = 
ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:19:141: Anmerkung: (nahe der 
Initialisierung für »ecmd_react[5].func«)
services/watchcat/user_config.h:20:141: Warnung: initialization from 
incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 3,  .rising = 1, .address = { HTONS((192 << 8) 
| 168), HTONS((178 << 8) | 47) }, .message = watchcat_text6, .func = 
ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:20:141: Anmerkung: (nahe der 
Initialisierung für »ecmd_react[6].func«)
services/watchcat/user_config.h:21:141: Warnung: initialization from 
incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 3,  .rising = 0, .address = { HTONS((192 << 8) 
| 168), HTONS((178 << 8) | 47) }, .message = watchcat_text7, .func = 
ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:21:141: Anmerkung: (nahe der 
Initialisierung für »ecmd_react[7].func«)

Ich habe das Ganze schon mit einen ATMEGA32 als auch mit einem ATMEGA644 
probiert, aber immer die gleiche Fehlermeldung beim Compilieren. Würde 
mich sehr freuen wenn hier jemand helfen kann, stecke nicht so tief in 
den Compilern, dass ich diese Meldung deuten oder gar beheben kann.....

von Dirk B. (dirkb2)


Lesenswert?

Leider geht die Formatierung der Fehlermeldung verloren.

Es steht doch auch die Spalte dabei: 141 ( und das ^ darunter sollte 
auch die Stelle anziegen)
Das ist die Zuweisung an .func

Da du weder die Definition der struct noch die Deklaration der Funktion 
(ecmd_sender_send_command ) zeigst, kann hier schlecht geholfen werden.

von Oliver S. (oliverso)


Lesenswert?

Michel schrieb:
> Ich vermute den Fehler beim compilieren (make). Dort erscheint nämlich
> folgende Meldung während der Compilierung:

Hm. Da kommt weder Fehler, Error, o.ä. vor. Da steht:

Warnung: initialization from
incompatible pointer type [-Wincompatible-pointer-types]

und die bezieht sich (vermutlich) auf

func =
ecmd_sender_send_command

Da weden die (Funktions)?)-pointer nicht kompatibel sein ;) Die Warnung 
ist sicherlich berechtigt, aber in dem Fall sag ich mal, funktionieren 
tut das trotzdem.

Und da das nur ein Warnung ist, sollte make trotzdem durchlaufen, und 
das Programm erstellen.

Oliver

von Michel (Gast)


Lesenswert?

Danke schon mal für die Hilfen.
Der Compiler läuft ja auch durch (mit den Warnungen und Anmerkungen) und 
erstellt ein Programm.
Ich habe vier Ausgänge PC1 bis PC4 per Relais mit den PA0 bis PA4 
verbunden, und sehe in der Ethersex Page des AVR-Moduls das die Eingänge 
auch entsprechend reagieren wenn ich die Relais schalte. Nur eben senden 
tut der NET-IO (vermutlich) nix.
TCP ist aktiviert, Port ist 2701, WatchIO and react ist auch 
aktiviert....
Es kommen keine Befehle in fhem an. Alles so gemacht wie hier 
https://forum.fhem.de/index.php/topic,26942.0/all.html
beschrieben. Dort habe ich ganz hinten im Beitrag auch mal mein Problem 
drangehängt und man sieht die Compiler Meldungen  incl Formatierung.
Kann ich das noch anderswie checken ob der AVR-NET-IO sendet?

Hier mal die usr_config.h wo das Problem vielleicht sein könnte?

/* Autogenerated File
 * edit watchcat.m4 and config instead */

static const char watchcat_text0[] PROGMEM = "set PA0 on\n\n";
static const char watchcat_text1[] PROGMEM = "set PA0 off\n\n";
static const char watchcat_text2[] PROGMEM = "set PA1 on\n\n";
static const char watchcat_text3[] PROGMEM = "set PA1 off\n\n";
static const char watchcat_text4[] PROGMEM = "set PA2 on\n\n";
static const char watchcat_text5[] PROGMEM = "set PA2 off\n\n";
static const char watchcat_text6[] PROGMEM = "set PA3 on\n\n";
static const char watchcat_text7[] PROGMEM = "set PA3 off\n\n";

static const struct WatchcatReaction ecmd_react[] PROGMEM = {
    { .port = 0, .pin = 0,  .rising = 1, .address = { HTONS((192 << 8) | 
168), HTONS((178 << 8) | 47) }, .message = watchcat_text0, .func = 
ecmd_sender_send_command },
    { .port = 0, .pin = 0,  .rising = 0, .address = { HTONS((192 << 8) | 
168), HTONS((178 << 8) | 47) }, .message = watchcat_text1, .func = 
ecmd_sender_send_command },
    { .port = 0, .pin = 1,  .rising = 1, .address = { HTONS((192 << 8) | 
168), HTONS((178 << 8) | 47) }, .message = watchcat_text2, .func = 
ecmd_sender_send_command },
    { .port = 0, .pin = 1,  .rising = 0, .address = { HTONS((192 << 8) | 
168), HTONS((178 << 8) | 47) }, .message = watchcat_text3, .func = 
ecmd_sender_send_command },
    { .port = 0, .pin = 2,  .rising = 1, .address = { HTONS((192 << 8) | 
168), HTONS((178 << 8) | 47) }, .message = watchcat_text4, .func = 
ecmd_sender_send_command },
    { .port = 0, .pin = 2,  .rising = 0, .address = { HTONS((192 << 8) | 
168), HTONS((178 << 8) | 47) }, .message = watchcat_text5, .func = 
ecmd_sender_send_command },
    { .port = 0, .pin = 3,  .rising = 1, .address = { HTONS((192 << 8) | 
168), HTONS((178 << 8) | 47) }, .message = watchcat_text6, .func = 
ecmd_sender_send_command },
    { .port = 0, .pin = 3,  .rising = 0, .address = { HTONS((192 << 8) | 
168), HTONS((178 << 8) | 47) }, .message = watchcat_text7, .func = 
ecmd_sender_send_command },
    { .port = 255, .pin = 255, .rising = 255}
};

#define watchcat_port_init() do {\
  vpin[0].func = watchcat_edge;  \
} while(0)


Und die WatchIO and React in der make menueconfig sieht so aus:

ECMDTCP(PA0, RISING, 192.168.178.47, set PA0 on\n\n)
ECMDTCP(PA0, FALLING, 192.168.178.47, set PA0 off\n\n)
ECMDTCP(PA1, RISING, 192.168.178.47, set PA1 on\n\n)
ECMDTCP(PA1, FALLING, 192.168.178.47, set PA1 off\n\n)
ECMDTCP(PA2, RISING, 192.168.178.47, set PA2 on\n\n)
ECMDTCP(PA2, FALLING, 192.168.178.47, set PA2 off\n\n)
ECMDTCP(PA3, RISING, 192.168.178.47, set PA3 on\n\n)
ECMDTCP(PA3, FALLING, 192.168.178.47, set PA3 off\n\n)

Danke schon mal für die Mühe die ich mache...;-)

von Dirk B. (dirkb2)


Lesenswert?

Michel schrieb:
> Der Compiler läuft ja auch durch (mit den Warnungen und Anmerkungen) und
> erstellt ein Programm.

Der Compiler versucht unter allen Umständen ein Programm zu erstellen.
Er vertraut dir, dass du keine Fehler machst.
Wenn ihm etwas merkwürdig vorkommt, gibt er eine Warnung aus, macht aber 
weiter.
Meist ist das aber ein Fehler!

> Nur eben senden
> tut der NET-IO (vermutlich) nix.

Du bekommst eine Warnung im Zusammenhang mit der Funktion 
ecmd_sender_send_command.
Diese passt nicht zu der (in der struct WatchcatReaction  bei .func 
erwarteten) Signatur.

Da solltest du mal schauen. Wenn die Paramter nicht passen, sendet der 
AVR Mist oder nichts.

Oder zeig doch mal bitte die Funktion ecmd_sender_send_command und 
auch die Definition der struct WatchcatReaction

von Michel (Gast)


Lesenswert?

ok....
Ich habe
git clone git://github.com/ethersex/ethersex.git
und
git pull origin
alles aktuell neu gemacht. Da sollte doch alles drin sein....

Die Fehlermeldungen deute ich auch so wie du angegeben hast. Die 
Funktion ecmd_sender_send_command..... kann oder muss ich die ändern?

Ich rufe aber doch nur "make menuconfig" auf und erstelle dann bei 
"Watch IO and react" die bereits oben gezeigte Zusammenstellung der 
gewünschten Befehle.

Mehr kann (und sollte) ich doch eigentlich gar nicht tun. Dann starte 
ich den Compiler mit "make" und los gehts.

Was ist die "Definition der struct WatchcatReaction" und wo finde ich 
die?

Wie gesagt, alles original Ethersex letzte Woche runtergeladen...

sorry für die dummen Fragen ;-)

von Michel (Gast)


Lesenswert?

Ich hab noch eine Ergänzung....
bei Aufruf von menuconfig kommt auch schon eine Warnung. Hatte ich 
bisher übersehen weil sehr schnell das Ethersex Configuration Fenster 
aufgeht. Vielleicht hat das schon damit etwas zu tun.

root@OptiPlex745:~/ethersex# make menuconfig
make -C scripts/lxdialog all
make[1]: Verzeichnis „/root/ethersex/scripts/lxdialog“ wird betreten
lxtemp.c:1:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
 main() {}
 ^~~~
make[1]: Verzeichnis „/root/ethersex/scripts/lxdialog“ wird verlassen
/bin/bash scripts/Menuconfig config.in
Using defaults found in .config
Preparing scripts: functions, 
parsing........................................... 
........................................................................ 
........ 
................done.

Scheint ja auch irgendeine Inkompatibilität zu sein.
Ich weiß nicht weiter.....

von Dirk B. (dirkb2)


Lesenswert?

Michel schrieb:
> Was ist die "Definition der struct WatchcatReaction" und wo finde ich
> die?

In irgendeiner Headerdatei .h wird struct WatchcatReaction stehen, wo 
dann auch die Member mit den Typen definiert ist.

Eine Volltextsuche über alle *.h von Ethersex sollte die finden.

Ebenso die Funktion ecmd_sender_send_command

Das fehlende int bei main ist unschön.
Da main immer ein int zurück gibt geht das implizit, ist aber in neuen 
C-Standards nicht mehr erlaubt.

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.