精华区的错误收藏会误导初学者对编译器工具性能GCC的错误认识!! 理由如下:testa.c的测试中编译后的82个字节是不能再省的编译代码!! 已经有高手出示了证据如下: ************************************************************** 宇宙飞船 发表于 2007-9-17 17:06 AVR 单片机 ←返回版面 29楼: 楼主的第一条测试GCC才用了6条指令14字节,共:82字节 Size after: AVR Memory Usage ---------------- Device: atmega48
Program: 82 bytes (2.0% Full) (.text + .data + .bootloader)
Data: 0 bytes (0.0% Full) (.data + .bss + .noinit)
-------- end --------
> Process Exit Code: > Time Taken: 00:05 ******************************************* 00000000 <__vectors>: //这段代码50字节必需: 0: 28 c0 rjmp .+80 ; 0x52 <__data_load_end> 2: 20 c0 rjmp .+64 ; 0x44 <__bad_interrupt> 4: 1f c0 rjmp .+62 ; 0x44 <__bad_interrupt> 6: 1e c0 rjmp .+60 ; 0x44 <__bad_interrupt> 8: 1d c0 rjmp .+58 ; 0x44 <__bad_interrupt> a: 1c c0 rjmp .+56 ; 0x44 <__bad_interrupt> c: 1b c0 rjmp .+54 ; 0x44 <__bad_interrupt> e: 1a c0 rjmp .+52 ; 0x44 <__bad_interrupt> 10: 19 c0 rjmp .+50 ; 0x44 <__bad_interrupt> 12: 18 c0 rjmp .+48 ; 0x44 <__bad_interrupt> 14: 17 c0 rjmp .+46 ; 0x44 <__bad_interrupt> 16: 16 c0 rjmp .+44 ; 0x44 <__bad_interrupt> 18: 15 c0 rjmp .+42 ; 0x44 <__bad_interrupt> 1a: 14 c0 rjmp .+40 ; 0x44 <__bad_interrupt> 1c: 13 c0 rjmp .+38 ; 0x44 <__bad_interrupt> 1e: 12 c0 rjmp .+36 ; 0x44 <__bad_interrupt> 20: 11 c0 rjmp .+34 ; 0x44 <__bad_interrupt> 22: 10 c0 rjmp .+32 ; 0x44 <__bad_interrupt> 24: 0f c0 rjmp .+30 ; 0x44 <__bad_interrupt> 26: 0e c0 rjmp .+28 ; 0x44 <__bad_interrupt> 28: 0d c0 rjmp .+26 ; 0x44 <__bad_interrupt> 2a: 0c c0 rjmp .+24 ; 0x44 <__bad_interrupt> 2c: 0b c0 rjmp .+22 ; 0x44 <__bad_interrupt> 2e: 0a c0 rjmp .+20 ; 0x44 <__bad_interrupt> 30: 09 c0 rjmp .+18 ; 0x44 <__bad_interrupt> 32: 08 c0 rjmp .+16 ; 0x44 <__bad_interrupt>
00000034 <__ctors_end>: //初始化STACK这段代码必需 34: 11 24 eor r1, r1 36: 1f be out 0x3f, r1 ; 63 38: cf ef ldi r28, 0xFF ; 255 3a: d2 e0 ldi r29, 0x02 ; 2 3c: de bf out 0x3e, r29 ; 62 3e: cd bf out 0x3d, r28 ; 61 40: 02 d0 rcall .+4 ; 0x46 <main> 42: 07 c0 rjmp .+14 ; 0x52 <__data_load_end> ********************************************************* 00000044 <__bad_interrupt>: //出错处理,重新启动。 44: dd cf rjmp .-70 ; 0x0 <__heap_end> //****************************以上68个字节必不可少************ 00000046 <main>: {
unsigned int a,b,c; unsigned char buf; DDRD =0xff; 46: 8f ef ldi r24, 0xFF ; 255 48: 8a b9 out 0x0a, r24 ; 10 4a: 80 e0 ldi r24, 0x00 ; 0 a=100; b=200; c=300; buf=0; while(1) { buf++; 4c: 8f 5f subi r24, 0xFF ; 255 PORTD =buf; 4e: 8b b9 out 0x0b, r24 ; 11 50: fd cf rjmp .-6 ; 0x4c <main+0x6> Disassembly of section .fini0:
00000052 <__stop_program>: 52: ff cf rjmp .-2 ; 0x52 <__data_load_end> |