test3.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn 0 .text 000000f8 00000000 00000000 00000094 2**0 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .data 00000006 00800060 000000f8 0000018c 2**0 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00800066 000000fe 00000192 2**0 ALLOC 3 .noinit 00000000 00800066 00800066 00000192 2**0 CONTENTS 4 .eeprom 00000000 00810000 00810000 00000192 2**0 CONTENTS 5 .stab 000006b4 00000000 00000000 00000194 2**2 CONTENTS, READONLY, DEBUGGING 6 .stabstr 0000083e 00000000 00000000 00000848 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: 0: 0c 94 2d 00 jmp 0x5a 4: 0c 94 48 00 jmp 0x90 8: 0c 94 48 00 jmp 0x90 c: 0c 94 48 00 jmp 0x90 10: 0c 94 48 00 jmp 0x90 14: 0c 94 48 00 jmp 0x90 18: 0c 94 48 00 jmp 0x90 1c: 0c 94 48 00 jmp 0x90 20: 0c 94 48 00 jmp 0x90 24: 0c 94 48 00 jmp 0x90 28: 0c 94 48 00 jmp 0x90 2c: 0c 94 48 00 jmp 0x90 30: 0c 94 48 00 jmp 0x90 34: 0c 94 48 00 jmp 0x90 38: 0c 94 48 00 jmp 0x90 3c: 0c 94 48 00 jmp 0x90 40: 0c 94 48 00 jmp 0x90 44: 0c 94 48 00 jmp 0x90 48: 0c 94 48 00 jmp 0x90 4c: 0c 94 48 00 jmp 0x90 50: 0c 94 48 00 jmp 0x90 00000054 <__ctors_end>: 54: 48 49 sbci r20, 0x98 ; 152 00000056 <__c.0>: 56: 6c 6d 00 00 lm.. 0000005a <__init>: 5a: 11 24 eor r1, r1 5c: 1f be out 0x3f, r1 ; 63 5e: cf e5 ldi r28, 0x5F ; 95 60: d8 e0 ldi r29, 0x08 ; 8 62: de bf out 0x3e, r29 ; 62 64: cd bf out 0x3d, r28 ; 61 00000066 <__do_copy_data>: 66: 10 e0 ldi r17, 0x00 ; 0 68: a0 e6 ldi r26, 0x60 ; 96 6a: b0 e0 ldi r27, 0x00 ; 0 6c: e8 ef ldi r30, 0xF8 ; 248 6e: f0 e0 ldi r31, 0x00 ; 0 70: 02 c0 rjmp .+4 ; 0x76 00000072 <.do_copy_data_loop>: 72: 05 90 lpm r0, Z+ 74: 0d 92 st X+, r0 00000076 <.do_copy_data_start>: 76: a6 36 cpi r26, 0x66 ; 102 78: b1 07 cpc r27, r17 7a: d9 f7 brne .-10 ; 0x72 0000007c <__do_clear_bss>: 7c: 10 e0 ldi r17, 0x00 ; 0 7e: a6 e6 ldi r26, 0x66 ; 102 80: b0 e0 ldi r27, 0x00 ; 0 82: 01 c0 rjmp .+2 ; 0x86 00000084 <.do_clear_bss_loop>: 84: 1d 92 st X+, r1 00000086 <.do_clear_bss_start>: 86: a6 36 cpi r26, 0x66 ; 102 88: b1 07 cpc r27, r17 8a: e1 f7 brne .-8 ; 0x84 8c: 0c 94 5b 00 jmp 0xb6 00000090 <__bad_interrupt>: 90: 0c 94 00 00 jmp 0x0 00000094 : // define a constant string in ROM (see avr/pgmspace.h for prog_char and PGM_P) prog_char hi [2] = "HI"; void sendROMString(PGM_P str) { 94: 9c 01 movw r18, r24 char c; while ((c = pgm_read_byte(str++)) != '\0') { UDR = c; 96: f9 01 movw r30, r18 98: 2f 5f subi r18, 0xFF ; 255 9a: 3f 4f sbci r19, 0xFF ; 255 9c: 84 91 lpm r24, Z 9e: 88 23 and r24, r24 a0: 11 f0 breq .+4 ; 0xa6 a2: 8c b9 out 0x0c, r24 ; 12 a4: f8 cf rjmp .-16 ; 0x96 a6: 08 95 ret 000000a8 : // wait till data finished transmitting } } void sendRAMString(char *str) { a8: fc 01 movw r30, r24 char c; while ((c = *str++) != '\0') { UDR = c; aa: 81 91 ld r24, Z+ ac: 88 23 and r24, r24 ae: 11 f0 breq .+4 ; 0xb4 b0: 8c b9 out 0x0c, r24 ; 12 b2: fb cf rjmp .-10 ; 0xaa b4: 08 95 ret 000000b6
: // wait till data finished transmitting } } int main(void) { b6: cf e5 ldi r28, 0x5F ; 95 b8: d8 e0 ldi r29, 0x08 ; 8 ba: de bf out 0x3e, r29 ; 62 bc: cd bf out 0x3d, r28 ; 61 UDR = a; // what you were doing (1) be: 80 91 64 00 lds r24, 0x0064 c2: 8c b9 out 0x0c, r24 ; 12 UDR = de[0]; // what you were doing (2) c4: 80 91 62 00 lds r24, 0x0062 c8: 8c b9 out 0x0c, r24 ; 12 UDR = fg[0]; ca: 86 e4 ldi r24, 0x46 ; 70 cc: 8c b9 out 0x0c, r24 ; 12 sendRAMString(de); ce: 82 e6 ldi r24, 0x62 ; 98 d0: 90 e0 ldi r25, 0x00 ; 0 d2: 0e 94 54 00 call 0xa8 sendROMString(hi); d6: 84 e5 ldi r24, 0x54 ; 84 d8: 90 e0 ldi r25, 0x00 ; 0 da: 0e 94 4a 00 call 0x94 sendROMString(PSTR("lm")); // shortcut if you just want an anonymous constant string in ROM de: 86 e5 ldi r24, 0x56 ; 86 e0: 90 e0 ldi r25, 0x00 ; 0 e2: 0e 94 4a 00 call 0x94 UDR = pgm_read_byte(hi); // send 'h' e6: e4 e5 ldi r30, 0x54 ; 84 e8: f0 e0 ldi r31, 0x00 ; 0 ea: 84 91 lpm r24, Z ec: 8c b9 out 0x0c, r24 ; 12 return 0; } ee: 80 e0 ldi r24, 0x00 ; 0 f0: 90 e0 ldi r25, 0x00 ; 0 f2: 0c 94 7b 00 jmp 0xf6 000000f6 <_exit>: f6: ff cf rjmp .-2 ; 0xf6