Also:
1. Compiler ist der aus AVRStudio 6 (ich glaub GNU C Compiler)
2. ATXmega256A3
3. Soviel ich weiss, sind rückgaben von Funktionen immer in den
registern r25 und abwärts. Ich habe ins Disassembly geschaut und
gesehen, dass er in PORTA_OUT das register r24 schreibt:
1 | 00000125 MOVW R24,R28 Copy register pair
|
2 | 00000126 ADIW R24,0x01 Add immediate to word
|
3 | 00000127 LDI R22,0x00 Load immediate
|
4 | 00000128 LDI R23,0x00 Load immediate
|
5 | 00000129 LDI R20,0x10 Load immediate
|
6 | 0000012A LDI R21,0x00 Load immediate
|
7 | 0000012B CALL 0x0000013B Call subroutine
|
8 | 0000012D CLR R26 Clear Register
|
9 | 0000012E SBRC R25,7 Skip if bit in register cleared
|
10 | 0000012F COM R26 One's complement
|
11 | 00000130 MOV R27,R26 Copy register
|
12 | PORTA_OUT = t;
|
13 | 00000131 STS 0x0604,R24 Store direct to data space
|
also ist die rückgabe der Funktion für ihn 16 Bit. R24/25 und somit t
ist aber 0. Dafür ist R22 neu 0x66. Das würde sinn machen, wenn die
Funktion 32Bit zurückgibt.
4. Oh, das hab ich vergessen. Es ändert aber nichts.
5. Ob mit oder ohne stdlib.h, er gibt keine Fehler/Warnungen aus.
@Peter II: Das hab ich noch reingemacht, um zu testen, ob die Funktion
wirklich bei einem Zeichen abbricht, das er nicht lesen kann (und nicht
nur bei '/0')
@Bastler: Das weiss ich schon. Sorry, das x hat verwirrt. Wenn ich
FCA86421 eingebe, ist t 0xA8, was meine Hypothese stützt.