mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC C18 Fehlermeldung: [2060] shift expression has no effect?


Autor: Igor Metwet (bastel-wastel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,
hab ein kleines Problem mit einer Fehlermeldung (warning) mit dem C18 
Compiler.

(PIC18F2550)
#define bit_set(var,bitnr)   ((var) |= 1 << (bitnr)) // Einzelnes Bit setzen

main
{
unsigned char Messprotokoll[10];      
...
bit_set(Messprotokoll[4],0);
oder
bit_set(ADCON0,0);
...
}

Fehlermeldung:
D:\PIC_Soft\main.c:347:Warning [2060] shift expression has no effect

Und zwar taucht die Meldung auf, wenn ich das Bit 0 einer Variablen 
abfragen will. C18_User_Guide meint dazu:
2060: shift expression has no effect
Shifting a value by zero bits has no effect on the value of the 
expression.

Wieso sollte das Setzen/Rücksetzen des Bit 0 nichts am Wert ändern?
Gezählt wird doch von Bit0...Bit7. Oder wo hab ich meinen Denkfehler?
Wenn ich mir die Variablen im Debugger anschau, dann werden die 
richtigen Bits schon gesetzt, aber das warning wird ja nicht zum Spaß da 
sein.

Wäre klasse, wenn mir jemand nen Tipp geben könnte.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Anweisung als Ganzes hat natürlich schon einen Effekt, aber nicht
die Shift-Operation. Ob du

  x |= 1<<0;

oder

  x |= 1;

schreibst, ist das Gleiche, also ist die <<-Operation eigentlich
überflüssig, und der Compiler wittert fälschlicherweise ein Versehen
von deiner Seite.

Vielleicht gibt es ja eine Compiler-Option, mit der man alle
2060-Warnungen abschalten kann.

Autor: Igor Metwet (bastel-wastel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort. Zu meiner Schande muss ich gestehen, dass ich 
das #define übernommen habe, ohne dessen Ablauf zu durchdenken.

Also dann aber jetzt:
 "<<" verschiebt hier eine 1 um 0 Stellen nach oben, richtig?
  x |= 1<<0;

Und weil C18 dieses Shift für überflüssig hält gibt er ne Warnung aus!?
OK, in diesem Fall kann ich mit der Warnung beim Compilieren leben.

Danke für die Hilfe.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> "<<" verschiebt hier eine 1 um 0 Stellen nach oben, richtig?

So isses. Der Compiler sieht ja den Code erst, nachdem der
Präprozessor darin alle Makros (wie bit_set) expandiert hat. Und da
taucht nun einmal dieses seltsam anmutende 1<<0 auf.

Da solche Makros wie bit_set übliche Vorgehensweise sind, halte ich
die beschriebene Warnung nicht für sehr sinnvoll, da sie, wenn sie in
großer Anzahl auftritt, den Blick auf die wirklich ernstzunehmenden
Meldungen versperrt. Aber wie gesagt, vielleicht kann man sie ja
deaktivieren.

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Bin Neuling bei der C18 Programmierung. Hatte das gleiche Problem. Durch 
eine andere habe ich das Problem beseitig.
Mein Fehler war, das ich den Linker Script aus dem falschem Verzeichnis 
genutzt hatte. Nutze jetzt die Dateien aus mcc18\lkr..

Gruß Siegfried

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.