PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WINAVR: Warning: expression dangerous with linker stubs



Kaiser-F
27.02.2008, 10:09
Hallo Leute,

ich habe ein kleines Problem, und benötige dazu Eure Hilfe.

Ich schreibe gerade an einem komplexeren Programmchen, und
bin jetzt dabei, alle WARNINGS zu "bereinigen".

BZW.: ALLE VIOLETTEN ZEILEN IM COMPILER VERMEIDEN :-)

Jedoch verstehe ich eine Sache nicht!
Ich bekomme folgende "Fehlermeldung":


C:\DOKUME~1\KAISER~1\LOKALE~1\Temp/cckiFr6h.s:8690: Warning: expression dangerous with linker stubs
C:\DOKUME~1\KAISER~1\LOKALE~1\Temp/cckiFr6h.s:8691: Warning: expression dangerous with linker stubs

Ich habe auch schon herausgefunden, was dieses Warning verursacht.
Und zwar eine SWITCH-Funktion:



// -=> Funktionen Auswählen <=-
void FUNCTION_EXE( uint8_t function ){
switch(function){
case 0: FUNC_BLINKER_L(); break;
case 1: FUNC_BLINKER_L_WBA(); break;
case 2: FUNC_BLINKER_R(); break;
case 3: FUNC_BLINKER_R_WBA(); break;
case 4: FUNC_WBA(); break;
case 5: FUNC_WBA_BL(); break;
case 6: FUNC_HUPE(); break;
case 7: FUNC_ABBLENDLICHT(); break;
case 8: FUNC_FERNLICHT(); break;
case 9: FUNC_FERNLICHT_LH(25); break;
case 10: FUNC_FERNLICHT_LH(50); break;
case 11: FUNC_FERNLICHT_LH(75); break;
case 12: FUNC_FERNLICHT_LH(100); break;
case 13: FUNC_LICHTHUPE(25); break;
case 14: FUNC_LICHTHUPE(50); break;
case 15: FUNC_LICHTHUPE(75); break;
/*case 16: FUNC_LICHTHUPE(100); break;
case 17: FUNC_NEBELSCHEIN(); break;
case 18: FUNC_NEBELSCHLUSS(); break;
case 19: FUNC_NEBEL(); break;

case 20: FUNC_WISCHERSTUFE( 1 ); break;
case 21: FUNC_WISCHERSTUFE( 2 ); break;
case 22: FUNC_WISCHERSTUFE( 3 ); break;
case 23: FUNC_WISCHER_SWITCH(); break;
case 24: FUNC_TIPPWISCHER(); break;
case 25: FUNC_HECKWISCHER(); break;
case 26: FUNC_WASCHER_V(); break;
case 27: FUNC_WASCHER_V_WR(); break;
case 28: FUNC_WASCHER_H(); break;
case 29: FUNC_WASCHER_H_WR(); break;

case 30: FUNC_FH_VL_UP_AUTO(); break;
case 31: FUNC_FH_VL_DO_AUTO(); break;
case 32: FUNC_FH_VL_UP_HOLD(); break;
case 33: FUNC_FH_VL_DO_HOLD(); break;
case 34: FUNC_FH_VR_UP_AUTO(); break;
case 35: FUNC_FH_VR_DO_AUTO(); break;
case 36: FUNC_FH_VR_UP_HOLD(); break;
case 37: FUNC_FH_VR_DO_HOLD(); break;

case 38: FUNC_SPECIAL0(); break;
case 39: FUNC_SPECIAL1(); break;
case 40: FUNC_SPECIAL2(); break;
case 41: FUNC_SPECIAL3(); break;
case 42: FUNC_SPECIAL4(); break;
case 43: FUNC_SPECIAL5(); break;
case 44: FUNC_SPECIAL6(); break;
case 45: FUNC_SPECIAL7(); break;
case 46: FUNC_SPECIAL8(); break;*/
case 47: FUNC_SPECIAL9(); break;
}
}


Der Fehler liegt innerhalb case: [16; 47].
Sobald ich die "Ausklinkung" /* und */ verschiebe, taucht dieser Fehler auf.
So wie sie jetzt stehen, kommt sie nicht.
Jedoch gehen mir dabei einige Funktionen ab :-).

Ich hoffe, jemand von Euch kann mir da weiterhelfen.
Ich seh den Fehler einfah nicht!

Vielen Dank schon mal an dieser Stelle!!!

Kaiser-F
27.02.2008, 10:13
Mir ist noch etwas aufgefallen.

Ich kann die Grenzen beliebig verschieben.
Die Anzahl aller "cases" darf allerdings nicht größer als 16 sein...

Ist das so bei switch?

radbruch
27.02.2008, 11:42
0-15+47 sind 17 cases...

Ich habe mal nach "Warning: expression dangerous with linker stubs (http://www.google.de/search?hl=de&q=%22Warning%3A+expression+dangerous+with+linker+s tubs%22&meta=)" gesucht und u.a. folgendes gefunden:


I talked to Jörg about this error , and this warning is unneeded.Quelle: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=411472 (deutsch? (http://translate.google.com/translate?hl=de&sl=en&u=http://www.avrfreaks.net/index.php%3Fname%3DPNphpBB2%26file%3Dviewtopic%26p %3D411472&sa=X&oi=translate&resnum=4&ct=result&prev=/search%3Fq%3D%2522Warning:%2Bexpression%2Bdangerou s%2Bwith%2Blinker%2Bstubs%2522%26num%3D20%26hl%3Dd e), kA wer "Jörg" ist...)

Anscheinend ein Problem von gcc

Gruß

mic

Kaiser-F
27.02.2008, 12:42
Hallo mic,

herzlichen Dank für Deine Antwort!
Also einfach nicht beachten?!

Danke!

radbruch
27.02.2008, 14:56
Ich würde es missachten wenn keine erkennbaren Fehlfunktionen bei case auftreten.


...bin jetzt dabei, alle WARNINGS zu "bereinigen".
Möglicherweise eine andere gcc-Version installieren. Würde ich aber nur als letzte Möglichkeit betrachten: "Never touch a runing system"...

Man könnte auch die switch-Anweisung aufsplitten:


switch(function){
case 0: FUNC_BLINKER_L(); break;
...
case 15: FUNC_LICHTHUPE(75); break;
}
switch(function){
case 16: FUNC_LICHTHUPE(100); break;
...
case 31: FUNC_FH_VL_DO_AUTO(); break;
}
...

Vielleicht noch ein if(function<16) dazu..

mic

rudirabbit
14.03.2008, 18:05
Hallo !
Habe auch so ein ähnliches Problem, mein Projekt läuft zwar
Bekomme aber jede Menge Warnings z.b.



itoa(date.day,sDay,10);
itoa(date.mon,sMon,10);
itoa(date.Jahr,sJahr,10);

240: warning: implicit declaration of function 'itoa'

Bei allen anderen Funktionen die mit Strings zu tun haben, bekomme ich ebenfalls ähnliche Warnings.

Bin ein Quereinsteiger von Pascal auf C, sehe evtl. deshalb nicht was bei z.b itoa nicht passen soll.
Date ist ein struct


typedef struct {
uint16_t Jahr;
uint8_t mon,day;
boolean schaltjahr;
} tdate;
sDay etc. ist das:

char sSek[2],sMin[2],sStd[2],sMon[2],sDay[2],sJahr[5];

vg. Rudi

uwegw
14.03.2008, 19:46
240: warning: implicit declaration of function 'itoa'

Bei allen anderen Funktionen die mit Strings zu tun haben, bekomme ich ebenfalls ähnliche Warnings.

Das heißt, dass der Compiler die Funktion itoa an dieser Stelle noch nicht kennt. Du musst ihm davor erst mit #include <stdlib.h> sagen, dass du die Funktion itoa aus der stdlib verwenden willst.