GTR_Neu_IV.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000326 00000000 00000000 00000074 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .bss 0000043c 00800100 00800100 0000039a 2**0 ALLOC 2 .stab 00000f30 00000000 00000000 0000039c 2**2 CONTENTS, READONLY, DEBUGGING 3 .stabstr 00000b81 00000000 00000000 000012cc 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: 0: 0c 94 38 00 jmp 0x70 ; 0x70 <__ctors_end> 4: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 8: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 10: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 14: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 18: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 1c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 20: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 24: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 28: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 2c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 30: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 34: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 38: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 3c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 40: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 44: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 48: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 4c: 0c 94 55 00 jmp 0xaa ; 0xaa <__vector_19> 50: 0c 94 76 00 jmp 0xec ; 0xec <__vector_20> 54: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 58: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 5c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 60: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 64: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 68: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 6c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 00000070 <__ctors_end>: 70: 11 24 eor r1, r1 72: 1f be out 0x3f, r1 ; 63 74: cf ef ldi r28, 0xFF ; 255 76: d4 e0 ldi r29, 0x04 ; 4 78: de bf out 0x3e, r29 ; 62 7a: cd bf out 0x3d, r28 ; 61 0000007c <__do_copy_data>: 7c: 11 e0 ldi r17, 0x01 ; 1 7e: a0 e0 ldi r26, 0x00 ; 0 80: b1 e0 ldi r27, 0x01 ; 1 82: e6 e2 ldi r30, 0x26 ; 38 84: f3 e0 ldi r31, 0x03 ; 3 86: 02 c0 rjmp .+4 ; 0x8c <.do_copy_data_start> 00000088 <.do_copy_data_loop>: 88: 05 90 lpm r0, Z+ 8a: 0d 92 st X+, r0 0000008c <.do_copy_data_start>: 8c: a0 30 cpi r26, 0x00 ; 0 8e: b1 07 cpc r27, r17 90: d9 f7 brne .-10 ; 0x88 <.do_copy_data_loop> 00000092 <__do_clear_bss>: 92: 15 e0 ldi r17, 0x05 ; 5 94: a0 e0 ldi r26, 0x00 ; 0 96: b1 e0 ldi r27, 0x01 ; 1 98: 01 c0 rjmp .+2 ; 0x9c <.do_clear_bss_start> 0000009a <.do_clear_bss_loop>: 9a: 1d 92 st X+, r1 0000009c <.do_clear_bss_start>: 9c: ac 33 cpi r26, 0x3C ; 60 9e: b1 07 cpc r27, r17 a0: e1 f7 brne .-8 ; 0x9a <.do_clear_bss_loop> a2: 0c 94 ac 00 jmp 0x158 ; 0x158
000000a6 <__bad_interrupt>: a6: 0c 94 00 00 jmp 0 ; 0x0 <__heap_end> 000000aa <__vector_19>: ISR(USART0_RXC_vect) { aa: 1f 92 push r1 ac: 0f 92 push r0 ae: 0f b6 in r0, 0x3f ; 63 b0: 0f 92 push r0 b2: 11 24 eor r1, r1 b4: 8f 93 push r24 b6: 9f 93 push r25 //UART0 Interrupt Routine if (ucUDR_valid0) b8: 80 91 01 01 lds r24, 0x0101 bc: 88 23 and r24, r24 be: 49 f0 breq .+18 ; 0xd2 <__vector_19+0x28> { uiVerloreneZeichen0++; c0: 80 91 76 04 lds r24, 0x0476 c4: 90 91 77 04 lds r25, 0x0477 c8: 01 96 adiw r24, 0x01 ; 1 ca: 90 93 77 04 sts 0x0477, r25 ce: 80 93 76 04 sts 0x0476, r24 // Die Auswertung dieser Zahl kann spŠter helfen, wenn man den // 1 Byte Puffer in einen Mehrbyte-Puffer nach dem FIFO Prinzip // umrŸsten will. Damit kann man eine AbschŠtzung der gŸnstigen // Puffergršsse vornehmen. } //Empfangenes Byte in ucUDR0 einlesen ucUDR0 = UDR0; d2: 8c b1 in r24, 0x0c ; 12 d4: 80 93 00 01 sts 0x0100, r24 //ucUDR_valid0 setzen ucUDR_valid0 = 1; d8: 81 e0 ldi r24, 0x01 ; 1 da: 80 93 01 01 sts 0x0101, r24 de: 9f 91 pop r25 e0: 8f 91 pop r24 e2: 0f 90 pop r0 e4: 0f be out 0x3f, r0 ; 63 e6: 0f 90 pop r0 e8: 1f 90 pop r1 ea: 18 95 reti 000000ec <__vector_20>: // Nicht mehr! } ISR(USART1_RXC_vect) { ec: 1f 92 push r1 ee: 0f 92 push r0 f0: 0f b6 in r0, 0x3f ; 63 f2: 0f 92 push r0 f4: 11 24 eor r1, r1 f6: 8f 93 push r24 f8: 9f 93 push r25 //UART1 Interrupt Routine if (ucUDR_valid1) fa: 80 91 03 01 lds r24, 0x0103 fe: 88 23 and r24, r24 100: 49 f0 breq .+18 ; 0x114 <__vector_20+0x28> { uiVerloreneZeichen1++; 102: 80 91 74 04 lds r24, 0x0474 106: 90 91 75 04 lds r25, 0x0475 10a: 01 96 adiw r24, 0x01 ; 1 10c: 90 93 75 04 sts 0x0475, r25 110: 80 93 74 04 sts 0x0474, r24 // Die Auswertung dieser Zahl kann spŠter helfen, wenn man den // 1 Byte Puffer in einen Mehrbyte-Puffer nach dem FIFO Prinzip // umrŸsten will. Damit kann man eine AbschŠtzung der gŸnstigen // Puffergršsse vornehmen. } //Empfangenes Byte in ucUDR1 einlesen ucUDR1 = UDR1; 114: 83 b1 in r24, 0x03 ; 3 116: 80 93 02 01 sts 0x0102, r24 //ucUDR_valid1 setzen ucUDR_valid1 = 1; 11a: 81 e0 ldi r24, 0x01 ; 1 11c: 80 93 03 01 sts 0x0103, r24 120: 9f 91 pop r25 122: 8f 91 pop r24 124: 0f 90 pop r0 126: 0f be out 0x3f, r0 ; 63 128: 0f 90 pop r0 12a: 1f 90 pop r1 12c: 18 95 reti 0000012e : // Nicht mehr! } void Transmit0(int Senden) { 12e: 9c 01 movw r18, r24 */ void _delay_loop_2(uint16_t __count) { __asm__ volatile ( 130: 81 e5 ldi r24, 0x51 ; 81 132: 9f e1 ldi r25, 0x1F ; 31 134: 01 97 sbiw r24, 0x01 ; 1 136: f1 f7 brne .-4 ; 0x134 //Sende Rutine UART0 //WARTESCHLEIFE!!!!!!! _delay_ms(4.35); //Warten bis gesendet werden kann while (!(UCSR0A & (1< { } //UDR0 senden UDR0 = Senden; 13c: 2c b9 out 0x0c, r18 ; 12 13e: 08 95 ret 00000140 : } void Transmit1(int Senden) { 140: 9c 01 movw r18, r24 */ void _delay_loop_2(uint16_t __count) { __asm__ volatile ( 142: 81 e5 ldi r24, 0x51 ; 81 144: 9f e1 ldi r25, 0x1F ; 31 146: 01 97 sbiw r24, 0x01 ; 1 148: f1 f7 brne .-4 ; 0x146 //Sende Rutine UART1 //WARTESCHLEIFE!!!!!!! _delay_ms(4.35); //Warten bis gesendet werden kann while (!(UCSR1A & (1< { } //UDR1 senden UDR1 = Senden; 14e: 23 b9 out 0x03, r18 ; 3 150: 08 95 ret 00000152 : } void Save0(void) { for (i=0; i>16; i++) { 152: 10 92 fb 02 sts 0x02FB, r1 156: 08 95 ret 00000158
: switch (Header0[12]) { case 'A': A0[i] = Data0[i]; case 'B': B0[i] = Data0[i]; case 'C': C0[i] = Data0[i]; case 'D': D0[i] = Data0[i]; case 'E': E0[i] = Data0[i]; case 'F': F0[i] = Data0[i]; case 'G': G0[i] = Data0[i]; case 'H': H0[i] = Data0[i]; case 'I': I0[i] = Data0[i]; case 'J': J0[i] = Data0[i]; case 'K': K0[i] = Data0[i]; case 'L': L0[i] = Data0[i]; case 'M': M0[i] = Data0[i]; case 'N': N0[i] = Data0[i]; case 'O': O0[i] = Data0[i]; case 'P': P0[i] = Data0[i]; case 'Q': W0[i] = Data0[i]; case 'R': R0[i] = Data0[i]; case 'S': S0[i] = Data0[i]; case 'T': T0[i] = Data0[i]; case 'U': U0[i] = Data0[i]; case 'V': V0[i] = Data0[i]; case 'W': W0[i] = Data0[i]; case 'X': X0[i] = Data0[i]; case 'Y': Y0[i] = Data0[i]; case 'Z': Z0[i] = Data0[i]; } } } int main(void) { uint8_t c; //Baudrate 9k6 UART0 UBRR0H = UBRR_VAL >> 8; 158: 10 bc out 0x20, r1 ; 32 UBRR0L = UBRR_VAL & 0xFF; 15a: 8f e2 ldi r24, 0x2F ; 47 15c: 89 b9 out 0x09, r24 ; 9 //Baudrate 9k6 UART1 UBRR1H = UBRR_VAL >> 8; 15e: 1c be out 0x3c, r1 ; 60 UBRR1L = UBRR_VAL & 0xFF; 160: 80 b9 out 0x00, r24 ; 0 //†bertragungsart UCSR1C |= (1< 1a4: 63 c0 rjmp .+198 ; 0x26c //Interrupts deaktivieren cli(); 1a6: f8 94 cli //Byte in c einlesen c = ucUDR0; // 1a8: 90 91 00 01 lds r25, 0x0100 //ucUDR_valid0 zurŸcksetzen ucUDR_valid0 = 0; 1ac: 10 92 01 01 sts 0x0101, r1 //Interrupts aktivieren sei(); 1b0: 78 94 sei //Header Init0 if(State0 == IDLE && c == 0x15) { 1b2: 80 91 9a 02 lds r24, 0x029A 1b6: 88 23 and r24, r24 1b8: 49 f4 brne .+18 ; 0x1cc 1ba: 95 31 cpi r25, 0x15 ; 21 1bc: 09 f0 breq .+2 ; 0x1c0 1be: 56 c0 rjmp .+172 ; 0x26c //Handshake Transmit0(0x13); 1c0: 83 e1 ldi r24, 0x13 ; 19 1c2: 90 e0 ldi r25, 0x00 ; 0 1c4: 0e 94 97 00 call 0x12e ; 0x12e //Status erhšhen State0 = REC_HEADER; 1c8: 81 e0 ldi r24, 0x01 ; 1 1ca: 16 c0 rjmp .+44 ; 0x1f8 } //Headerreceive0 else if(State0 == REC_HEADER) { 1cc: 81 30 cpi r24, 0x01 ; 1 1ce: b9 f4 brne .+46 ; 0x1fe //Bytes in header0 einlesen Header0[HeaderCounter0] = c; 1d0: 80 91 31 04 lds r24, 0x0431 1d4: e8 2f mov r30, r24 1d6: ff 27 eor r31, r31 1d8: ec 5e subi r30, 0xEC ; 236 1da: fe 4f sbci r31, 0xFE ; 254 1dc: 90 83 st Z, r25 //Bytecounter erhšhen HeaderCounter0++; 1de: 8f 5f subi r24, 0xFF ; 255 1e0: 80 93 31 04 sts 0x0431, r24 //Headerempfangen fertig? if(HeaderCounter0 == 50) { 1e4: 82 33 cpi r24, 0x32 ; 50 1e6: 09 f0 breq .+2 ; 0x1ea 1e8: 41 c0 rjmp .+130 ; 0x26c //Handshake Transmit0(0x06); 1ea: 86 e0 ldi r24, 0x06 ; 6 1ec: 90 e0 ldi r25, 0x00 ; 0 1ee: 0e 94 97 00 call 0x12e ; 0x12e //HeaderCounter0 zurŸcksetzen HeaderCounter0 = 0; 1f2: 10 92 31 04 sts 0x0431, r1 //Status erhšhen State0 = REC_DATA; 1f6: 82 e0 ldi r24, 0x02 ; 2 1f8: 80 93 9a 02 sts 0x029A, r24 1fc: 37 c0 rjmp .+110 ; 0x26c } } //Datareceive0 else if(State0 == REC_DATA) { 1fe: 82 30 cpi r24, 0x02 ; 2 200: a1 f4 brne .+40 ; 0x22a //Bytes in Data 0 speichern Data0[DataCounter0] = c; 202: 80 91 e0 03 lds r24, 0x03E0 206: e8 2f mov r30, r24 208: ff 27 eor r31, r31 20a: e5 55 subi r30, 0x55 ; 85 20c: fd 4f sbci r31, 0xFD ; 253 20e: 90 83 st Z, r25 //DataCounter erhšhen DataCounter0++; 210: 8f 5f subi r24, 0xFF ; 255 212: 80 93 e0 03 sts 0x03E0, r24 //Datenempfangen fertig? if(DataCounter0 == 16) { 216: 80 31 cpi r24, 0x10 ; 16 218: 49 f5 brne .+82 ; 0x26c //Handshake senden Transmit0(0x06); 21a: 86 e0 ldi r24, 0x06 ; 6 21c: 90 e0 ldi r25, 0x00 ; 0 21e: 0e 94 97 00 call 0x12e ; 0x12e //DataCounter0 zurŸcksetzen DataCounter0 = 0; 222: 10 92 e0 03 sts 0x03E0, r1 //State erhšhen State0 = REC_FOOTER; 226: 83 e0 ldi r24, 0x03 ; 3 228: e7 cf rjmp .-50 ; 0x1f8 } } //Endheader0 else if(State0 == REC_FOOTER) { 22a: 83 30 cpi r24, 0x03 ; 3 22c: f9 f4 brne .+62 ; 0x26c //Endheader einlesen EndHeader0[EndCounter0] = c; 22e: 80 91 89 04 lds r24, 0x0489 232: e8 2f mov r30, r24 234: ff 27 eor r31, r31 236: e2 5a subi r30, 0xA2 ; 162 238: fc 4f sbci r31, 0xFC ; 252 23a: 90 83 st Z, r25 //Endcounter erhšhen EndCounter0++; 23c: 8f 5f subi r24, 0xFF ; 255 23e: 80 93 89 04 sts 0x0489, r24 //Endheader fertig? if(EndCounter0 == 50) { 242: 82 33 cpi r24, 0x32 ; 50 244: 99 f4 brne .+38 ; 0x26c //Handshake senden Transmit0(0x06); 246: 86 e0 ldi r24, 0x06 ; 6 248: 90 e0 ldi r25, 0x00 ; 0 24a: 0e 94 97 00 call 0x12e ; 0x12e //Endcounter zurŸcksetzen EndCounter0 = 0; 24e: 10 92 89 04 sts 0x0489, r1 //†berprŸfen, ob gespeichert werden soll if (Header0[2] == 'V') { 252: 80 91 16 01 lds r24, 0x0116 256: 86 35 cpi r24, 0x56 ; 86 258: 11 f4 brne .+4 ; 0x25e //Status auf SAVE erhšhen State0 = SAVE; 25a: 84 e0 ldi r24, 0x04 ; 4 25c: 03 c0 rjmp .+6 ; 0x264 } //†berprŸfen, ob gesendet werden soll else if(Header0[2] == 'R') { 25e: 82 35 cpi r24, 0x52 ; 82 260: 19 f4 brne .+6 ; 0x268 //Status auf SEND erhšhen State0 = SEND; 262: 85 e0 ldi r24, 0x05 ; 5 264: 80 93 9a 02 sts 0x029A, r24 } //Status auf IDLE verringern State0 = IDLE; 268: 10 92 9a 02 sts 0x029A, r1 } } //Speichern0 else if(State0 == SAVE) { } } /////////////////////////////////////////////////////////////////////////////////////////////////////////// //Ein Zeichen ist auf UART 1 angekommen if(ucUDR_valid1) { 26c: 80 91 03 01 lds r24, 0x0103 270: 88 23 and r24, r24 272: 09 f4 brne .+2 ; 0x276 274: 93 cf rjmp .-218 ; 0x19c //Interrupts deaktivieren cli(); 276: f8 94 cli //Byte in c einlesen c = ucUDR1; // 278: 90 91 02 01 lds r25, 0x0102 //ucUDR_valid1 zurŸcksetzen ucUDR_valid1 = 0; 27c: 10 92 03 01 sts 0x0103, r1 //Interrupts aktivieren sei(); 280: 78 94 sei //Header Init1 if(State1 == IDLE && c == 0x15) { 282: 80 91 53 04 lds r24, 0x0453 286: 88 23 and r24, r24 288: 49 f4 brne .+18 ; 0x29c 28a: 95 31 cpi r25, 0x15 ; 21 28c: 09 f0 breq .+2 ; 0x290 28e: 86 cf rjmp .-244 ; 0x19c //Handshake Transmit1(0x13); 290: 83 e1 ldi r24, 0x13 ; 19 292: 90 e0 ldi r25, 0x00 ; 0 294: 0e 94 a0 00 call 0x140 ; 0x140 //Status erhšhen State1 = REC_HEADER; 298: 81 e0 ldi r24, 0x01 ; 1 29a: 16 c0 rjmp .+44 ; 0x2c8 } //Headerreceive1 else if(State1 == REC_HEADER) { 29c: 81 30 cpi r24, 0x01 ; 1 29e: b9 f4 brne .+46 ; 0x2ce //Bytes in header1 einlesen Header1[HeaderCounter1] = c; 2a0: 80 91 59 02 lds r24, 0x0259 2a4: e8 2f mov r30, r24 2a6: ff 27 eor r31, r31 2a8: e4 5e subi r30, 0xE4 ; 228 2aa: fc 4f sbci r31, 0xFC ; 252 2ac: 90 83 st Z, r25 //Bytecounter erhšhen HeaderCounter1++; 2ae: 8f 5f subi r24, 0xFF ; 255 2b0: 80 93 59 02 sts 0x0259, r24 //Headerempfangen fertig? if(HeaderCounter1 == 50) { 2b4: 82 33 cpi r24, 0x32 ; 50 2b6: 09 f0 breq .+2 ; 0x2ba 2b8: 71 cf rjmp .-286 ; 0x19c //Handshake Transmit1(0x06); 2ba: 86 e0 ldi r24, 0x06 ; 6 2bc: 90 e0 ldi r25, 0x00 ; 0 2be: 0e 94 a0 00 call 0x140 ; 0x140 //HeaderCounter1 zurŸcksetzen HeaderCounter1 = 0; 2c2: 10 92 59 02 sts 0x0259, r1 //Status erhšhen State1 = REC_DATA; 2c6: 82 e0 ldi r24, 0x02 ; 2 2c8: 80 93 53 04 sts 0x0453, r24 2cc: 67 cf rjmp .-306 ; 0x19c } } //Datareceive1 else if(State1 == REC_DATA) { 2ce: 82 30 cpi r24, 0x02 ; 2 2d0: a9 f4 brne .+42 ; 0x2fc //Bytes in Data 1 speichern Data1[DataCounter1] = c; 2d2: 80 91 ba 04 lds r24, 0x04BA 2d6: e8 2f mov r30, r24 2d8: ff 27 eor r31, r31 2da: e6 58 subi r30, 0x86 ; 134 2dc: fd 4f sbci r31, 0xFD ; 253 2de: 90 83 st Z, r25 //DataCounter erhšhen DataCounter1++; 2e0: 8f 5f subi r24, 0xFF ; 255 2e2: 80 93 ba 04 sts 0x04BA, r24 //Datenempfangen fertig? if(DataCounter1 == 16) { 2e6: 80 31 cpi r24, 0x10 ; 16 2e8: 09 f0 breq .+2 ; 0x2ec 2ea: 58 cf rjmp .-336 ; 0x19c //Handshake senden Transmit1(0x06); 2ec: 86 e0 ldi r24, 0x06 ; 6 2ee: 90 e0 ldi r25, 0x00 ; 0 2f0: 0e 94 a0 00 call 0x140 ; 0x140 //DataCounter1 zurŸcksetzen DataCounter1 = 0; 2f4: 10 92 ba 04 sts 0x04BA, r1 //State erhšhen State1 = REC_FOOTER; 2f8: 83 e0 ldi r24, 0x03 ; 3 2fa: e6 cf rjmp .-52 ; 0x2c8 } } //Endheader1 else if(State1 == REC_FOOTER) { 2fc: 83 30 cpi r24, 0x03 ; 3 2fe: 09 f0 breq .+2 ; 0x302 300: 4d cf rjmp .-358 ; 0x19c //Endheader einlesen EndHeader1[EndCounter1] = c; 302: 80 91 78 04 lds r24, 0x0478 306: e8 2f mov r30, r24 308: ff 27 eor r31, r31 30a: e9 59 subi r30, 0x99 ; 153 30c: fe 4f sbci r31, 0xFE ; 254 30e: 90 83 st Z, r25 //Endcounter erhšhen EndCounter1++; 310: 8f 5f subi r24, 0xFF ; 255 312: 80 93 78 04 sts 0x0478, r24 //Endheader fertig? if(EndCounter1 == 50) { 316: 82 33 cpi r24, 0x32 ; 50 318: 09 f0 breq .+2 ; 0x31c 31a: 40 cf rjmp .-384 ; 0x19c //Handshake senden Transmit1(0x06); 31c: 86 e0 ldi r24, 0x06 ; 6 31e: 90 e0 ldi r25, 0x00 ; 0 320: 0e 94 a0 00 call 0x140 ; 0x140 324: 37 cf rjmp .-402 ; 0x194