Typ char wird ignoriert

OP #40737
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
OP #40741
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
Gast #40743
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.

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.