Hey, folgendes Problem
aus:
1 | unsigned char charset(unsigned char val)
|
2 | {
|
3 |
|
4 | switch (val)
|
5 | {
|
6 | case 0:
|
7 | return (~((1<<5)|(1<<7)|(1<<3)|(1<<1)|(1<<2)|(1<<6)));
|
8 | case 1:
|
9 | return (~((1<<7)|(1<<3)));
|
10 | case 2:
|
11 | return (~((1<<5)|(1<<7)|(1<<4)|(1<<2)|(1<<1)));
|
12 | case 3:
|
13 | return (~((1<<5)|(1<<7)|(1<<4)|(1<<3)|(1<<1)));
|
14 |
|
15 | case 4:
|
16 | return (~((1<<6)|(1<<4)|(1<<7)|(1<<3)));
|
17 | case 5:
|
18 | return (~((1<<5)|(1<<6)|(1<<4)|(1<<3)|(1<<1)));
|
19 |
|
20 | case 6:
|
21 | return (~((1<<5)|(1<<6)|(1<<4)|(1<<3)|(1<<1)|(1<<2)));
|
22 |
|
23 | case 7:
|
24 | return (~((1<<5)|(1<<7)|(1<<3)));
|
25 | case 8:
|
26 | return
|
27 | (~((1<<5)|(1<<7)|(1<<4)|(1<<3)|(1<<1)|(1<<2)|(1<<6)));
|
28 | case 9:
|
29 | return (~((1<<5)|(1<<7)|(1<<4)|(1<<3)|(1<<1)|(1<<6)));
|
30 |
|
31 | }
|
32 |
|
33 | return 0;
|
34 | }
|
wird in der list datei (GEKÜRZT!):
1 | 119 0040 9927 clr r25
|
2 | 120 0042 8430 cpi r24,4
|
3 | 121 0044 9105 cpc r25,__zero_reg__
|
4 | 122 0046 81F1 breq .L16
|
5 |
|
6 | //SCHNITT (hier wären die ganzen andern switch cases..
|
7 |
|
8 | 183 .L16:
|
9 | 184 .LM19:
|
10 | 185 00a8 87E2 ldi r24,lo8(39)
|
11 | 186 00aa 90E0 ldi r25,hi8(39)
|
12 | 187 00ac 0895 ret
|
Warum macht er aus dem Rückgabewert aufeinmal 16Bit? Der höchste
zurückgegebene Wert ist übrigens 133.