Typ char wird ignoriert

OP #40737
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
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
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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.