AVR-GCC: __int24

OP #3586761
Lesenswert?
• ▲
▼
Hallo zusammen,
der AVR-GCC verfügt ja über einen Datentyp __int24, den ich auf dem AVR 
gerne so nutze:
1
typedef __int24int_least24_t;
(auf dem ARM ist er dann als als int32 definiert).

Gibt es eine Möglichkeit einen PRIxLEAST24 (sozusagen wie PRIxLEAST16) 
zu definieren, um diesen Datentyp direkt mit printf ausgeben zu können?

Viele Grüße
W.T.
Moderator Persönliche Seite #3587786
Lesenswert?
• ▲
▼
Johann L. schrieb:
> Nein. Die Libc wurd enicht erweitert.

Könnte man allerdings tun, müsste mal jemand einen Bugreport einkippen.

> Nimm einfach den nächst größeren
> Typ, alse 32 Bit.

Wie sieht das mit der integer promotion hier aus?  Das Argument ist
ja in einer variadischen Liste.  Wird es da zu unsigned long promotet,
oder landet es wirklich nur mit 3 Bytes auf dem Stack?  In letzterem
Falle müsste ja auch vfprintf() selbst erweitert werden.
Moderator Persönliche Seite #3587825
Lesenswert?
• ▲
▼
A. K. schrieb:
> Wobei printf dann noch grösser wird als bisher.

Nur für den Fall, dass sie tatsächlich mit 3 Byte auf dem Stack landen,
aber dann wäre es auch tödlich, den Fall nicht zu behandeln (weil sich
alle nachfolgenden Argumente verschieben).

Für den Fall, dass er sowieso auf 32 bits promotet wird, wäre
PRIxLEAST24 nur ein (weiterer) Alias für "lx" im Headerfile.
Persönliche Seite #3587865
Lesenswert?
• ▲
▼
Das avr-Backend definiert momentan keine Promotion-Regeln, d.h. 3-Byte 
Typen werden als solche übergeben.  Variadische Funktionen müssen also 
genau 3 Bytes abholen; ansonsten darf man mit Problemen rechnen.

Für Standard-Funktionen wie prinf find ich es ausreichend, Warnungen zu 
beachten wie sie mit -Wformat (ist Teil von -Wall) ausgegeben werden.

Dies bedeutet dann, die 3-Byte Typen per Cast als 4-Byte Typ zu 
übergeben und Modifier wie %ld zu verwenden. Die Extension und den einen 
PUSH mehr kann man gut verschmerzen bei dem Wust, den die stdio 
Funktionen ohnehin bedingen.

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.