Forum: Compiler & IDEs Typ char wird ignoriert


von Peter D. (peda)


Lesenswert?

Nach dem Blick ins Listing habe ich gemerkt, daß der Returnwert immer
als 16Bit erzeugt wird, d.h. der Typ char wird ignoriert.

Muß ich da noch einen speziellen Schalter setzen oder ist das immer so,
daß 6 Byte überflüssiger Code erzeugt werden.


char get_key_press( void )
{
  char i;

  cli();
  i = key_press;                        // read keys
  key_press = 0;                        // clear keys
  sei();
  return i;
}

0000004a <_Z13get_key_pressv>:
  4a:   f8 94           cli
  4c:   80 91 61 00     lds     r24, 0x0061
  50:   10 92 61 00     sts     0x0061, r1
  54:   78 94           sei
  56:   99 27           eor     r25, r25
  58:   87 fd           sbrc    r24, 7
  5a:   90 95           com     r25
  5c:   08 95           ret


Peter

von Joerg Wunsch (Gast)


Lesenswert?

Das ist dokumentiert (mitsamt Begründung):

http://savannah.nongnu.org/download/avr-libc/doc/avr-libc-user-manual/FAQ.html#faq_reg_usage

Es ist folglich sinnvoller, unsigned char zurückzugeben.

von Peter D. (peda)


Lesenswert?

@Joerg.

Danke.

Da steht aber nur, daß es so ist, aber nicht warum.

Peter

von Joerg Wunsch (Gast)


Lesenswert?

Doch: um die Möglichkeit der Benutzung der wortorientierten Befehle
auf dem »enhanced core« (ATmega* außer 103) zu verbessern.

von Peter D. (peda)


Lesenswert?

Ich bin wohl zu doof die Stelle zu finden. Ich habe nur gefunden, daß
deswegen geradzahlige Register (R24, R22, R20 usw.) genommen werden:

"All arguments are aligned to start in even-numbered registers
(odd-sized arguments, including char, have one free register above
them). This allows making better use of the movw instruction on the
enhanced core."

Aber nichts, warum R25 auch gesetzt wird.


So wie es aussieht, ist es wohl das beste, grundsätzlich alle
Returnwerte als mindestens "unsigned int" zu definieren. Damit ist
dann die Erweiterung wenigstens nicht doppelt, wenn der Aufrufer das
Ergebnis z.B. zu einem "int" addiert.


Peter

von Joerg Wunsch (Gast)


Lesenswert?

Hmm, hast recht.

Frag ansonsten mal auf der avr-gcc Liste, aber um Marek Michal

von Joerg Wunsch (Gast)


Lesenswert?

Oops, sorry, man sollte nicht mehrere Dinge gleichzeitig tun.

Der letzte Teilsatz sollte heißen:

..., aber um Marek Michalkiewicz ist es in letzter Zeit dort auch
recht ruhig geworden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.