Gast
#845235
Hallo, wenn ich unter avr-gcc (-O2) auf die Bytes in einem uint16_t (oder breiter) zugreifen möchte, um diese beispielsweise an eine (8-Bit) IO Adresse auszugeben, wird unnötiger Code generiert (siehe Beispiel). Beispiel C (disassembly) (zugegeben, nicht besonders sinnvoll):
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
im Anhang das gleiche Beispiel nochmal für uint32. Wie kann ich dem Compiler beibiegen, bei Zuweisungen von (variable>>(n*8))-Konstrukten direkt auf die Register zuzugreifen, in denen die Werte liegen? Z.B. könnte an Adresse 0x6e einfacher stehen out 0x18,r19 und die Befehle an Adressen 0x6a-0x6d wären unnötig. Und so weiter. Kann man das sicher mit C-Syntax erschlagen oder muss man da auf Assembler zurückgreifen? Grüße, Sebastian