mikrocontroller.net

Forum: Compiler & IDEs Portierung von AVR zu PC (Fehlermeldungen)


Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche gerade ein Programm welches sich ohne Warungen/Fehler für
einen AVR compilieren lässt auch auf meinem PC zum laufen zu bringen.
Compilieren kann ich es auch bereits auf dem PC, aber ich bekomme
diverse Warnungen, die ich mir so nicht erklären kann.

Als erstes wäre da
const uint8_t end = strlen(textbuff); 
Die Fehlermeldung ist:
Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen«
unterscheiden sich im Vorzeichenbesitz
Aber zwischen libc und avr-libc erkenne ich dort keinen Unterschied:
http://www.gnu.org/software/libc/manual/html_mono/...
http://www.nongnu.org/avr-libc/user-manual/group__...

Zum Zweiten musste ich die speziellen Funktionen um Konstanten aus dem
Flash zu lesen deaktivieren. Da aber der gleiche Quellcode auch
weiterhin im AVR laufen soll habe ich kurzerhand
#define PGM_VOID_P void*
#define PROGMEM
#define memcpy_P memcpy

u08 pgm_read_byte(u08 *data) {
return *data;
}

u16 pgm_read_word(u16 *data) {
return *data;
}


in einer extra Datei definiert, die dann nur bei der Compilierung für
den PC eingebunden wird.
Dort bekomm ich aber stets Warnungen wie:
Warnung: Übergabe des Arguments 1 von »pgm_read_byte« entfernt
Kennzeichner von Zeiger-Ziel-Typ

Hat jemand Tips wie ich meinen Code korrieren muss so dass der Compiler
keinen Grund mehr zur Beschwerde hat?

Darüberhinaus, weiß jemand wie ich die Fehlermeldungen auf englisch
umstelle? Da sich mit den englischen Fehlermeldungen doch deutlich mehr
Problemfälle (und Lösungen) mit Google finden ließen.

Schon mal Danke im Voraus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Als erstes wäre daconst uint8_t end = strlen(textbuff);
> Die Fehlermeldung ist:
> Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen«
> unterscheiden sich im Vorzeichenbesitz

Oh, Mann. Deutsche Fehlermeldungen.

Auf Englisch wuerde die Meldung wahrscheinlich lauten:
signed/unsigned mismatch in pointer argument 1 to strlen

Na klingelts jetzt?

> Warnung: Übergabe des Arguments 1 von »pgm_read_byte« entfernt
> Kennzeichner von Zeiger-Ziel-Typ

passing argument1 discards qualifier.

wahrscheinlich rufst Du die Funktion mit einem const Pointer
irgendwo auf.

> Darüberhinaus, weiß jemand wie ich die Fehlermeldungen auf englisch
> umstelle?

Keine Ahnung.
Ist aber eine weise Entscheidung dies zu tun.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Darüberhinaus, weiß jemand wie ich die Fehlermeldungen auf englisch
> umstelle?

export LANG=C

Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, damit konnte ich die Warnungen auflösen :-)

Also bei
const uint8_t end = strlen(textbuff);

war die Lösung dass textbuff vom Typ uint8_t war, was beim avr-gcc mit
dem Typ char zusammenpasste, beim normalem gcc jedoch nicht. Ändern des
Typs auf char löste dass Problem, ohne Nachteile (in Punkto
Speicherverbrauch) bei der Compilierung für den AVR zu haben.

Die anderen Warnungen ließen sich durch Ergänzen von const lösen:
#define PGM_VOID_P const void*
#define PROGMEM
#define memcpy_P memcpy

u08 pgm_read_byte(const u08 *data) {
return *data;
}

u16 pgm_read_word(const u16 *data) {
return *data;
} 

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau auch mal dein Makefile durch, vermutlich sind da GCC-Optionen
gesetzt wie:

-funsigned-char -funsigned-bitfields -fshort-enums

Die Verstellen die gcc Default Datentypen, "char" ist dann unsigned
char, enums sind short statt int...

Die selben Optionen müssten aber auch für den i386er-GCC funktionieren,
dann sollte sich das Problem von selbst lösen...

/Ernst

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.