Portierung von AVR zu PC (Fehlermeldungen)

OP Persönliche Seite #363829
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
1
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/libc.html#String%20Length
http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html#ga17

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
1
#define PGM_VOID_P void*
2
#define PROGMEM
3
#define memcpy_P memcpy
4

5
u08 pgm_read_byte(u08 *data) {
6
return *data;
7
}
8

9
u16 pgm_read_word(u16 *data) {
10
return *data;
11
}

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
#363830
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.
OP Persönliche Seite #363832
Lesenswert?
• ▲
▼
Danke, damit konnte ich die Warnungen auflösen :-)

Also bei
1
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:
1
#define PGM_VOID_P const void*
2
#define PROGMEM
3
#define memcpy_P memcpy
4

5
u08 pgm_read_byte(const u08 *data) {
6
return *data;
7
}
8

9
u16 pgm_read_word(const u16 *data) {
10
return *data;
11
}
#363833
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.