Hallo
Ich erhalte überhaupt keine Warnungen:
Code:
void testfunc(void)
{ int time;
while (1)
{
if (time > 1) ;
}
}
void testfunc2(void)
{ int time;
while (1)
if (time > 1) ;
}
int main(void)
{
testfunc();
testfunc2();
while(1);
return(0);
}
Beide Varianten werden auch identisch übersetzt:
Code:
1 .file "test.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __CCP__ = 0x34
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
15 .Ltext0:
16 .global testfunc
18 testfunc:
19 .LFB2:
20 .LM1:
21 0000 DF93 push r29
22 0002 CF93 push r28
23 0004 00D0 rcall .
24 0006 CDB7 in r28,__SP_L__
25 0008 DEB7 in r29,__SP_H__
26 /* prologue: function */
27 /* frame size = 2 */
28 .L2:
29 000a 00C0 rjmp .L2
30 .LFE2:
32 .global testfunc2
34 testfunc2:
35 .LFB3:
36 .LM2:
37 .LM3:
38 000c DF93 push r29
39 000e CF93 push r28
40 0010 00D0 rcall .
41 0012 CDB7 in r28,__SP_L__
42 0014 DEB7 in r29,__SP_H__
43 /* prologue: function */
44 /* frame size = 2 */
45 .L5:
46 0016 00C0 rjmp .L5
47 .LFE3:
49 .global main
51 main:
52 .LFB4:
53 .LM4:
54 .LM5:
55 0018 DF93 push r29
56 001a CF93 push r28
57 001c CDB7 in r28,__SP_L__
58 001e DEB7 in r29,__SP_H__
59 /* prologue: function */
60 /* frame size = 0 */
61 .LM6:
62 0020 00D0 rcall testfunc
63 .LM7:
64 0022 00D0 rcall testfunc2
65 .L8:
66 0024 00C0 rjmp .L8
67 .LFE4:
109 .Letext0:
DEFINED SYMBOLS
*ABS*:00000000 test.c
C:\Users\mic\AppData\Local\Temp/cciawUNb.s:2 *ABS*:0000003f __SREG__
C:\Users\mic\AppData\Local\Temp/cciawUNb.s:3 *ABS*:0000003e __SP_H__
C:\Users\mic\AppData\Local\Temp/cciawUNb.s:4 *ABS*:0000003d __SP_L__
C:\Users\mic\AppData\Local\Temp/cciawUNb.s:5 *ABS*:00000034 __CCP__
C:\Users\mic\AppData\Local\Temp/cciawUNb.s:6 *ABS*:00000000 __tmp_reg__
C:\Users\mic\AppData\Local\Temp/cciawUNb.s:7 *ABS*:00000001 __zero_reg__
C:\Users\mic\AppData\Local\Temp/cciawUNb.s:18 .text:00000000 testfunc
C:\Users\mic\AppData\Local\Temp/cciawUNb.s:34 .text:0000000c testfunc2
C:\Users\mic\AppData\Local\Temp/cciawUNb.s:51 .text:00000018 main
NO UNDEFINED SYMBOLS
Spannenderweise fehlt aber in beiden Versionen die if-Abfrage! Der leicht abgewandelte Code erzeugt ein besseres Ergebniss:
Code:
void testfunc(void)
{ int time;
while (1)
{
if (time > 1) time=1;
}
}
int main(void)
{
while(1);
return(0);
}
bindet auch die Abfrage und die Zuweisung ein:
Code:
29 .LM2:
30 000a 8981 ldd r24,Y+1
31 000c 9A81 ldd r25,Y+2
32 000e 8230 cpi r24,2
33 0010 9105 cpc r25,__zero_reg__
34 0012 04F0 brlt .L3
35 0014 81E0 ldi r24,lo8(1)
36 0016 90E0 ldi r25,hi8(1)
37 0018 9A83 std Y+2,r25
38 001a 8983 std Y+1,r24
39 001c 00C0 rjmp .L3
Wieder wurde alles warnungs- und fehlerfrei übersetzt.
Gruß
mic
Lesezeichen