hdlc_screen.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn 0 .data 00000242 00800100 00001d52 00001de6 2**0 CONTENTS, ALLOC, LOAD, DATA 1 .text 00001d52 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .bss 00000054 00800342 00800342 00002028 2**0 ALLOC 3 .comment 0000008c 00000000 00000000 00002028 2**0 CONTENTS, READONLY 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 000020b4 2**2 CONTENTS, READONLY 5 .debug_aranges 00000320 00000000 00000000 000020f4 2**0 CONTENTS, READONLY, DEBUGGING 6 .debug_info 0000378f 00000000 00000000 00002414 2**0 CONTENTS, READONLY, DEBUGGING 7 .debug_abbrev 00001589 00000000 00000000 00005ba3 2**0 CONTENTS, READONLY, DEBUGGING 8 .debug_line 00001e37 00000000 00000000 0000712c 2**0 CONTENTS, READONLY, DEBUGGING 9 .debug_frame 000009a0 00000000 00000000 00008f64 2**2 CONTENTS, READONLY, DEBUGGING 10 .debug_str 00000cc5 00000000 00000000 00009904 2**0 CONTENTS, READONLY, DEBUGGING 11 .debug_loc 00002fe7 00000000 00000000 0000a5c9 2**0 CONTENTS, READONLY, DEBUGGING 12 .debug_ranges 000002e8 00000000 00000000 0000d5b0 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: 0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end> 4: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 8: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 10: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 14: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 18: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 1c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 20: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 24: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 28: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 2c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 30: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 34: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 38: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 3c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 40: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 44: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 48: 0c 94 10 0b jmp 0x1620 ; 0x1620 <__vector_18> 4c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 50: 0c 94 42 0b jmp 0x1684 ; 0x1684 <__vector_20> 54: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 58: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 5c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 60: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 64: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 00000068 <__ctors_end>: 68: 11 24 eor r1, r1 6a: 1f be out 0x3f, r1 ; 63 6c: cf ef ldi r28, 0xFF ; 255 6e: d8 e0 ldi r29, 0x08 ; 8 70: de bf out 0x3e, r29 ; 62 72: cd bf out 0x3d, r28 ; 61 00000074 <__do_copy_data>: 74: 13 e0 ldi r17, 0x03 ; 3 76: a0 e0 ldi r26, 0x00 ; 0 78: b1 e0 ldi r27, 0x01 ; 1 7a: e2 e5 ldi r30, 0x52 ; 82 7c: fd e1 ldi r31, 0x1D ; 29 7e: 02 c0 rjmp .+4 ; 0x84 <__do_copy_data+0x10> 80: 05 90 lpm r0, Z+ 82: 0d 92 st X+, r0 84: a2 34 cpi r26, 0x42 ; 66 86: b1 07 cpc r27, r17 88: d9 f7 brne .-10 ; 0x80 <__do_copy_data+0xc> 0000008a <__do_clear_bss>: 8a: 23 e0 ldi r18, 0x03 ; 3 8c: a2 e4 ldi r26, 0x42 ; 66 8e: b3 e0 ldi r27, 0x03 ; 3 90: 01 c0 rjmp .+2 ; 0x94 <.do_clear_bss_start> 00000092 <.do_clear_bss_loop>: 92: 1d 92 st X+, r1 00000094 <.do_clear_bss_start>: 94: a6 39 cpi r26, 0x96 ; 150 96: b2 07 cpc r27, r18 98: e1 f7 brne .-8 ; 0x92 <.do_clear_bss_loop> 9a: 0e 94 26 07 call 0xe4c ; 0xe4c
9e: 0c 94 a7 0e jmp 0x1d4e ; 0x1d4e <_exit> 000000a2 <__bad_interrupt>: a2: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> 000000a6 : #define SIZE_DATA_BUFFERS 64 int connecting_frame_timeout_bf; void init_hdlc_client(struct Client* client, int connecting_frame_timeout){ a6: fc 01 movw r30, r24 client->state = IDLE_STATE; a8: 81 e0 ldi r24, 0x01 ; 1 aa: 80 83 st Z, r24 client->connecting_frame_timeout = connecting_frame_timeout; ac: 72 83 std Z+2, r23 ; 0x02 ae: 61 83 std Z+1, r22 ; 0x01 connecting_frame_timeout_bf = connecting_frame_timeout; b0: 70 93 44 03 sts 0x0344, r23 ; 0x800344 b4: 60 93 43 03 sts 0x0343, r22 ; 0x800343 client->current_index_frame = 20; b8: 84 e1 ldi r24, 0x14 ; 20 ba: 83 83 std Z+3, r24 ; 0x03 client->current_state_hdlc.control_escape = 0; bc: 14 82 std Z+4, r1 ; 0x04 client->current_state_hdlc.fcs = FCS_INIT_VALUE; be: 8f ef ldi r24, 0xFF ; 255 c0: 9f ef ldi r25, 0xFF ; 255 c2: 96 83 std Z+6, r25 ; 0x06 c4: 85 83 std Z+5, r24 ; 0x05 client->current_state_hdlc.start_index = -1; c6: 90 87 std Z+8, r25 ; 0x08 c8: 87 83 std Z+7, r24 ; 0x07 client->current_state_hdlc.end_index = -1; ca: 92 87 std Z+10, r25 ; 0x0a cc: 81 87 std Z+9, r24 ; 0x09 client->current_state_hdlc.src_index = 0; ce: 14 86 std Z+12, r1 ; 0x0c d0: 13 86 std Z+11, r1 ; 0x0b client->current_state_hdlc.dest_index = 0; d2: 16 86 std Z+14, r1 ; 0x0e d4: 15 86 std Z+13, r1 ; 0x0d d6: 08 95 ret 000000d8 : } void hdlc_connect(struct Client* client){ d8: fc 01 movw r30, r24 client->state = CONNECTING; da: 83 e0 ldi r24, 0x03 ; 3 dc: 80 83 st Z, r24 client->frameS.seq_no = 0; de: 80 89 ldd r24, Z+16 ; 0x10 e0: 88 7f andi r24, 0xF8 ; 248 e2: 80 8b std Z+16, r24 ; 0x10 client->frameS.frame = S_FRAME; e4: 81 e0 ldi r24, 0x01 ; 1 e6: 87 87 std Z+15, r24 ; 0x0f client->current_index_frame = client->frameS.seq_no; e8: 13 82 std Z+3, r1 ; 0x03 ea: 08 95 ret 000000ec : } int hdlc_send_data(struct Client* client, uint8_t data[], size_t data_len){ ec: fc 01 movw r30, r24 if (client->state != READY_STATE){ ee: 80 81 ld r24, Z f0: 82 30 cpi r24, 0x02 ; 2 f2: 89 f4 brne .+34 ; 0x116 return ERR_INVALID_STATE; } client->state = RECIVING; f4: 85 e0 ldi r24, 0x05 ; 5 f6: 80 83 st Z, r24 if (SIZE_DATA_BUFFERS < data_len){ f8: 41 34 cpi r20, 0x41 ; 65 fa: 51 05 cpc r21, r1 fc: 78 f4 brcc .+30 ; 0x11c return ERR_INVALID_DATA_SIZE; } client->frameI.seq_no = 0; fe: 82 89 ldd r24, Z+18 ; 0x12 100: 88 7f andi r24, 0xF8 ; 248 102: 82 8b std Z+18, r24 ; 0x12 client->frameI.frame = I_FRAME; 104: 11 8a std Z+17, r1 ; 0x11 client->data_i_frame = data; 106: 74 8b std Z+20, r23 ; 0x14 108: 63 8b std Z+19, r22 ; 0x13 client->len_data_i_frame = data_len; 10a: 56 8b std Z+22, r21 ; 0x16 10c: 45 8b std Z+21, r20 ; 0x15 client->current_index_frame = client->frameI.seq_no; 10e: 13 82 std Z+3, r1 ; 0x03 client->state = RECIVING; return 0; 110: 80 e0 ldi r24, 0x00 ; 0 112: 90 e0 ldi r25, 0x00 ; 0 114: 08 95 ret client->current_index_frame = client->frameS.seq_no; } int hdlc_send_data(struct Client* client, uint8_t data[], size_t data_len){ if (client->state != READY_STATE){ return ERR_INVALID_STATE; 116: 8c ef ldi r24, 0xFC ; 252 118: 9f ef ldi r25, 0xFF ; 255 11a: 08 95 ret } client->state = RECIVING; if (SIZE_DATA_BUFFERS < data_len){ return ERR_INVALID_DATA_SIZE; 11c: 8f ef ldi r24, 0xFF ; 255 11e: 9f ef ldi r25, 0xFF ; 255 client->len_data_i_frame = data_len; client->current_index_frame = client->frameI.seq_no; client->state = RECIVING; return 0; } 120: 08 95 ret 00000122 : int hdlc_get_raw_frame(struct Client *client, uint8_t* buffer, size_t lenBuffer) { 122: cf 92 push r12 124: df 92 push r13 126: ef 92 push r14 128: ff 92 push r15 12a: 0f 93 push r16 12c: 1f 93 push r17 12e: cf 93 push r28 130: df 93 push r29 132: 00 d0 rcall .+0 ; 0x134 134: cd b7 in r28, 0x3d ; 61 136: de b7 in r29, 0x3e ; 62 138: 7c 01 movw r14, r24 13a: 6b 01 movw r12, r22 13c: 5a 83 std Y+2, r21 ; 0x02 13e: 49 83 std Y+1, r20 ; 0x01 if(client->state == RECIVING){ 140: fc 01 movw r30, r24 142: 80 81 ld r24, Z 144: 85 30 cpi r24, 0x05 ; 5 146: d1 f4 brne .+52 ; 0x17c int ret = hdlc_frame_data(&client->frameI, client->data_i_frame, 148: 45 89 ldd r20, Z+21 ; 0x15 14a: 56 89 ldd r21, Z+22 ; 0x16 14c: 63 89 ldd r22, Z+19 ; 0x13 14e: 74 89 ldd r23, Z+20 ; 0x14 150: 8e 01 movw r16, r28 152: 0f 5f subi r16, 0xFF ; 255 154: 1f 4f sbci r17, 0xFF ; 255 156: 96 01 movw r18, r12 158: c7 01 movw r24, r14 15a: 41 96 adiw r24, 0x11 ; 17 15c: 0e 94 48 03 call 0x690 ; 0x690 client->len_data_i_frame, buffer, &lenBuffer); if (ret < 0){ 160: 99 23 and r25, r25 162: 64 f4 brge .+24 ; 0x17c printf("err in get_frame: %d\n", ret); 164: 9f 93 push r25 166: 8f 93 push r24 168: 80 e0 ldi r24, 0x00 ; 0 16a: 91 e0 ldi r25, 0x01 ; 1 16c: 9f 93 push r25 16e: 8f 93 push r24 170: 0e 94 99 0b call 0x1732 ; 0x1732 174: 0f 90 pop r0 176: 0f 90 pop r0 178: 0f 90 pop r0 17a: 0f 90 pop r0 } } if (client->state == CONNECTING){ 17c: f7 01 movw r30, r14 17e: 80 81 ld r24, Z 180: 83 30 cpi r24, 0x03 ; 3 182: d1 f4 brne .+52 ; 0x1b8 int ret = hdlc_frame_data(&client->frameS, NULL, 0, buffer, &lenBuffer); 184: 8e 01 movw r16, r28 186: 0f 5f subi r16, 0xFF ; 255 188: 1f 4f sbci r17, 0xFF ; 255 18a: 96 01 movw r18, r12 18c: 40 e0 ldi r20, 0x00 ; 0 18e: 50 e0 ldi r21, 0x00 ; 0 190: 60 e0 ldi r22, 0x00 ; 0 192: 70 e0 ldi r23, 0x00 ; 0 194: c7 01 movw r24, r14 196: 0f 96 adiw r24, 0x0f ; 15 198: 0e 94 48 03 call 0x690 ; 0x690 if (ret < 0){ 19c: 99 23 and r25, r25 19e: 64 f4 brge .+24 ; 0x1b8 printf("err in get_frame: %d\n", ret); 1a0: 9f 93 push r25 1a2: 8f 93 push r24 1a4: 80 e0 ldi r24, 0x00 ; 0 1a6: 91 e0 ldi r25, 0x01 ; 1 1a8: 9f 93 push r25 1aa: 8f 93 push r24 1ac: 0e 94 99 0b call 0x1732 ; 0x1732 1b0: 0f 90 pop r0 1b2: 0f 90 pop r0 1b4: 0f 90 pop r0 1b6: 0f 90 pop r0 } } if (client->state == DISCONNECTING){ 1b8: f7 01 movw r30, r14 1ba: 80 81 ld r24, Z 1bc: 84 30 cpi r24, 0x04 ; 4 1be: d1 f4 brne .+52 ; 0x1f4 int ret = hdlc_frame_data(&client->frame_rej, NULL, 0, buffer, &lenBuffer); 1c0: 8e 01 movw r16, r28 1c2: 0f 5f subi r16, 0xFF ; 255 1c4: 1f 4f sbci r17, 0xFF ; 255 1c6: 96 01 movw r18, r12 1c8: 40 e0 ldi r20, 0x00 ; 0 1ca: 50 e0 ldi r21, 0x00 ; 0 1cc: 60 e0 ldi r22, 0x00 ; 0 1ce: 70 e0 ldi r23, 0x00 ; 0 1d0: c7 01 movw r24, r14 1d2: 47 96 adiw r24, 0x17 ; 23 1d4: 0e 94 48 03 call 0x690 ; 0x690 if (ret < 0){ 1d8: 99 23 and r25, r25 1da: 64 f4 brge .+24 ; 0x1f4 printf("err in get_frame: %d\n", ret); 1dc: 9f 93 push r25 1de: 8f 93 push r24 1e0: 80 e0 ldi r24, 0x00 ; 0 1e2: 91 e0 ldi r25, 0x01 ; 1 1e4: 9f 93 push r25 1e6: 8f 93 push r24 1e8: 0e 94 99 0b call 0x1732 ; 0x1732 1ec: 0f 90 pop r0 1ee: 0f 90 pop r0 1f0: 0f 90 pop r0 1f2: 0f 90 pop r0 } } return 0; } 1f4: 80 e0 ldi r24, 0x00 ; 0 1f6: 90 e0 ldi r25, 0x00 ; 0 1f8: 0f 90 pop r0 1fa: 0f 90 pop r0 1fc: df 91 pop r29 1fe: cf 91 pop r28 200: 1f 91 pop r17 202: 0f 91 pop r16 204: ff 90 pop r15 206: ef 90 pop r14 208: df 90 pop r13 20a: cf 90 pop r12 20c: 08 95 ret 0000020e : int hdlc_decode_recived_raw_data(struct Client* client, uint8_t* buffer, size_t len_buffer, uint8_t* recived_data, size_t* len_recived_data){ 20e: 2f 92 push r2 210: 3f 92 push r3 212: 4f 92 push r4 214: 5f 92 push r5 216: 6f 92 push r6 218: 7f 92 push r7 21a: 8f 92 push r8 21c: 9f 92 push r9 21e: af 92 push r10 220: bf 92 push r11 222: cf 92 push r12 224: df 92 push r13 226: ef 92 push r14 228: ff 92 push r15 22a: 0f 93 push r16 22c: 1f 93 push r17 22e: cf 93 push r28 230: df 93 push r29 232: 00 d0 rcall .+0 ; 0x234 234: 00 d0 rcall .+0 ; 0x236 236: cd b7 in r28, 0x3d ; 61 238: de b7 in r29, 0x3e ; 62 23a: 5c 01 movw r10, r24 23c: 5c 83 std Y+4, r21 ; 0x04 23e: 4b 83 std Y+3, r20 ; 0x03 240: 22 2e mov r2, r18 242: 33 2e mov r3, r19 244: 38 01 movw r6, r16 return ERR_INVALID_SEQ_NUMBER_FRAME; } client->connecting_frame_timeout = connecting_frame_timeout_bf; return 0; } 246: 8d b6 in r8, 0x3d ; 61 248: 9e b6 in r9, 0x3e ; 62 return 0; } int hdlc_decode_recived_raw_data(struct Client* client, uint8_t* buffer, size_t len_buffer, uint8_t* recived_data, size_t* len_recived_data){ hdlc_control_t recv_control; uint8_t recive[len_buffer]; 24a: c4 2e mov r12, r20 24c: d5 2e mov r13, r21 24e: 8d b7 in r24, 0x3d ; 61 250: 9e b7 in r25, 0x3e ; 62 252: 8c 19 sub r24, r12 254: 9d 09 sbc r25, r13 256: 0f b6 in r0, 0x3f ; 63 258: f8 94 cli 25a: 9e bf out 0x3e, r25 ; 62 25c: 0f be out 0x3f, r0 ; 63 25e: 8d bf out 0x3d, r24 ; 61 260: ed b7 in r30, 0x3d ; 61 262: fe b7 in r31, 0x3e ; 62 264: 31 96 adiw r30, 0x01 ; 1 266: 2f 01 movw r4, r30 int ret = hdlc_get_data_with_state(&client->current_state_hdlc,&recv_control, buffer, len_buffer, recive, 268: ce 01 movw r24, r28 26a: 03 96 adiw r24, 0x03 ; 3 26c: 7c 01 movw r14, r24 26e: 8f 01 movw r16, r30 270: 96 01 movw r18, r12 272: ab 01 movw r20, r22 274: be 01 movw r22, r28 276: 6f 5f subi r22, 0xFF ; 255 278: 7f 4f sbci r23, 0xFF ; 255 27a: c5 01 movw r24, r10 27c: 04 96 adiw r24, 0x04 ; 4 27e: 0e 94 22 02 call 0x444 ; 0x444 &len_buffer); if (ret < 0) { 282: 99 23 and r25, r25 284: 0c f4 brge .+2 ; 0x288 286: 48 c0 rjmp .+144 ; 0x318 return ret; } if (recv_control.seq_no != client->current_index_frame){ 288: 8a 81 ldd r24, Y+2 ; 0x02 28a: 87 70 andi r24, 0x07 ; 7 28c: 90 e0 ldi r25, 0x00 ; 0 28e: f5 01 movw r30, r10 290: 23 81 ldd r18, Z+3 ; 0x03 292: 30 e0 ldi r19, 0x00 ; 0 294: 82 17 cp r24, r18 296: 93 07 cpc r25, r19 298: 51 f0 breq .+20 ; 0x2ae client->state = DISCONNECTING; 29a: 84 e0 ldi r24, 0x04 ; 4 29c: 80 83 st Z, r24 client->frame_rej.seq_no = 0; 29e: 80 8d ldd r24, Z+24 ; 0x18 2a0: 88 7f andi r24, 0xF8 ; 248 2a2: 80 8f std Z+24, r24 ; 0x18 client->frame_rej.frame = S_FRAME_NACK; 2a4: 82 e0 ldi r24, 0x02 ; 2 2a6: 87 8b std Z+23, r24 ; 0x17 return ERR_INVALID_SEQ_NUMBER_FRAME; 2a8: 8a ef ldi r24, 0xFA ; 250 2aa: 9f ef ldi r25, 0xFF ; 255 2ac: 35 c0 rjmp .+106 ; 0x318 } switch (recv_control.frame) { 2ae: 89 81 ldd r24, Y+1 ; 0x01 2b0: 81 30 cpi r24, 0x01 ; 1 2b2: 49 f0 breq .+18 ; 0x2c6 2b4: 18 f0 brcs .+6 ; 0x2bc 2b6: 82 30 cpi r24, 0x02 ; 2 2b8: d9 f0 breq .+54 ; 0x2f0 2ba: 25 c0 rjmp .+74 ; 0x306 case S_FRAME: client->state = READY_STATE; break; case I_FRAME: for (int i = 0; i < sizeof(recive)-2; i++){ 2bc: f2 e0 ldi r31, 0x02 ; 2 2be: cf 1a sub r12, r31 2c0: d1 08 sbc r13, r1 2c2: 29 f4 brne .+10 ; 0x2ce 2c4: 0e c0 rjmp .+28 ; 0x2e2 return ERR_INVALID_SEQ_NUMBER_FRAME; } switch (recv_control.frame) { case S_FRAME: client->state = READY_STATE; 2c6: 82 e0 ldi r24, 0x02 ; 2 2c8: f5 01 movw r30, r10 2ca: 80 83 st Z, r24 break; 2cc: 1c c0 rjmp .+56 ; 0x306 2ce: f2 01 movw r30, r4 2d0: a2 2d mov r26, r2 2d2: b3 2d mov r27, r3 2d4: 4c 0c add r4, r12 2d6: 5d 1c adc r5, r13 case I_FRAME: for (int i = 0; i < sizeof(recive)-2; i++){ recived_data[i] = recive[i]; 2d8: 81 91 ld r24, Z+ 2da: 8d 93 st X+, r24 switch (recv_control.frame) { case S_FRAME: client->state = READY_STATE; break; case I_FRAME: for (int i = 0; i < sizeof(recive)-2; i++){ 2dc: e4 15 cp r30, r4 2de: f5 05 cpc r31, r5 2e0: d9 f7 brne .-10 ; 0x2d8 recived_data[i] = recive[i]; } *len_recived_data = sizeof(recive)-2; 2e2: f3 01 movw r30, r6 2e4: d1 82 std Z+1, r13 ; 0x01 2e6: c0 82 st Z, r12 client->state = SEND; 2e8: 86 e0 ldi r24, 0x06 ; 6 2ea: f5 01 movw r30, r10 2ec: 80 83 st Z, r24 break; 2ee: 0b c0 rjmp .+22 ; 0x306 case S_FRAME_NACK: client->state = DISCONNECTING; 2f0: 84 e0 ldi r24, 0x04 ; 4 2f2: f5 01 movw r30, r10 2f4: 80 83 st Z, r24 client->frame_rej.seq_no = 0; 2f6: 80 8d ldd r24, Z+24 ; 0x18 2f8: 88 7f andi r24, 0xF8 ; 248 2fa: 80 8f std Z+24, r24 ; 0x18 client->frame_rej.frame = S_FRAME_NACK; 2fc: 82 e0 ldi r24, 0x02 ; 2 2fe: 87 8b std Z+23, r24 ; 0x17 return ERR_INVALID_SEQ_NUMBER_FRAME; 300: 8a ef ldi r24, 0xFA ; 250 302: 9f ef ldi r25, 0xFF ; 255 304: 09 c0 rjmp .+18 ; 0x318 } client->connecting_frame_timeout = connecting_frame_timeout_bf; 306: 80 91 43 03 lds r24, 0x0343 ; 0x800343 30a: 90 91 44 03 lds r25, 0x0344 ; 0x800344 30e: f5 01 movw r30, r10 310: 92 83 std Z+2, r25 ; 0x02 312: 81 83 std Z+1, r24 ; 0x01 return 0; 314: 80 e0 ldi r24, 0x00 ; 0 316: 90 e0 ldi r25, 0x00 ; 0 } 318: 0f b6 in r0, 0x3f ; 63 31a: f8 94 cli 31c: 9e be out 0x3e, r9 ; 62 31e: 0f be out 0x3f, r0 ; 63 320: 8d be out 0x3d, r8 ; 61 322: 0f 90 pop r0 324: 0f 90 pop r0 326: 0f 90 pop r0 328: 0f 90 pop r0 32a: df 91 pop r29 32c: cf 91 pop r28 32e: 1f 91 pop r17 330: 0f 91 pop r16 332: ff 90 pop r15 334: ef 90 pop r14 336: df 90 pop r13 338: cf 90 pop r12 33a: bf 90 pop r11 33c: af 90 pop r10 33e: 9f 90 pop r9 340: 8f 90 pop r8 342: 7f 90 pop r7 344: 6f 90 pop r6 346: 5f 90 pop r5 348: 4f 90 pop r4 34a: 3f 90 pop r3 34c: 2f 90 pop r2 34e: 08 95 ret 00000350 : int hdlc_timeout_handler(struct Client* client, int delta_time){ client->connecting_frame_timeout -= delta_time; 350: fc 01 movw r30, r24 352: 21 81 ldd r18, Z+1 ; 0x01 354: 32 81 ldd r19, Z+2 ; 0x02 356: 26 1b sub r18, r22 358: 37 0b sbc r19, r23 35a: 32 83 std Z+2, r19 ; 0x02 35c: 21 83 std Z+1, r18 ; 0x01 if (client->connecting_frame_timeout <= 0){ 35e: 12 16 cp r1, r18 360: 13 06 cpc r1, r19 362: 1c f4 brge .+6 ; 0x36a return ERR_FRAME_TIME_OUT; } return 0; 364: 80 e0 ldi r24, 0x00 ; 0 366: 90 e0 ldi r25, 0x00 ; 0 368: 08 95 ret int hdlc_timeout_handler(struct Client* client, int delta_time){ client->connecting_frame_timeout -= delta_time; if (client->connecting_frame_timeout <= 0){ return ERR_FRAME_TIME_OUT; 36a: 8b ef ldi r24, 0xFB ; 251 36c: 9f ef ldi r25, 0xFF ; 255 } return 0; 36e: 08 95 ret 00000370 : 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; FCS_SIZE calc_fcs(FCS_SIZE fcs, unsigned char value) { return (fcs >> 8) ^ fcstab[(fcs ^ value) & 0xff]; 370: fc 01 movw r30, r24 372: e6 27 eor r30, r22 374: ff 27 eor r31, r31 376: ee 0f add r30, r30 378: ff 1f adc r31, r31 37a: ea 5e subi r30, 0xEA ; 234 37c: fe 4f sbci r31, 0xFE ; 254 37e: 89 2f mov r24, r25 380: 99 27 eor r25, r25 382: 20 81 ld r18, Z 384: 31 81 ldd r19, Z+1 ; 0x01 386: 82 27 eor r24, r18 388: 93 27 eor r25, r19 38a: 08 95 ret 0000038c : //int hdlc_get_data(hdlc_control_t *control, const char *src, // unsigned int src_len, char *dest, unsigned int *dest_len) int hdlc_get_data(hdlc_control_t *control, uint8_t *src, size_t src_len, uint8_t *dest, size_t *dest_len){ return hdlc_get_data_with_state(&hdlc_state, control, src, src_len, dest, dest_len); } 38c: fa 01 movw r30, r20 38e: 93 e8 ldi r25, 0x83 ; 131 390: 98 0f add r25, r24 392: 92 30 cpi r25, 0x02 ; 2 394: 70 f4 brcc .+28 ; 0x3b2 396: 20 81 ld r18, Z 398: 31 81 ldd r19, Z+1 ; 0x01 39a: a9 01 movw r20, r18 39c: 4f 5f subi r20, 0xFF ; 255 39e: 5f 4f sbci r21, 0xFF ; 255 3a0: 51 83 std Z+1, r21 ; 0x01 3a2: 40 83 st Z, r20 3a4: db 01 movw r26, r22 3a6: a2 0f add r26, r18 3a8: b3 1f adc r27, r19 3aa: 9d e7 ldi r25, 0x7D ; 125 3ac: 9c 93 st X, r25 3ae: 90 e2 ldi r25, 0x20 ; 32 3b0: 89 27 eor r24, r25 3b2: 20 81 ld r18, Z 3b4: 31 81 ldd r19, Z+1 ; 0x01 3b6: a9 01 movw r20, r18 3b8: 4f 5f subi r20, 0xFF ; 255 3ba: 5f 4f sbci r21, 0xFF ; 255 3bc: 51 83 std Z+1, r21 ; 0x01 3be: 40 83 st Z, r20 3c0: fb 01 movw r30, r22 3c2: e2 0f add r30, r18 3c4: f3 1f adc r31, r19 3c6: 80 83 st Z, r24 3c8: 08 95 ret 000003ca : 3ca: 98 2f mov r25, r24 3cc: 80 ff sbrs r24, 0 3ce: 0b c0 rjmp .+22 ; 0x3e6 3d0: 86 95 lsr r24 3d2: 86 95 lsr r24 3d4: 83 70 andi r24, 0x03 ; 3 3d6: 11 f0 breq .+4 ; 0x3dc 3d8: 82 e0 ldi r24, 0x02 ; 2 3da: 01 c0 rjmp .+2 ; 0x3de 3dc: 81 e0 ldi r24, 0x01 ; 1 3de: 92 95 swap r25 3e0: 96 95 lsr r25 3e2: 97 70 andi r25, 0x07 ; 7 3e4: 03 c0 rjmp .+6 ; 0x3ec 3e6: 96 95 lsr r25 3e8: 97 70 andi r25, 0x07 ; 7 3ea: 80 e0 ldi r24, 0x00 ; 0 3ec: 97 70 andi r25, 0x07 ; 7 3ee: 08 95 ret 000003f0 : 3f0: fc 01 movw r30, r24 3f2: 90 81 ld r25, Z 3f4: 91 30 cpi r25, 0x01 ; 1 3f6: 49 f0 breq .+18 ; 0x40a <__LOCK_REGION_LENGTH__+0xa> 3f8: 18 f0 brcs .+6 ; 0x400 <__LOCK_REGION_LENGTH__> 3fa: 92 30 cpi r25, 0x02 ; 2 3fc: 61 f0 breq .+24 ; 0x416 <__LOCK_REGION_LENGTH__+0x16> 3fe: 11 c0 rjmp .+34 ; 0x422 <__LOCK_REGION_LENGTH__+0x22> 400: 81 81 ldd r24, Z+1 ; 0x01 402: 87 70 andi r24, 0x07 ; 7 404: 88 0f add r24, r24 406: 80 61 ori r24, 0x10 ; 16 408: 08 95 ret 40a: 81 81 ldd r24, Z+1 ; 0x01 40c: 82 95 swap r24 40e: 88 0f add r24, r24 410: 80 7e andi r24, 0xE0 ; 224 412: 81 60 ori r24, 0x01 ; 1 414: 08 95 ret 416: 81 81 ldd r24, Z+1 ; 0x01 418: 82 95 swap r24 41a: 88 0f add r24, r24 41c: 80 7e andi r24, 0xE0 ; 224 41e: 89 60 ori r24, 0x09 ; 9 420: 08 95 ret 422: 80 e0 ldi r24, 0x00 ; 0 424: 08 95 ret 00000426 : 426: fc 01 movw r30, r24 428: 8f ef ldi r24, 0xFF ; 255 42a: 9f ef ldi r25, 0xFF ; 255 42c: 92 83 std Z+2, r25 ; 0x02 42e: 81 83 std Z+1, r24 ; 0x01 430: 96 83 std Z+6, r25 ; 0x06 432: 85 83 std Z+5, r24 ; 0x05 434: 94 83 std Z+4, r25 ; 0x04 436: 83 83 std Z+3, r24 ; 0x03 438: 12 86 std Z+10, r1 ; 0x0a 43a: 11 86 std Z+9, r1 ; 0x09 43c: 10 86 std Z+8, r1 ; 0x08 43e: 17 82 std Z+7, r1 ; 0x07 440: 10 82 st Z, r1 442: 08 95 ret 00000444 : 444: 3f 92 push r3 446: 4f 92 push r4 448: 5f 92 push r5 44a: 6f 92 push r6 44c: 7f 92 push r7 44e: 8f 92 push r8 450: 9f 92 push r9 452: af 92 push r10 454: bf 92 push r11 456: cf 92 push r12 458: df 92 push r13 45a: ef 92 push r14 45c: ff 92 push r15 45e: 0f 93 push r16 460: 1f 93 push r17 462: cf 93 push r28 464: df 93 push r29 466: 00 d0 rcall .+0 ; 0x468 468: 00 d0 rcall .+0 ; 0x46a 46a: cd b7 in r28, 0x3d ; 61 46c: de b7 in r29, 0x3e ; 62 46e: 00 97 sbiw r24, 0x00 ; 0 470: 09 f4 brne .+2 ; 0x474 472: ea c0 rjmp .+468 ; 0x648 474: 61 15 cp r22, r1 476: 71 05 cpc r23, r1 478: 09 f4 brne .+2 ; 0x47c 47a: e9 c0 rjmp .+466 ; 0x64e 47c: 41 15 cp r20, r1 47e: 51 05 cpc r21, r1 480: 09 f4 brne .+2 ; 0x484 482: e8 c0 rjmp .+464 ; 0x654 484: 01 15 cp r16, r1 486: 11 05 cpc r17, r1 488: 09 f4 brne .+2 ; 0x48c 48a: e7 c0 rjmp .+462 ; 0x65a 48c: e1 14 cp r14, r1 48e: f1 04 cpc r15, r1 490: 09 f4 brne .+2 ; 0x494 492: e6 c0 rjmp .+460 ; 0x660 494: 38 01 movw r6, r16 496: 49 01 movw r8, r18 498: 7a 83 std Y+2, r23 ; 0x02 49a: 69 83 std Y+1, r22 ; 0x01 49c: 9c 83 std Y+4, r25 ; 0x04 49e: 8b 83 std Y+3, r24 ; 0x03 4a0: 21 15 cp r18, r1 4a2: 31 05 cpc r19, r1 4a4: 09 f4 brne .+2 ; 0x4a8 4a6: 99 c0 rjmp .+306 ; 0x5da 4a8: 8a 01 movw r16, r20 4aa: c1 2c mov r12, r1 4ac: d1 2c mov r13, r1 4ae: 68 94 set 4b0: 44 24 eor r4, r4 4b2: 45 f8 bld r4, 5 4b4: 33 24 eor r3, r3 4b6: 33 94 inc r3 4b8: 59 01 movw r10, r18 4ba: 21 e0 ldi r18, 0x01 ; 1 4bc: a2 1a sub r10, r18 4be: b1 08 sbc r11, r1 4c0: ab 81 ldd r26, Y+3 ; 0x03 4c2: bc 81 ldd r27, Y+4 ; 0x04 4c4: 13 96 adiw r26, 0x03 ; 3 4c6: 8d 91 ld r24, X+ 4c8: 9c 91 ld r25, X 4ca: 14 97 sbiw r26, 0x04 ; 4 4cc: 99 23 and r25, r25 4ce: 9c f4 brge .+38 ; 0x4f6 4d0: f8 01 movw r30, r16 4d2: 80 81 ld r24, Z 4d4: 8e 37 cpi r24, 0x7E ; 126 4d6: 09 f0 breq .+2 ; 0x4da 4d8: 70 c0 rjmp .+224 ; 0x5ba 4da: ca 14 cp r12, r10 4dc: db 04 cpc r13, r11 4de: 20 f4 brcc .+8 ; 0x4e8 4e0: 81 81 ldd r24, Z+1 ; 0x01 4e2: 8e 37 cpi r24, 0x7E ; 126 4e4: 09 f4 brne .+2 ; 0x4e8 4e6: 70 c0 rjmp .+224 ; 0x5c8 4e8: eb 81 ldd r30, Y+3 ; 0x03 4ea: fc 81 ldd r31, Y+4 ; 0x04 4ec: 87 81 ldd r24, Z+7 ; 0x07 4ee: 90 85 ldd r25, Z+8 ; 0x08 4f0: 94 83 std Z+4, r25 ; 0x04 4f2: 83 83 std Z+3, r24 ; 0x03 4f4: 62 c0 rjmp .+196 ; 0x5ba 4f6: f8 01 movw r30, r16 4f8: 50 80 ld r5, Z 4fa: 2e e7 ldi r18, 0x7E ; 126 4fc: 52 12 cpse r5, r18 4fe: 19 c0 rjmp .+50 ; 0x532 500: ca 14 cp r12, r10 502: db 04 cpc r13, r11 504: 20 f4 brcc .+8 ; 0x50e 506: 21 81 ldd r18, Z+1 ; 0x01 508: 2e 37 cpi r18, 0x7E ; 126 50a: 09 f4 brne .+2 ; 0x50e 50c: 5d c0 rjmp .+186 ; 0x5c8 50e: ab 81 ldd r26, Y+3 ; 0x03 510: bc 81 ldd r27, Y+4 ; 0x04 512: 17 96 adiw r26, 0x07 ; 7 514: 2d 91 ld r18, X+ 516: 3c 91 ld r19, X 518: 18 97 sbiw r26, 0x08 ; 8 51a: ac 01 movw r20, r24 51c: 4f 5f subi r20, 0xFF ; 255 51e: 5f 4f sbci r21, 0xFF ; 255 520: 42 17 cp r20, r18 522: 53 07 cpc r21, r19 524: 09 f4 brne .+2 ; 0x528 526: 50 c0 rjmp .+160 ; 0x5c8 528: 16 96 adiw r26, 0x06 ; 6 52a: 3c 93 st X, r19 52c: 2e 93 st -X, r18 52e: 15 97 sbiw r26, 0x05 ; 5 530: 5d c0 rjmp .+186 ; 0x5ec 532: bd e7 ldi r27, 0x7D ; 125 534: 5b 12 cpse r5, r27 536: 04 c0 rjmp .+8 ; 0x540 538: eb 81 ldd r30, Y+3 ; 0x03 53a: fc 81 ldd r31, Y+4 ; 0x04 53c: 30 82 st Z, r3 53e: 3d c0 rjmp .+122 ; 0x5ba 540: ab 81 ldd r26, Y+3 ; 0x03 542: bc 81 ldd r27, Y+4 ; 0x04 544: 8c 91 ld r24, X 546: 88 23 and r24, r24 548: 19 f0 breq .+6 ; 0x550 54a: 1c 92 st X, r1 54c: 50 80 ld r5, Z 54e: 54 24 eor r5, r4 550: 65 2d mov r22, r5 552: eb 81 ldd r30, Y+3 ; 0x03 554: fc 81 ldd r31, Y+4 ; 0x04 556: 81 81 ldd r24, Z+1 ; 0x01 558: 92 81 ldd r25, Z+2 ; 0x02 55a: 0e 94 b8 01 call 0x370 ; 0x370 55e: ab 81 ldd r26, Y+3 ; 0x03 560: bc 81 ldd r27, Y+4 ; 0x04 562: 12 96 adiw r26, 0x02 ; 2 564: 9c 93 st X, r25 566: 8e 93 st -X, r24 568: 11 97 sbiw r26, 0x01 ; 1 56a: 17 96 adiw r26, 0x07 ; 7 56c: 2d 91 ld r18, X+ 56e: 3c 91 ld r19, X 570: 18 97 sbiw r26, 0x08 ; 8 572: 13 96 adiw r26, 0x03 ; 3 574: 8d 91 ld r24, X+ 576: 9c 91 ld r25, X 578: 14 97 sbiw r26, 0x04 ; 4 57a: 02 96 adiw r24, 0x02 ; 2 57c: 28 17 cp r18, r24 57e: 39 07 cpc r19, r25 580: 41 f4 brne .+16 ; 0x592 582: 85 2d mov r24, r5 584: 0e 94 e5 01 call 0x3ca ; 0x3ca 588: e9 81 ldd r30, Y+1 ; 0x01 58a: fa 81 ldd r31, Y+2 ; 0x02 58c: 91 83 std Z+1, r25 ; 0x01 58e: 80 83 st Z, r24 590: 14 c0 rjmp .+40 ; 0x5ba 592: 82 17 cp r24, r18 594: 93 07 cpc r25, r19 596: 8c f4 brge .+34 ; 0x5ba 598: ab 81 ldd r26, Y+3 ; 0x03 59a: bc 81 ldd r27, Y+4 ; 0x04 59c: 19 96 adiw r26, 0x09 ; 9 59e: 8d 91 ld r24, X+ 5a0: 9c 91 ld r25, X 5a2: 1a 97 sbiw r26, 0x0a ; 10 5a4: 9c 01 movw r18, r24 5a6: 2f 5f subi r18, 0xFF ; 255 5a8: 3f 4f sbci r19, 0xFF ; 255 5aa: 1a 96 adiw r26, 0x0a ; 10 5ac: 3c 93 st X, r19 5ae: 2e 93 st -X, r18 5b0: 19 97 sbiw r26, 0x09 ; 9 5b2: f3 01 movw r30, r6 5b4: e8 0f add r30, r24 5b6: f9 1f adc r31, r25 5b8: 50 82 st Z, r5 5ba: eb 81 ldd r30, Y+3 ; 0x03 5bc: fc 81 ldd r31, Y+4 ; 0x04 5be: 87 81 ldd r24, Z+7 ; 0x07 5c0: 90 85 ldd r25, Z+8 ; 0x08 5c2: 01 96 adiw r24, 0x01 ; 1 5c4: 90 87 std Z+8, r25 ; 0x08 5c6: 87 83 std Z+7, r24 ; 0x07 5c8: ff ef ldi r31, 0xFF ; 255 5ca: cf 1a sub r12, r31 5cc: df 0a sbc r13, r31 5ce: 0f 5f subi r16, 0xFF ; 255 5d0: 1f 4f sbci r17, 0xFF ; 255 5d2: 8c 14 cp r8, r12 5d4: 9d 04 cpc r9, r13 5d6: 09 f0 breq .+2 ; 0x5da 5d8: 73 cf rjmp .-282 ; 0x4c0 5da: ab 81 ldd r26, Y+3 ; 0x03 5dc: bc 81 ldd r27, Y+4 ; 0x04 5de: 13 96 adiw r26, 0x03 ; 3 5e0: 8d 91 ld r24, X+ 5e2: 9c 91 ld r25, X 5e4: 14 97 sbiw r26, 0x04 ; 4 5e6: 99 23 and r25, r25 5e8: 3c f0 brlt .+14 ; 0x5f8 5ea: 64 01 movw r12, r8 5ec: eb 81 ldd r30, Y+3 ; 0x03 5ee: fc 81 ldd r31, Y+4 ; 0x04 5f0: 25 81 ldd r18, Z+5 ; 0x05 5f2: 36 81 ldd r19, Z+6 ; 0x06 5f4: 33 23 and r19, r19 5f6: 34 f4 brge .+12 ; 0x604 5f8: d7 01 movw r26, r14 5fa: 1d 92 st X+, r1 5fc: 1c 92 st X, r1 5fe: 8e e0 ldi r24, 0x0E ; 14 600: 92 ed ldi r25, 0xD2 ; 210 602: 30 c0 rjmp .+96 ; 0x664 604: 04 96 adiw r24, 0x04 ; 4 606: 28 17 cp r18, r24 608: 39 07 cpc r19, r25 60a: 3c f0 brlt .+14 ; 0x61a 60c: eb 81 ldd r30, Y+3 ; 0x03 60e: fc 81 ldd r31, Y+4 ; 0x04 610: 81 81 ldd r24, Z+1 ; 0x01 612: 92 81 ldd r25, Z+2 ; 0x02 614: 88 3b cpi r24, 0xB8 ; 184 616: 90 4f sbci r25, 0xF0 ; 240 618: 31 f0 breq .+12 ; 0x626 61a: d7 01 movw r26, r14 61c: cd 92 st X+, r12 61e: dc 92 st X, r13 620: 0e e0 ldi r16, 0x0E ; 14 622: 12 ed ldi r17, 0xD2 ; 210 624: 0a c0 rjmp .+20 ; 0x63a 626: eb 81 ldd r30, Y+3 ; 0x03 628: fc 81 ldd r31, Y+4 ; 0x04 62a: 81 85 ldd r24, Z+9 ; 0x09 62c: 92 85 ldd r25, Z+10 ; 0x0a 62e: 02 97 sbiw r24, 0x02 ; 2 630: d7 01 movw r26, r14 632: 8d 93 st X+, r24 634: 9c 93 st X, r25 636: 0c 2d mov r16, r12 638: 1d 2d mov r17, r13 63a: 8b 81 ldd r24, Y+3 ; 0x03 63c: 9c 81 ldd r25, Y+4 ; 0x04 63e: 0e 94 13 02 call 0x426 ; 0x426 642: 80 2f mov r24, r16 644: 91 2f mov r25, r17 646: 0e c0 rjmp .+28 ; 0x664 648: 8e e0 ldi r24, 0x0E ; 14 64a: 92 ed ldi r25, 0xD2 ; 210 64c: 0b c0 rjmp .+22 ; 0x664 64e: 8e e0 ldi r24, 0x0E ; 14 650: 92 ed ldi r25, 0xD2 ; 210 652: 08 c0 rjmp .+16 ; 0x664 654: 8e e0 ldi r24, 0x0E ; 14 656: 92 ed ldi r25, 0xD2 ; 210 658: 05 c0 rjmp .+10 ; 0x664 65a: 8e e0 ldi r24, 0x0E ; 14 65c: 92 ed ldi r25, 0xD2 ; 210 65e: 02 c0 rjmp .+4 ; 0x664 660: 8e e0 ldi r24, 0x0E ; 14 662: 92 ed ldi r25, 0xD2 ; 210 664: 0f 90 pop r0 666: 0f 90 pop r0 668: 0f 90 pop r0 66a: 0f 90 pop r0 66c: df 91 pop r29 66e: cf 91 pop r28 670: 1f 91 pop r17 672: 0f 91 pop r16 674: ff 90 pop r15 676: ef 90 pop r14 678: df 90 pop r13 67a: cf 90 pop r12 67c: bf 90 pop r11 67e: af 90 pop r10 680: 9f 90 pop r9 682: 8f 90 pop r8 684: 7f 90 pop r7 686: 6f 90 pop r6 688: 5f 90 pop r5 68a: 4f 90 pop r4 68c: 3f 90 pop r3 68e: 08 95 ret 00000690 : } //int hdlc_frame_data(hdlc_control_t *control, const char *src, // unsigned int src_len, char *dest, unsigned int *dest_len) int hdlc_frame_data(hdlc_control_t *control, uint8_t *src, size_t src_len, uint8_t *dest, size_t *dest_len){ 690: 5f 92 push r5 692: 6f 92 push r6 694: 7f 92 push r7 696: 8f 92 push r8 698: 9f 92 push r9 69a: af 92 push r10 69c: bf 92 push r11 69e: cf 92 push r12 6a0: df 92 push r13 6a2: ef 92 push r14 6a4: ff 92 push r15 6a6: 0f 93 push r16 6a8: 1f 93 push r17 6aa: cf 93 push r28 6ac: df 93 push r29 6ae: 00 d0 rcall .+0 ; 0x6b0 6b0: cd b7 in r28, 0x3d ; 61 6b2: de b7 in r29, 0x3e ; 62 int dest_index = 0; unsigned char value = 0; FCS_SIZE fcs = FCS_INIT_VALUE; // Make sure that all parameters are valid if (!control || (!src && (src_len > 0)) || !dest || !dest_len) { 6b4: 00 97 sbiw r24, 0x00 ; 0 6b6: 09 f4 brne .+2 ; 0x6ba 6b8: 73 c0 rjmp .+230 ; 0x7a0 6ba: 61 15 cp r22, r1 6bc: 71 05 cpc r23, r1 6be: 21 f4 brne .+8 ; 0x6c8 6c0: 41 15 cp r20, r1 6c2: 51 05 cpc r21, r1 6c4: 09 f0 breq .+2 ; 0x6c8 6c6: 6f c0 rjmp .+222 ; 0x7a6 6c8: 21 15 cp r18, r1 6ca: 31 05 cpc r19, r1 6cc: 09 f4 brne .+2 ; 0x6d0 6ce: 6e c0 rjmp .+220 ; 0x7ac 6d0: 01 15 cp r16, r1 6d2: 11 05 cpc r17, r1 6d4: 09 f4 brne .+2 ; 0x6d8 6d6: 6d c0 rjmp .+218 ; 0x7b2 6d8: 38 01 movw r6, r16 6da: 79 01 movw r14, r18 6dc: 5a 01 movw r10, r20 6de: 4b 01 movw r8, r22 6e0: 8c 01 movw r16, r24 return -EINVAL; } // Start by adding the start flag sequence dest[dest_index++] = HDLC_FLAG_SEQUENCE; 6e2: 81 e0 ldi r24, 0x01 ; 1 6e4: 90 e0 ldi r25, 0x00 ; 0 6e6: 9a 83 std Y+2, r25 ; 0x02 6e8: 89 83 std Y+1, r24 ; 0x01 6ea: 8e e7 ldi r24, 0x7E ; 126 6ec: f9 01 movw r30, r18 6ee: 80 83 st Z, r24 // Add the all-station address from HDLC (broadcast) fcs = calc_fcs(fcs, HDLC_ALL_STATION_ADDR); 6f0: 6f ef ldi r22, 0xFF ; 255 6f2: 8f ef ldi r24, 0xFF ; 255 6f4: 9f ef ldi r25, 0xFF ; 255 6f6: 0e 94 b8 01 call 0x370 ; 0x370 6fa: 6c 01 movw r12, r24 hdlc_escape_value(HDLC_ALL_STATION_ADDR, dest, &dest_index); 6fc: ae 01 movw r20, r28 6fe: 4f 5f subi r20, 0xFF ; 255 700: 5f 4f sbci r21, 0xFF ; 255 702: b7 01 movw r22, r14 704: 8f ef ldi r24, 0xFF ; 255 706: 0e 94 c6 01 call 0x38c ; 0x38c // Add the framed control field value value = hdlc_frame_control_type(control); 70a: c8 01 movw r24, r16 70c: 0e 94 f8 01 call 0x3f0 ; 0x3f0 710: 58 2e mov r5, r24 fcs = calc_fcs(fcs, value); 712: 68 2f mov r22, r24 714: c6 01 movw r24, r12 716: 0e 94 b8 01 call 0x370 ; 0x370 71a: 6c 01 movw r12, r24 hdlc_escape_value(value, dest, &dest_index); 71c: ae 01 movw r20, r28 71e: 4f 5f subi r20, 0xFF ; 255 720: 5f 4f sbci r21, 0xFF ; 255 722: b7 01 movw r22, r14 724: 85 2d mov r24, r5 726: 0e 94 c6 01 call 0x38c ; 0x38c // Only DATA frames should contain data if (control->frame == I_FRAME) { 72a: f8 01 movw r30, r16 72c: 80 81 ld r24, Z 72e: 81 11 cpse r24, r1 730: 19 c0 rjmp .+50 ; 0x764 // Calculate FCS and escape data for (i = 0; i < src_len; i++) { 732: a1 14 cp r10, r1 734: b1 04 cpc r11, r1 736: b1 f0 breq .+44 ; 0x764 738: 84 01 movw r16, r8 73a: 8a 0c add r8, r10 73c: 9b 1c adc r9, r11 73e: 58 01 movw r10, r16 fcs = calc_fcs(fcs, src[i]); 740: f8 01 movw r30, r16 742: 61 91 ld r22, Z+ 744: 8f 01 movw r16, r30 746: c6 01 movw r24, r12 748: 0e 94 b8 01 call 0x370 ; 0x370 74c: 6c 01 movw r12, r24 hdlc_escape_value(src[i], dest, &dest_index); 74e: ae 01 movw r20, r28 750: 4f 5f subi r20, 0xFF ; 255 752: 5f 4f sbci r21, 0xFF ; 255 754: b7 01 movw r22, r14 756: f5 01 movw r30, r10 758: 80 81 ld r24, Z 75a: 0e 94 c6 01 call 0x38c ; 0x38c hdlc_escape_value(value, dest, &dest_index); // Only DATA frames should contain data if (control->frame == I_FRAME) { // Calculate FCS and escape data for (i = 0; i < src_len; i++) { 75e: 80 16 cp r8, r16 760: 91 06 cpc r9, r17 762: 69 f7 brne .-38 ; 0x73e hdlc_escape_value(src[i], dest, &dest_index); } } // Invert the FCS value accordingly to the specification fcs ^= FCS_INVERT_MASK; 764: c0 94 com r12 766: d0 94 com r13 // Run through the FCS bytes and escape the values for (i = 0; i < sizeof(fcs); i++) { value = ((fcs >> (8 * i)) & 0xFF); hdlc_escape_value(value, dest, &dest_index); 768: ae 01 movw r20, r28 76a: 4f 5f subi r20, 0xFF ; 255 76c: 5f 4f sbci r21, 0xFF ; 255 76e: b7 01 movw r22, r14 770: 8c 2d mov r24, r12 772: 0e 94 c6 01 call 0x38c ; 0x38c 776: ae 01 movw r20, r28 778: 4f 5f subi r20, 0xFF ; 255 77a: 5f 4f sbci r21, 0xFF ; 255 77c: b7 01 movw r22, r14 77e: 8d 2d mov r24, r13 780: 0e 94 c6 01 call 0x38c ; 0x38c } // Add end flag sequence and update length of frame dest[dest_index++] = HDLC_FLAG_SEQUENCE; 784: 89 81 ldd r24, Y+1 ; 0x01 786: 9a 81 ldd r25, Y+2 ; 0x02 788: f7 01 movw r30, r14 78a: e8 0f add r30, r24 78c: f9 1f adc r31, r25 78e: 2e e7 ldi r18, 0x7E ; 126 790: 20 83 st Z, r18 *dest_len = dest_index; 792: 01 96 adiw r24, 0x01 ; 1 794: f3 01 movw r30, r6 796: 91 83 std Z+1, r25 ; 0x01 798: 80 83 st Z, r24 return 0; 79a: 80 e0 ldi r24, 0x00 ; 0 79c: 90 e0 ldi r25, 0x00 ; 0 79e: 0b c0 rjmp .+22 ; 0x7b6 unsigned char value = 0; FCS_SIZE fcs = FCS_INIT_VALUE; // Make sure that all parameters are valid if (!control || (!src && (src_len > 0)) || !dest || !dest_len) { return -EINVAL; 7a0: 8e e0 ldi r24, 0x0E ; 14 7a2: 92 ed ldi r25, 0xD2 ; 210 7a4: 08 c0 rjmp .+16 ; 0x7b6 7a6: 8e e0 ldi r24, 0x0E ; 14 7a8: 92 ed ldi r25, 0xD2 ; 210 7aa: 05 c0 rjmp .+10 ; 0x7b6 7ac: 8e e0 ldi r24, 0x0E ; 14 7ae: 92 ed ldi r25, 0xD2 ; 210 7b0: 02 c0 rjmp .+4 ; 0x7b6 7b2: 8e e0 ldi r24, 0x0E ; 14 7b4: 92 ed ldi r25, 0xD2 ; 210 // Add end flag sequence and update length of frame dest[dest_index++] = HDLC_FLAG_SEQUENCE; *dest_len = dest_index; return 0; 7b6: 0f 90 pop r0 7b8: 0f 90 pop r0 7ba: df 91 pop r29 7bc: cf 91 pop r28 7be: 1f 91 pop r17 7c0: 0f 91 pop r16 7c2: ff 90 pop r15 7c4: ef 90 pop r14 7c6: df 90 pop r13 7c8: cf 90 pop r12 7ca: bf 90 pop r11 7cc: af 90 pop r10 7ce: 9f 90 pop r9 7d0: 8f 90 pop r8 7d2: 7f 90 pop r7 7d4: 6f 90 pop r6 7d6: 5f 90 pop r5 7d8: 08 95 ret 000007da : register char c; while ( (c = pgm_read_byte(progmem_s++)) ) { lcd_putc(c); } } 7da: cf 93 push r28 7dc: 88 23 and r24, r24 7de: 31 f0 breq .+12 ; 0x7ec 7e0: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 7e4: 81 60 ori r24, 0x01 ; 1 7e6: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 7ea: 05 c0 rjmp .+10 ; 0x7f6 7ec: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 7f0: 8e 7f andi r24, 0xFE ; 254 7f2: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 7f6: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 7fa: 82 60 ori r24, 0x02 ; 2 7fc: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 800: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> 804: 80 e0 ldi r24, 0x00 ; 0 806: 0e 94 95 06 call 0xd2a ; 0xd2a 80a: 62 e0 ldi r22, 0x02 ; 2 80c: 80 e0 ldi r24, 0x00 ; 0 80e: 0e 94 d6 06 call 0xdac ; 0xdac 812: 00 c0 rjmp .+0 ; 0x814 814: 64 e0 ldi r22, 0x04 ; 4 816: 80 e0 ldi r24, 0x00 ; 0 818: 0e 94 81 06 call 0xd02 ; 0xd02 81c: c8 2f mov r28, r24 81e: 62 e0 ldi r22, 0x02 ; 2 820: 80 e0 ldi r24, 0x00 ; 0 822: 0e 94 da 06 call 0xdb4 ; 0xdb4 826: 00 c0 rjmp .+0 ; 0x828 828: 62 e0 ldi r22, 0x02 ; 2 82a: 80 e0 ldi r24, 0x00 ; 0 82c: 0e 94 d6 06 call 0xdac ; 0xdac 830: 00 c0 rjmp .+0 ; 0x832 832: 64 e0 ldi r22, 0x04 ; 4 834: 80 e0 ldi r24, 0x00 ; 0 836: 0e 94 81 06 call 0xd02 ; 0xd02 83a: c2 95 swap r28 83c: c0 7f andi r28, 0xF0 ; 240 83e: 8f 70 andi r24, 0x0F ; 15 840: c8 2b or r28, r24 842: 62 e0 ldi r22, 0x02 ; 2 844: 80 e0 ldi r24, 0x00 ; 0 846: 0e 94 da 06 call 0xdb4 ; 0xdb4 84a: 8c 2f mov r24, r28 84c: cf 91 pop r28 84e: 08 95 ret 00000850 : 850: 80 e0 ldi r24, 0x00 ; 0 852: 0e 94 ed 03 call 0x7da ; 0x7da 856: 88 23 and r24, r24 858: dc f3 brlt .-10 ; 0x850 85a: 00 c0 rjmp .+0 ; 0x85c 85c: 80 e0 ldi r24, 0x00 ; 0 85e: 0e 94 ed 03 call 0x7da ; 0x7da 862: 08 95 ret 00000864 : 864: 62 e0 ldi r22, 0x02 ; 2 866: 80 e0 ldi r24, 0x00 ; 0 868: 0e 94 d6 06 call 0xdac ; 0xdac 86c: 00 c0 rjmp .+0 ; 0x86e 86e: 62 e0 ldi r22, 0x02 ; 2 870: 80 e0 ldi r24, 0x00 ; 0 872: 0e 94 da 06 call 0xdb4 ; 0xdb4 876: 08 95 ret 00000878 : 878: cf 93 push r28 87a: c8 2f mov r28, r24 87c: 66 23 and r22, r22 87e: 31 f0 breq .+12 ; 0x88c 880: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 884: 81 60 ori r24, 0x01 ; 1 886: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 88a: 05 c0 rjmp .+10 ; 0x896 88c: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 890: 8e 7f andi r24, 0xFE ; 254 892: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 896: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 89a: 8d 7f andi r24, 0xFD ; 253 89c: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 8a0: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> 8a4: 80 e0 ldi r24, 0x00 ; 0 8a6: 0e 94 95 06 call 0xd2a ; 0xd2a 8aa: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 8ae: 8f 77 andi r24, 0x7F ; 127 8b0: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 8b4: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 8b8: 8f 7b andi r24, 0xBF ; 191 8ba: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 8be: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 8c2: 8f 7d andi r24, 0xDF ; 223 8c4: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 8c8: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 8cc: 8f 7e andi r24, 0xEF ; 239 8ce: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 8d2: cc 23 and r28, r28 8d4: 2c f4 brge .+10 ; 0x8e0 8d6: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 8da: 80 68 ori r24, 0x80 ; 128 8dc: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 8e0: c6 ff sbrs r28, 6 8e2: 05 c0 rjmp .+10 ; 0x8ee 8e4: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 8e8: 80 64 ori r24, 0x40 ; 64 8ea: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 8ee: c5 ff sbrs r28, 5 8f0: 05 c0 rjmp .+10 ; 0x8fc 8f2: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 8f6: 80 62 ori r24, 0x20 ; 32 8f8: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 8fc: c4 ff sbrs r28, 4 8fe: 05 c0 rjmp .+10 ; 0x90a <__stack+0xb> 900: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 904: 80 61 ori r24, 0x10 ; 16 906: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 90a: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> 90e: 80 e0 ldi r24, 0x00 ; 0 910: 0e 94 95 06 call 0xd2a ; 0xd2a 914: 0e 94 32 04 call 0x864 ; 0x864 918: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 91c: 8f 77 andi r24, 0x7F ; 127 91e: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 922: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 926: 8f 7b andi r24, 0xBF ; 191 928: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 92c: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 930: 8f 7d andi r24, 0xDF ; 223 932: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 936: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 93a: 8f 7e andi r24, 0xEF ; 239 93c: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 940: c3 ff sbrs r28, 3 942: 05 c0 rjmp .+10 ; 0x94e <__stack+0x4f> 944: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 948: 80 68 ori r24, 0x80 ; 128 94a: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 94e: c2 ff sbrs r28, 2 950: 05 c0 rjmp .+10 ; 0x95c <__stack+0x5d> 952: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 956: 80 64 ori r24, 0x40 ; 64 958: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 95c: c1 ff sbrs r28, 1 95e: 05 c0 rjmp .+10 ; 0x96a <__stack+0x6b> 960: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 964: 80 62 ori r24, 0x20 ; 32 966: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 96a: c0 ff sbrs r28, 0 96c: 05 c0 rjmp .+10 ; 0x978 <__stack+0x79> 96e: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 972: 80 61 ori r24, 0x10 ; 16 974: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 978: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> 97c: 80 e0 ldi r24, 0x00 ; 0 97e: 0e 94 95 06 call 0xd2a ; 0xd2a 982: 0e 94 32 04 call 0x864 ; 0x864 986: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 98a: 80 61 ori r24, 0x10 ; 16 98c: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 990: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 994: 80 62 ori r24, 0x20 ; 32 996: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 99a: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 99e: 80 64 ori r24, 0x40 ; 64 9a0: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 9a4: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 9a8: 80 68 ori r24, 0x80 ; 128 9aa: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 9ae: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> 9b2: 80 e0 ldi r24, 0x00 ; 0 9b4: 0e 94 95 06 call 0xd2a ; 0xd2a 9b8: cf 91 pop r28 9ba: 08 95 ret 000009bc : 9bc: cf 93 push r28 9be: c8 2f mov r28, r24 9c0: 0e 94 28 04 call 0x850 ; 0x850 9c4: 60 e0 ldi r22, 0x00 ; 0 9c6: 8c 2f mov r24, r28 9c8: 0e 94 3c 04 call 0x878 ; 0x878 9cc: cf 91 pop r28 9ce: 08 95 ret 000009d0 : 9d0: 61 11 cpse r22, r1 9d2: 04 c0 rjmp .+8 ; 0x9dc 9d4: 80 58 subi r24, 0x80 ; 128 9d6: 0e 94 de 04 call 0x9bc ; 0x9bc 9da: 08 95 ret 9dc: 80 54 subi r24, 0x40 ; 64 9de: 0e 94 de 04 call 0x9bc ; 0x9bc 9e2: 08 95 ret 000009e4 : 9e4: 81 e0 ldi r24, 0x01 ; 1 9e6: 0e 94 de 04 call 0x9bc ; 0x9bc 9ea: 08 95 ret 000009ec : 9ec: 88 23 and r24, r24 9ee: 31 f0 breq .+12 ; 0x9fc 9f0: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> 9f4: 87 7f andi r24, 0xF7 ; 247 9f6: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> 9fa: 05 c0 rjmp .+10 ; 0xa06 9fc: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> a00: 88 60 ori r24, 0x08 ; 8 a02: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> a06: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> a0a: 80 e0 ldi r24, 0x00 ; 0 a0c: 0e 94 95 06 call 0xd2a ; 0xd2a a10: 08 95 ret 00000a12 : a12: 82 e0 ldi r24, 0x02 ; 2 a14: 0e 94 de 04 call 0x9bc ; 0x9bc a18: 08 95 ret 00000a1a : a1a: cf 93 push r28 a1c: c8 2f mov r28, r24 a1e: 0e 94 28 04 call 0x850 ; 0x850 a22: ca 30 cpi r28, 0x0A ; 10 a24: 49 f4 brne .+18 ; 0xa38 a26: 80 34 cpi r24, 0x40 ; 64 a28: 10 f0 brcs .+4 ; 0xa2e a2a: 80 e0 ldi r24, 0x00 ; 0 a2c: 01 c0 rjmp .+2 ; 0xa30 a2e: 80 e4 ldi r24, 0x40 ; 64 a30: 80 58 subi r24, 0x80 ; 128 a32: 0e 94 de 04 call 0x9bc ; 0x9bc a36: 13 c0 rjmp .+38 ; 0xa5e a38: 80 31 cpi r24, 0x10 ; 16 a3a: 29 f4 brne .+10 ; 0xa46 a3c: 60 e0 ldi r22, 0x00 ; 0 a3e: 80 ec ldi r24, 0xC0 ; 192 a40: 0e 94 3c 04 call 0x878 ; 0x878 a44: 06 c0 rjmp .+12 ; 0xa52 a46: 80 35 cpi r24, 0x50 ; 80 a48: 21 f4 brne .+8 ; 0xa52 a4a: 60 e0 ldi r22, 0x00 ; 0 a4c: 80 e8 ldi r24, 0x80 ; 128 a4e: 0e 94 3c 04 call 0x878 ; 0x878 a52: 0e 94 28 04 call 0x850 ; 0x850 a56: 61 e0 ldi r22, 0x01 ; 1 a58: 8c 2f mov r24, r28 a5a: 0e 94 3c 04 call 0x878 ; 0x878 a5e: cf 91 pop r28 a60: 08 95 ret 00000a62 : a62: cf 93 push r28 a64: df 93 push r29 a66: ec 01 movw r28, r24 a68: 21 96 adiw r28, 0x01 ; 1 a6a: fc 01 movw r30, r24 a6c: 80 81 ld r24, Z a6e: 88 23 and r24, r24 a70: 29 f0 breq .+10 ; 0xa7c a72: 0e 94 0d 05 call 0xa1a ; 0xa1a a76: 89 91 ld r24, Y+ a78: 81 11 cpse r24, r1 a7a: fb cf rjmp .-10 ; 0xa72 a7c: df 91 pop r29 a7e: cf 91 pop r28 a80: 08 95 ret 00000a82 : // инициализация дисплея void lcd_init(uint8_t dispAttr) { a82: 1f 93 push r17 a84: cf 93 push r28 a86: df 93 push r29 a88: 18 2f mov r17, r24 #if LCD_PCF8574_INIT == 1 //инициализация pcf pcf8574_init(); a8a: 0e 94 78 06 call 0xcf0 ; 0xcf0 #endif dataport = 0; a8e: 10 92 42 03 sts 0x0342, r1 ; 0x800342 <__data_end> pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); a92: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> a96: 80 e0 ldi r24, 0x00 ; 0 a98: 0e 94 95 06 call 0xd2a ; 0xd2a static inline void _delayFourCycles(unsigned int __count) { if ( __count == 0 ) __asm__ __volatile__( "rjmp 1f\n 1:" ); else __asm__ __volatile__ ( a9c: 80 ea ldi r24, 0xA0 ; 160 a9e: 9f e0 ldi r25, 0x0F ; 15 aa0: 01 97 sbiw r24, 0x01 ; 1 aa2: f1 f7 brne .-4 ; 0xaa0 pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); delay(16000); // первоначальная запись на ЖК-дисплей — 8 бит dataport |= _BV(LCD_DATA1_PIN); // _BV(LCD_FUNCTION)>>4; aa4: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> aa8: 80 62 ori r24, 0x20 ; 32 aaa: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> dataport |= _BV(LCD_DATA0_PIN); // _BV(LCD_FUNCTION_8BIT)>>4; aae: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> ab2: 80 61 ori r24, 0x10 ; 16 ab4: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); ab8: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> abc: 80 e0 ldi r24, 0x00 ; 0 abe: 0e 94 95 06 call 0xd2a ; 0xd2a // дрючим дисплей чтобы он начал работать lcd_e_toggle(); ac2: 0e 94 32 04 call 0x864 ; 0x864 static inline void _delayFourCycles(unsigned int __count) { if ( __count == 0 ) __asm__ __volatile__( "rjmp 1f\n 1:" ); else __asm__ __volatile__ ( ac6: 80 ee ldi r24, 0xE0 ; 224 ac8: 94 e0 ldi r25, 0x04 ; 4 aca: 01 97 sbiw r24, 0x01 ; 1 acc: f1 f7 brne .-4 ; 0xaca pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); // дрючим дисплей чтобы он начал работать lcd_e_toggle(); delay(4992); lcd_e_toggle(); ace: 0e 94 32 04 call 0x864 ; 0x864 static inline void _delayFourCycles(unsigned int __count) { if ( __count == 0 ) __asm__ __volatile__( "rjmp 1f\n 1:" ); else __asm__ __volatile__ ( ad2: c0 e1 ldi r28, 0x10 ; 16 ad4: d0 e0 ldi r29, 0x00 ; 0 ad6: ce 01 movw r24, r28 ad8: 01 97 sbiw r24, 0x01 ; 1 ada: f1 f7 brne .-4 ; 0xad8 // дрючим дисплей чтобы он начал работать lcd_e_toggle(); delay(4992); lcd_e_toggle(); delay(64); lcd_e_toggle(); adc: 0e 94 32 04 call 0x864 ; 0x864 static inline void _delayFourCycles(unsigned int __count) { if ( __count == 0 ) __asm__ __volatile__( "rjmp 1f\n 1:" ); else __asm__ __volatile__ ( ae0: ce 01 movw r24, r28 ae2: 01 97 sbiw r24, 0x01 ; 1 ae4: f1 f7 brne .-4 ; 0xae2 delay(64); lcd_e_toggle(); delay(64); // переходим в 4 битный режим dataport &= ~_BV(LCD_DATA0_PIN); ae6: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> aea: 8f 7e andi r24, 0xEF ; 239 aec: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); af0: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> af4: 80 e0 ldi r24, 0x00 ; 0 af6: 0e 94 95 06 call 0xd2a ; 0xd2a lcd_e_toggle(); afa: 0e 94 32 04 call 0x864 ; 0x864 static inline void _delayFourCycles(unsigned int __count) { if ( __count == 0 ) __asm__ __volatile__( "rjmp 1f\n 1:" ); else __asm__ __volatile__ ( afe: 21 97 sbiw r28, 0x01 ; 1 b00: f1 f7 brne .-4 ; 0xafe pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); lcd_e_toggle(); delay(64); lcd_command(LCD_FUNCTION_DEFAULT); // настраиваем кол-во строк b02: 88 e2 ldi r24, 0x28 ; 40 b04: 0e 94 de 04 call 0x9bc ; 0x9bc lcd_command(LCD_DISP_OFF); // вырубаем дисплей b08: 88 e0 ldi r24, 0x08 ; 8 b0a: 0e 94 de 04 call 0x9bc ; 0x9bc lcd_clrscr(); // чистим экран b0e: 0e 94 f2 04 call 0x9e4 ; 0x9e4 lcd_command(LCD_MODE_DEFAULT); // запускаемся в стандартном режиме b12: 86 e0 ldi r24, 0x06 ; 6 b14: 0e 94 de 04 call 0x9bc ; 0x9bc lcd_command(dispAttr); // отправляем настройки b18: 81 2f mov r24, r17 b1a: 0e 94 de 04 call 0x9bc ; 0x9bc } b1e: df 91 pop r29 b20: cf 91 pop r28 b22: 1f 91 pop r17 b24: 08 95 ret 00000b26 : struct TextCounter textCounter; //struct TextCounter textCounter; void Lcd_inciliation() { lcd_init(LCD_DISP_ON_BLINK); // инициализация дисплея b26: 8d e0 ldi r24, 0x0D ; 13 b28: 0e 94 41 05 call 0xa82 ; 0xa82 lcd_home(); // домой курсор b2c: 0e 94 09 05 call 0xa12 ; 0xa12 lcd_led(0); // вкл подсветки b30: 80 e0 ldi r24, 0x00 ; 0 b32: 0e 94 f6 04 call 0x9ec ; 0x9ec b36: 08 95 ret 00000b38 : //textCounter.startTime = millis(); // Запоминаем время запуска программы //Из за строчки выше все ломается } void fillBuffer1(const char* source, char* buffer, size_t bufferSize, int incrementValue) { b38: cf 92 push r12 b3a: df 92 push r13 b3c: ef 92 push r14 b3e: ff 92 push r15 b40: 0f 93 push r16 b42: 1f 93 push r17 b44: cf 93 push r28 b46: df 93 push r29 b48: 8c 01 movw r16, r24 b4a: 7b 01 movw r14, r22 b4c: c9 01 movw r24, r18 int startIndex = incrementValue % strlen(source); // Определяем начальный индекс на основе incrementValue b4e: f8 01 movw r30, r16 b50: 01 90 ld r0, Z+ b52: 00 20 and r0, r0 b54: e9 f7 brne .-6 ; 0xb50 b56: 31 97 sbiw r30, 0x01 ; 1 b58: bf 01 movw r22, r30 b5a: 60 1b sub r22, r16 b5c: 71 0b sbc r23, r17 b5e: 0e 94 76 0b call 0x16ec ; 0x16ec <__udivmodhi4> b62: 67 01 movw r12, r14 b64: 20 e1 ldi r18, 0x10 ; 16 b66: c2 0e add r12, r18 b68: d1 1c adc r13, r1 b6a: e7 01 movw r28, r14 int endIndex = startIndex + 16; for (int i = 0; i < 16; ++i) { buffer[i] = source[(startIndex + i) % strlen(source)]; b6c: 9c 01 movw r18, r24 b6e: 2e 19 sub r18, r14 b70: 3f 09 sbc r19, r15 b72: f8 01 movw r30, r16 b74: 01 90 ld r0, Z+ b76: 00 20 and r0, r0 b78: e9 f7 brne .-6 ; 0xb74 b7a: 31 97 sbiw r30, 0x01 ; 1 b7c: bf 01 movw r22, r30 b7e: 60 1b sub r22, r16 b80: 71 0b sbc r23, r17 b82: c9 01 movw r24, r18 b84: 8c 0f add r24, r28 b86: 9d 1f adc r25, r29 b88: 0e 94 76 0b call 0x16ec ; 0x16ec <__udivmodhi4> b8c: f8 01 movw r30, r16 b8e: e8 0f add r30, r24 b90: f9 1f adc r31, r25 b92: 80 81 ld r24, Z b94: 89 93 st Y+, r24 void fillBuffer1(const char* source, char* buffer, size_t bufferSize, int incrementValue) { int startIndex = incrementValue % strlen(source); // Определяем начальный индекс на основе incrementValue int endIndex = startIndex + 16; for (int i = 0; i < 16; ++i) { b96: cc 15 cp r28, r12 b98: dd 05 cpc r29, r13 b9a: 59 f7 brne .-42 ; 0xb72 buffer[i] = source[(startIndex + i) % strlen(source)]; } buffer[16] = '\0'; // Установка нулевого символа в конце буфера b9c: f7 01 movw r30, r14 b9e: 10 8a std Z+16, r1 ; 0x10 } ba0: df 91 pop r29 ba2: cf 91 pop r28 ba4: 1f 91 pop r17 ba6: 0f 91 pop r16 ba8: ff 90 pop r15 baa: ef 90 pop r14 bac: df 90 pop r13 bae: cf 90 pop r12 bb0: 08 95 ret 00000bb2 : void fillBuffer2(float value1, float value2, float value3, char* buffer, size_t bufferSize) { bb2: af 92 push r10 bb4: bf 92 push r11 bb6: cf 92 push r12 bb8: df 92 push r13 bba: ef 92 push r14 bbc: ff 92 push r15 bbe: 0f 93 push r16 bc0: 1f 93 push r17 snprintf(buffer, bufferSize, "%.2f.%.2f.%.2f", value1, value2, value3); bc2: 1f 93 push r17 bc4: 0f 93 push r16 bc6: ff 92 push r15 bc8: ef 92 push r14 bca: 5f 93 push r21 bcc: 4f 93 push r20 bce: 3f 93 push r19 bd0: 2f 93 push r18 bd2: 9f 93 push r25 bd4: 8f 93 push r24 bd6: 7f 93 push r23 bd8: 6f 93 push r22 bda: 86 e1 ldi r24, 0x16 ; 22 bdc: 93 e0 ldi r25, 0x03 ; 3 bde: 9f 93 push r25 be0: 8f 93 push r24 be2: bf 92 push r11 be4: af 92 push r10 be6: df 92 push r13 be8: cf 92 push r12 bea: 0e 94 af 0b call 0x175e ; 0x175e } bee: 8d b7 in r24, 0x3d ; 61 bf0: 9e b7 in r25, 0x3e ; 62 bf2: 42 96 adiw r24, 0x12 ; 18 bf4: 0f b6 in r0, 0x3f ; 63 bf6: f8 94 cli bf8: 9e bf out 0x3e, r25 ; 62 bfa: 0f be out 0x3f, r0 ; 63 bfc: 8d bf out 0x3d, r24 ; 61 bfe: 1f 91 pop r17 c00: 0f 91 pop r16 c02: ff 90 pop r15 c04: ef 90 pop r14 c06: df 90 pop r13 c08: cf 90 pop r12 c0a: bf 90 pop r11 c0c: af 90 pop r10 c0e: 08 95 ret 00000c10 : void printLcd(struct DisplayData* displayData) { c10: 6f 92 push r6 c12: 7f 92 push r7 c14: af 92 push r10 c16: bf 92 push r11 c18: cf 92 push r12 c1a: df 92 push r13 c1c: ef 92 push r14 c1e: ff 92 push r15 c20: 0f 93 push r16 c22: 1f 93 push r17 c24: cf 93 push r28 c26: df 93 push r29 c28: cd b7 in r28, 0x3d ; 61 c2a: de b7 in r29, 0x3e ; 62 c2c: c2 54 subi r28, 0x42 ; 66 c2e: d1 09 sbc r29, r1 c30: 0f b6 in r0, 0x3f ; 63 c32: f8 94 cli c34: de bf out 0x3e, r29 ; 62 c36: 0f be out 0x3f, r0 ; 63 c38: cd bf out 0x3d, r28 ; 61 c3a: 3c 01 movw r6, r24 // Буферы для заполнения данных char buffer1[17]; char buffer2[17]; // Заполнение буфера 1 fillBuffer1(displayData->topLine, buffer1, sizeof(buffer1), textCounter.incrementValue); c3c: 20 91 49 03 lds r18, 0x0349 ; 0x800349 c40: 30 91 4a 03 lds r19, 0x034A ; 0x80034a c44: 41 e1 ldi r20, 0x11 ; 17 c46: 50 e0 ldi r21, 0x00 ; 0 c48: be 01 movw r22, r28 c4a: 6f 5f subi r22, 0xFF ; 255 c4c: 7f 4f sbci r23, 0xFF ; 255 c4e: 0e 94 9c 05 call 0xb38 ; 0xb38 // Заполнение буфера 2 fillBuffer2(displayData->value1, displayData->value2, displayData->value3, buffer2, sizeof(buffer2)); c52: f3 01 movw r30, r6 c54: e8 5b subi r30, 0xB8 ; 184 c56: ff 4f sbci r31, 0xFF ; 255 c58: e0 80 ld r14, Z c5a: f1 80 ldd r15, Z+1 ; 0x01 c5c: 02 81 ldd r16, Z+2 ; 0x02 c5e: 13 81 ldd r17, Z+3 ; 0x03 c60: 34 97 sbiw r30, 0x04 ; 4 c62: 20 81 ld r18, Z c64: 31 81 ldd r19, Z+1 ; 0x01 c66: 42 81 ldd r20, Z+2 ; 0x02 c68: 53 81 ldd r21, Z+3 ; 0x03 c6a: 34 97 sbiw r30, 0x04 ; 4 c6c: 60 81 ld r22, Z c6e: 71 81 ldd r23, Z+1 ; 0x01 c70: 82 81 ldd r24, Z+2 ; 0x02 c72: 93 81 ldd r25, Z+3 ; 0x03 c74: 0f 2e mov r0, r31 c76: f1 e1 ldi r31, 0x11 ; 17 c78: af 2e mov r10, r31 c7a: b1 2c mov r11, r1 c7c: f0 2d mov r31, r0 c7e: fe 01 movw r30, r28 c80: 72 96 adiw r30, 0x12 ; 18 c82: 6f 01 movw r12, r30 c84: 0e 94 d9 05 call 0xbb2 ; 0xbb2 // Создание массива для вывода на дисплей char displayArray[32]; strncpy(displayArray, buffer1, 16); // Копирование первых 16 символов из buffer1 в displayArray c88: 40 e1 ldi r20, 0x10 ; 16 c8a: 50 e0 ldi r21, 0x00 ; 0 c8c: be 01 movw r22, r28 c8e: 6f 5f subi r22, 0xFF ; 255 c90: 7f 4f sbci r23, 0xFF ; 255 c92: ce 01 movw r24, r28 c94: 83 96 adiw r24, 0x23 ; 35 c96: 0e 94 8a 0b call 0x1714 ; 0x1714 strncpy(displayArray + 16, buffer2, 16); // Копирование первых 16 символов из buffer2 в displayArray, начиная с позиции 16 c9a: 40 e1 ldi r20, 0x10 ; 16 c9c: 50 e0 ldi r21, 0x00 ; 0 c9e: b6 01 movw r22, r12 ca0: ce 01 movw r24, r28 ca2: c3 96 adiw r24, 0x33 ; 51 ca4: 0e 94 8a 0b call 0x1714 ; 0x1714 // Вывод данных на экран lcd_gotoxy(0, 0); ca8: 60 e0 ldi r22, 0x00 ; 0 caa: 80 e0 ldi r24, 0x00 ; 0 cac: 0e 94 e8 04 call 0x9d0 ; 0x9d0 lcd_puts(displayArray); cb0: ce 01 movw r24, r28 cb2: 83 96 adiw r24, 0x23 ; 35 cb4: 0e 94 31 05 call 0xa62 ; 0xa62 lcd_gotoxy(0, 1); cb8: 61 e0 ldi r22, 0x01 ; 1 cba: 80 e0 ldi r24, 0x00 ; 0 cbc: 0e 94 e8 04 call 0x9d0 ; 0x9d0 lcd_puts(displayArray + 16); // Вывод второй половины displayArray cc0: ce 01 movw r24, r28 cc2: c3 96 adiw r24, 0x33 ; 51 cc4: 0e 94 31 05 call 0xa62 ; 0xa62 } cc8: ce 5b subi r28, 0xBE ; 190 cca: df 4f sbci r29, 0xFF ; 255 ccc: 0f b6 in r0, 0x3f ; 63 cce: f8 94 cli cd0: de bf out 0x3e, r29 ; 62 cd2: 0f be out 0x3f, r0 ; 63 cd4: cd bf out 0x3d, r28 ; 61 cd6: df 91 pop r29 cd8: cf 91 pop r28 cda: 1f 91 pop r17 cdc: 0f 91 pop r16 cde: ff 90 pop r15 ce0: ef 90 pop r14 ce2: df 90 pop r13 ce4: cf 90 pop r12 ce6: bf 90 pop r11 ce8: af 90 pop r10 cea: 7f 90 pop r7 cec: 6f 90 pop r6 cee: 08 95 ret 00000cf0 : i2c_write(b); i2c_stop(); return 0; } return -1; } cf0: 0e 94 de 06 call 0xdbc ; 0xdbc cf4: 83 e0 ldi r24, 0x03 ; 3 cf6: 8a 95 dec r24 cf8: f1 f7 brne .-4 ; 0xcf6 cfa: 00 00 nop cfc: 10 92 4b 03 sts 0x034B, r1 ; 0x80034b d00: 08 95 ret 00000d02 : d02: 81 11 cpse r24, r1 d04: 0e c0 rjmp .+28 ; 0xd22 d06: 68 30 cpi r22, 0x08 ; 8 d08: 70 f4 brcc .+28 ; 0xd26 d0a: 80 91 4b 03 lds r24, 0x034B ; 0x80034b d0e: 08 2e mov r0, r24 d10: 00 0c add r0, r0 d12: 99 0b sbc r25, r25 d14: 02 c0 rjmp .+4 ; 0xd1a d16: 95 95 asr r25 d18: 87 95 ror r24 d1a: 6a 95 dec r22 d1c: e2 f7 brpl .-8 ; 0xd16 d1e: 81 70 andi r24, 0x01 ; 1 d20: 08 95 ret d22: 8f ef ldi r24, 0xFF ; 255 d24: 08 95 ret d26: 8f ef ldi r24, 0xFF ; 255 d28: 08 95 ret 00000d2a : d2a: cf 93 push r28 d2c: 81 11 cpse r24, r1 d2e: 0d c0 rjmp .+26 ; 0xd4a d30: c6 2f mov r28, r22 d32: 60 93 4b 03 sts 0x034B, r22 ; 0x80034b d36: 8e e4 ldi r24, 0x4E ; 78 d38: 0e 94 e4 06 call 0xdc8 ; 0xdc8 d3c: 8c 2f mov r24, r28 d3e: 0e 94 14 07 call 0xe28 ; 0xe28 d42: 0e 94 0b 07 call 0xe16 ; 0xe16 d46: 80 e0 ldi r24, 0x00 ; 0 d48: 01 c0 rjmp .+2 ; 0xd4c d4a: 8f ef ldi r24, 0xFF ; 255 d4c: cf 91 pop r28 d4e: 08 95 ret 00000d50 : // настройка пинов вывода int8_t pcf8574_setoutputpin(uint8_t deviceid, uint8_t pin, uint8_t data) { d50: cf 93 push r28 d52: df 93 push r29 if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES) && (pin >= 0 && pin < PCF8574_MAXPINS)) { d54: 81 11 cpse r24, r1 d56: 24 c0 rjmp .+72 ; 0xda0 d58: 68 30 cpi r22, 0x08 ; 8 d5a: 20 f5 brcc .+72 ; 0xda4 uint8_t b = 0; b = pcf8574_pinstatus[deviceid]; d5c: 80 91 4b 03 lds r24, 0x034B ; 0x80034b b = (data != 0) ? (b | (1 << pin)) : (b & ~(1 << pin)); d60: 44 23 and r20, r20 d62: 49 f0 breq .+18 ; 0xd76 d64: c1 e0 ldi r28, 0x01 ; 1 d66: d0 e0 ldi r29, 0x00 ; 0 d68: 02 c0 rjmp .+4 ; 0xd6e d6a: cc 0f add r28, r28 d6c: dd 1f adc r29, r29 d6e: 6a 95 dec r22 d70: e2 f7 brpl .-8 ; 0xd6a d72: c8 2b or r28, r24 d74: 09 c0 rjmp .+18 ; 0xd88 d76: c1 e0 ldi r28, 0x01 ; 1 d78: d0 e0 ldi r29, 0x00 ; 0 d7a: 02 c0 rjmp .+4 ; 0xd80 d7c: cc 0f add r28, r28 d7e: dd 1f adc r29, r29 d80: 6a 95 dec r22 d82: e2 f7 brpl .-8 ; 0xd7c d84: c0 95 com r28 d86: c8 23 and r28, r24 pcf8574_pinstatus[deviceid] = b; d88: c0 93 4b 03 sts 0x034B, r28 ; 0x80034b //рестартим i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_WRITE); d8c: 8e e4 ldi r24, 0x4E ; 78 d8e: 0e 94 e4 06 call 0xdc8 ; 0xdc8 i2c_write(b); d92: 8c 2f mov r24, r28 d94: 0e 94 14 07 call 0xe28 ; 0xe28 i2c_stop(); d98: 0e 94 0b 07 call 0xe16 ; 0xe16 return 0; d9c: 80 e0 ldi r24, 0x00 ; 0 d9e: 03 c0 rjmp .+6 ; 0xda6 } return -1; da0: 8f ef ldi r24, 0xFF ; 255 da2: 01 c0 rjmp .+2 ; 0xda6 da4: 8f ef ldi r24, 0xFF ; 255 } da6: df 91 pop r29 da8: cf 91 pop r28 daa: 08 95 ret 00000dac : // установка высокого уровня на выходных пинах int8_t pcf8574_setoutputpinhigh(uint8_t deviceid, uint8_t pin) { return pcf8574_setoutputpin(deviceid, pin, 1); dac: 41 e0 ldi r20, 0x01 ; 1 dae: 0e 94 a8 06 call 0xd50 ; 0xd50 } db2: 08 95 ret 00000db4 : // установка низкого уровня на выходных пинах int8_t pcf8574_setoutputpinlow(uint8_t deviceid, uint8_t pin) { return pcf8574_setoutputpin(deviceid, pin, 0); db4: 40 e0 ldi r20, 0x00 ; 0 db6: 0e 94 a8 06 call 0xd50 ; 0xd50 } dba: 08 95 ret 00000dbc : // тупа повторяем условие СТАРТ unsigned char i2c_rep_start(unsigned char address) { return i2c_start(address); } dbc: 10 92 b9 00 sts 0x00B9, r1 ; 0x8000b9 <__DATA_REGION_ORIGIN__+0x59> dc0: 8d ef ldi r24, 0xFD ; 253 dc2: 80 93 b8 00 sts 0x00B8, r24 ; 0x8000b8 <__DATA_REGION_ORIGIN__+0x58> dc6: 08 95 ret 00000dc8 : dc8: 94 ea ldi r25, 0xA4 ; 164 dca: 90 93 bc 00 sts 0x00BC, r25 ; 0x8000bc <__DATA_REGION_ORIGIN__+0x5c> dce: ec eb ldi r30, 0xBC ; 188 dd0: f0 e0 ldi r31, 0x00 ; 0 dd2: 90 81 ld r25, Z dd4: 99 23 and r25, r25 dd6: ec f7 brge .-6 ; 0xdd2 dd8: 90 91 b9 00 lds r25, 0x00B9 ; 0x8000b9 <__DATA_REGION_ORIGIN__+0x59> ddc: 98 7f andi r25, 0xF8 ; 248 dde: 98 30 cpi r25, 0x08 ; 8 de0: 11 f0 breq .+4 ; 0xde6 de2: 90 31 cpi r25, 0x10 ; 16 de4: a1 f4 brne .+40 ; 0xe0e de6: 80 93 bb 00 sts 0x00BB, r24 ; 0x8000bb <__DATA_REGION_ORIGIN__+0x5b> dea: 84 e8 ldi r24, 0x84 ; 132 dec: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__DATA_REGION_ORIGIN__+0x5c> df0: ec eb ldi r30, 0xBC ; 188 df2: f0 e0 ldi r31, 0x00 ; 0 df4: 80 81 ld r24, Z df6: 88 23 and r24, r24 df8: ec f7 brge .-6 ; 0xdf4 dfa: 90 91 b9 00 lds r25, 0x00B9 ; 0x8000b9 <__DATA_REGION_ORIGIN__+0x59> dfe: 98 7f andi r25, 0xF8 ; 248 e00: 98 31 cpi r25, 0x18 ; 24 e02: 39 f0 breq .+14 ; 0xe12 e04: 81 e0 ldi r24, 0x01 ; 1 e06: 90 34 cpi r25, 0x40 ; 64 e08: 29 f4 brne .+10 ; 0xe14 e0a: 80 e0 ldi r24, 0x00 ; 0 e0c: 08 95 ret e0e: 81 e0 ldi r24, 0x01 ; 1 e10: 08 95 ret e12: 80 e0 ldi r24, 0x00 ; 0 e14: 08 95 ret 00000e16 : // передача условия СТОП на шину void i2c_stop(void) { // отправка условия СТОП TWCR = (1< // ждем выполнения условия остановки while(TWCR & (1< } e26: 08 95 ret 00000e28 : unsigned char i2c_write( unsigned char data ) { uint8_t twst; // отправляем данные на уст-во TWDR = data; e28: 80 93 bb 00 sts 0x00BB, r24 ; 0x8000bb <__DATA_REGION_ORIGIN__+0x5b> TWCR = (1< // ждем завершения передачи while(!(TWCR & (1< // записываем ответ от ведомого уст-ва twst = TW_STATUS & 0xF8; e3c: 90 91 b9 00 lds r25, 0x00B9 ; 0x8000b9 <__DATA_REGION_ORIGIN__+0x59> e40: 98 7f andi r25, 0xF8 ; 248 e42: 81 e0 ldi r24, 0x01 ; 1 e44: 98 32 cpi r25, 0x28 ; 40 e46: 09 f4 brne .+2 ; 0xe4a e48: 80 e0 ldi r24, 0x00 ; 0 if( twst != TW_MT_DATA_ACK) return 1; return 0; } e4a: 08 95 ret 00000e4c
: #include "UART/uart.h" #include "stdbool.h" #include "LCD/lcd.h" #include "Protocol/protocol.h" int main(void) { e4c: 4f 92 push r4 e4e: 5f 92 push r5 e50: 6f 92 push r6 e52: 7f 92 push r7 e54: 8f 92 push r8 e56: 9f 92 push r9 e58: af 92 push r10 e5a: bf 92 push r11 e5c: cf 92 push r12 e5e: df 92 push r13 e60: ef 92 push r14 e62: ff 92 push r15 e64: 0f 93 push r16 e66: 1f 93 push r17 e68: cf 93 push r28 e6a: df 93 push r29 e6c: cd b7 in r28, 0x3d ; 61 e6e: de b7 in r29, 0x3e ; 62 e70: c3 50 subi r28, 0x03 ; 3 e72: d2 40 sbci r29, 0x02 ; 2 e74: 0f b6 in r0, 0x3f ; 63 e76: f8 94 cli e78: de bf out 0x3e, r29 ; 62 e7a: 0f be out 0x3f, r0 ; 63 e7c: cd bf out 0x3d, r28 ; 61 struct Client hdlc; bool flag_connection = false; Lcd_inciliation(); e7e: 0e 94 93 05 call 0xb26 ; 0xb26 UART_init(); e82: 0e 94 9e 0a call 0x153c ; 0x153c init_hdlc_client(&hdlc, 200); e86: 68 ec ldi r22, 0xC8 ; 200 e88: 70 e0 ldi r23, 0x00 ; 0 e8a: ce 01 movw r24, r28 e8c: 01 96 adiw r24, 0x01 ; 1 e8e: 0e 94 53 00 call 0xa6 ; 0xa6 // while(true){ // if (!flag_connection){ // } // } hdlc_connect(&hdlc); e92: ce 01 movw r24, r28 e94: 01 96 adiw r24, 0x01 ; 1 e96: 0e 94 6c 00 call 0xd8 ; 0xd8 uint8_t buffer[10]; hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); e9a: 4a e0 ldi r20, 0x0A ; 10 e9c: 50 e0 ldi r21, 0x00 ; 0 e9e: be 01 movw r22, r28 ea0: 66 5e subi r22, 0xE6 ; 230 ea2: 7f 4f sbci r23, 0xFF ; 255 ea4: ce 01 movw r24, r28 ea6: 01 96 adiw r24, 0x01 ; 1 ea8: 0e 94 91 00 call 0x122 ; 0x122 UART_send(buffer, sizeof buffer); eac: 6a e0 ldi r22, 0x0A ; 10 eae: 70 e0 ldi r23, 0x00 ; 0 eb0: ce 01 movw r24, r28 eb2: 4a 96 adiw r24, 0x1a ; 26 eb4: 0e 94 aa 0a call 0x1554 ; 0x1554 while(!flag_connection){ uint8_t* buffer_recive[10]; UART_receive(buffer_recive, sizeof buffer_recive); eb8: 64 e1 ldi r22, 0x14 ; 20 eba: 70 e0 ldi r23, 0x00 ; 0 ebc: ce 01 movw r24, r28 ebe: 80 51 subi r24, 0x10 ; 16 ec0: 9e 4f sbci r25, 0xFE ; 254 ec2: 0e 94 ce 0a call 0x159c ; 0x159c int err = hdlc_timeout_handler(&hdlc, 1); ec6: 61 e0 ldi r22, 0x01 ; 1 ec8: 70 e0 ldi r23, 0x00 ; 0 eca: ce 01 movw r24, r28 ecc: 01 96 adiw r24, 0x01 ; 1 ece: 0e 94 a8 01 call 0x350 ; 0x350 if (err == ERR_FRAME_TIME_OUT){ ed2: 05 96 adiw r24, 0x05 ; 5 ed4: 81 f4 brne .+32 ; 0xef6 hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); ed6: 4a e0 ldi r20, 0x0A ; 10 ed8: 50 e0 ldi r21, 0x00 ; 0 eda: be 01 movw r22, r28 edc: 66 5e subi r22, 0xE6 ; 230 ede: 7f 4f sbci r23, 0xFF ; 255 ee0: ce 01 movw r24, r28 ee2: 01 96 adiw r24, 0x01 ; 1 ee4: 0e 94 91 00 call 0x122 ; 0x122 UART_send(buffer, sizeof buffer); ee8: 6a e0 ldi r22, 0x0A ; 10 eea: 70 e0 ldi r23, 0x00 ; 0 eec: ce 01 movw r24, r28 eee: 4a 96 adiw r24, 0x1a ; 26 ef0: 0e 94 aa 0a call 0x1554 ; 0x1554 ef4: e1 cf rjmp .-62 ; 0xeb8 continue; } err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive, sizeof buffer_recive, 0, 0); ef6: 00 e0 ldi r16, 0x00 ; 0 ef8: 10 e0 ldi r17, 0x00 ; 0 efa: 20 e0 ldi r18, 0x00 ; 0 efc: 30 e0 ldi r19, 0x00 ; 0 efe: 44 e1 ldi r20, 0x14 ; 20 f00: 50 e0 ldi r21, 0x00 ; 0 f02: be 01 movw r22, r28 f04: 60 51 subi r22, 0x10 ; 16 f06: 7e 4f sbci r23, 0xFE ; 254 f08: ce 01 movw r24, r28 f0a: 01 96 adiw r24, 0x01 ; 1 f0c: 0e 94 07 01 call 0x20e ; 0x20e f10: 8c 01 movw r16, r24 if (err < 0){ f12: 99 23 and r25, r25 f14: ac f4 brge .+42 ; 0xf40 if (err == ERR_INVALID_SEQ_NUMBER_FRAME){ f16: 0a 3f cpi r16, 0xFA ; 250 f18: 8f ef ldi r24, 0xFF ; 255 f1a: 18 07 cpc r17, r24 f1c: b1 f4 brne .+44 ; 0xf4a uint8_t* buffer_rej[10]; hdlc_get_raw_frame(&hdlc, buffer_rej, sizeof buffer_rej); f1e: 44 e1 ldi r20, 0x14 ; 20 f20: 50 e0 ldi r21, 0x00 ; 0 f22: be 01 movw r22, r28 f24: 60 5a subi r22, 0xA0 ; 160 f26: 7e 4f sbci r23, 0xFE ; 254 f28: ce 01 movw r24, r28 f2a: 01 96 adiw r24, 0x01 ; 1 f2c: 0e 94 91 00 call 0x122 ; 0x122 UART_send(buffer_rej, sizeof buffer_rej); f30: 64 e1 ldi r22, 0x14 ; 20 f32: 70 e0 ldi r23, 0x00 ; 0 f34: ce 01 movw r24, r28 f36: 80 5a subi r24, 0xA0 ; 160 f38: 9e 4f sbci r25, 0xFE ; 254 f3a: 0e 94 aa 0a call 0x1554 ; 0x1554 f3e: 05 c0 rjmp .+10 ; 0xf4a return err; } return err; } if (hdlc.state == READY_STATE){ f40: 89 81 ldd r24, Y+1 ; 0x01 hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); UART_send(buffer, sizeof buffer); while(!flag_connection){ f42: 82 30 cpi r24, 0x02 ; 2 f44: 09 f0 breq .+2 ; 0xf48 f46: b8 cf rjmp .-144 ; 0xeb8 f48: 03 c0 rjmp .+6 ; 0xf50 hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); UART_send(buffer, sizeof buffer); continue; } err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive, sizeof buffer_recive, 0, 0); f4a: 80 2f mov r24, r16 f4c: 91 2f mov r25, r17 f4e: fe c0 rjmp .+508 ; 0x114c flag_connection = true; } } struct message mess; mess.numbers[0] = 1.23; f50: 84 ea ldi r24, 0xA4 ; 164 f52: 90 e7 ldi r25, 0x70 ; 112 f54: ad e9 ldi r26, 0x9D ; 157 f56: bf e3 ldi r27, 0x3F ; 63 f58: 8c a3 std Y+36, r24 ; 0x24 f5a: 9d a3 std Y+37, r25 ; 0x25 f5c: ae a3 std Y+38, r26 ; 0x26 f5e: bf a3 std Y+39, r27 ; 0x27 mess.numbers[1] = 22.1; f60: 8d ec ldi r24, 0xCD ; 205 f62: 9c ec ldi r25, 0xCC ; 204 f64: a0 eb ldi r26, 0xB0 ; 176 f66: b1 e4 ldi r27, 0x41 ; 65 f68: 88 a7 std Y+40, r24 ; 0x28 f6a: 99 a7 std Y+41, r25 ; 0x29 f6c: aa a7 std Y+42, r26 ; 0x2a f6e: bb a7 std Y+43, r27 ; 0x2b mess.numbers[2] = 100; f70: 80 e0 ldi r24, 0x00 ; 0 f72: 90 e0 ldi r25, 0x00 ; 0 f74: a8 ec ldi r26, 0xC8 ; 200 f76: b2 e4 ldi r27, 0x42 ; 66 f78: 8c a7 std Y+44, r24 ; 0x2c f7a: 9d a7 std Y+45, r25 ; 0x2d f7c: ae a7 std Y+46, r26 ; 0x2e f7e: bf a7 std Y+47, r27 ; 0x2f mess.len_numbers = 3; f80: 83 e0 ldi r24, 0x03 ; 3 f82: 90 e0 ldi r25, 0x00 ; 0 f84: 99 ab std Y+49, r25 ; 0x31 f86: 88 ab std Y+48, r24 ; 0x30 mess.str = "word war in new world io ex"; f88: 85 e2 ldi r24, 0x25 ; 37 f8a: 93 e0 ldi r25, 0x03 ; 3 f8c: 9b ab std Y+51, r25 ; 0x33 f8e: 8a ab std Y+50, r24 ; 0x32 mess.len_str = sizeof mess.str; f90: 82 e0 ldi r24, 0x02 ; 2 f92: 90 e0 ldi r25, 0x00 ; 0 f94: 9d ab std Y+53, r25 ; 0x35 f96: 8c ab std Y+52, r24 ; 0x34 uint8_t data[64]; size_t len_data; protocol_encode(mess, data, &len_data); f98: 2e 01 movw r4, r28 f9a: e6 e7 ldi r30, 0x76 ; 118 f9c: 4e 0e add r4, r30 f9e: 51 1c adc r5, r1 fa0: 5f 92 push r5 fa2: 4f 92 push r4 fa4: 3e 01 movw r6, r28 fa6: f6 e3 ldi r31, 0x36 ; 54 fa8: 6f 0e add r6, r31 faa: 71 1c adc r7, r1 fac: 7f 92 push r7 fae: 6f 92 push r6 fb0: 8c a0 ldd r8, Y+36 ; 0x24 fb2: 9d a0 ldd r9, Y+37 ; 0x25 fb4: ae a0 ldd r10, Y+38 ; 0x26 fb6: bf a0 ldd r11, Y+39 ; 0x27 fb8: c8 a4 ldd r12, Y+40 ; 0x28 fba: d9 a4 ldd r13, Y+41 ; 0x29 fbc: ea a4 ldd r14, Y+42 ; 0x2a fbe: fb a4 ldd r15, Y+43 ; 0x2b fc0: 0c a5 ldd r16, Y+44 ; 0x2c fc2: 1d a5 ldd r17, Y+45 ; 0x2d fc4: 2e a5 ldd r18, Y+46 ; 0x2e fc6: 3f a5 ldd r19, Y+47 ; 0x2f fc8: 48 a9 ldd r20, Y+48 ; 0x30 fca: 59 a9 ldd r21, Y+49 ; 0x31 fcc: 6a a9 ldd r22, Y+50 ; 0x32 fce: 7b a9 ldd r23, Y+51 ; 0x33 fd0: 8c a9 ldd r24, Y+52 ; 0x34 fd2: 9d a9 ldd r25, Y+53 ; 0x35 fd4: 0e 94 5c 09 call 0x12b8 ; 0x12b8 hdlc_send_data(&hdlc, data, len_data); fd8: f2 01 movw r30, r4 fda: 40 81 ld r20, Z fdc: 51 81 ldd r21, Z+1 ; 0x01 fde: b3 01 movw r22, r6 fe0: ce 01 movw r24, r28 fe2: 01 96 adiw r24, 0x01 ; 1 fe4: 0e 94 76 00 call 0xec ; 0xec uint8_t buffer_data[72]; hdlc_get_raw_frame(&hdlc, buffer_data, sizeof buffer_data); fe8: 48 e4 ldi r20, 0x48 ; 72 fea: 50 e0 ldi r21, 0x00 ; 0 fec: be 01 movw r22, r28 fee: 68 58 subi r22, 0x88 ; 136 ff0: 7f 4f sbci r23, 0xFF ; 255 ff2: ce 01 movw r24, r28 ff4: 01 96 adiw r24, 0x01 ; 1 ff6: 0e 94 91 00 call 0x122 ; 0x122 UART_send(buffer_data, sizeof buffer_data); ffa: 68 e4 ldi r22, 0x48 ; 72 ffc: 70 e0 ldi r23, 0x00 ; 0 ffe: ce 01 movw r24, r28 1000: 88 58 subi r24, 0x88 ; 136 1002: 9f 4f sbci r25, 0xFF ; 255 1004: 0e 94 aa 0a call 0x1554 ; 0x1554 1008: 0f 90 pop r0 100a: 0f 90 pop r0 100c: 0f 90 pop r0 100e: 0f 90 pop r0 bool flag_recive = false; uint8_t data_recive[64]; size_t len_data_recive; while (!flag_recive){ uint8_t* buffer_recive_data[72]; UART_receive(buffer_recive_data, sizeof buffer_recive_data); 1010: 60 e9 ldi r22, 0x90 ; 144 1012: 70 e0 ldi r23, 0x00 ; 0 1014: ce 01 movw r24, r28 1016: 80 5a subi r24, 0xA0 ; 160 1018: 9e 4f sbci r25, 0xFE ; 254 101a: 0e 94 ce 0a call 0x159c ; 0x159c int err = hdlc_timeout_handler(&hdlc, 1); 101e: 61 e0 ldi r22, 0x01 ; 1 1020: 70 e0 ldi r23, 0x00 ; 0 1022: ce 01 movw r24, r28 1024: 01 96 adiw r24, 0x01 ; 1 1026: 0e 94 a8 01 call 0x350 ; 0x350 if (err == ERR_FRAME_TIME_OUT){ 102a: 05 96 adiw r24, 0x05 ; 5 102c: 89 f4 brne .+34 ; 0x1050 hdlc_get_raw_frame(&hdlc, buffer_data, sizeof buffer_data); 102e: 48 e4 ldi r20, 0x48 ; 72 1030: 50 e0 ldi r21, 0x00 ; 0 1032: be 01 movw r22, r28 1034: 68 58 subi r22, 0x88 ; 136 1036: 7f 4f sbci r23, 0xFF ; 255 1038: ce 01 movw r24, r28 103a: 01 96 adiw r24, 0x01 ; 1 103c: 0e 94 91 00 call 0x122 ; 0x122 UART_send(buffer_data, sizeof buffer_data); 1040: 68 e4 ldi r22, 0x48 ; 72 1042: 70 e0 ldi r23, 0x00 ; 0 1044: ce 01 movw r24, r28 1046: 88 58 subi r24, 0x88 ; 136 1048: 9f 4f sbci r25, 0xFF ; 255 104a: 0e 94 aa 0a call 0x1554 ; 0x1554 104e: e0 cf rjmp .-64 ; 0x1010 continue; } err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive_data, sizeof buffer_recive_data, data_recive, &len_data_recive); 1050: 8e 01 movw r16, r28 1052: 13 95 inc r17 1054: 9e 01 movw r18, r28 1056: 20 54 subi r18, 0x40 ; 64 1058: 3f 4f sbci r19, 0xFF ; 255 105a: 40 e9 ldi r20, 0x90 ; 144 105c: 50 e0 ldi r21, 0x00 ; 0 105e: be 01 movw r22, r28 1060: 60 5a subi r22, 0xA0 ; 160 1062: 7e 4f sbci r23, 0xFE ; 254 1064: ce 01 movw r24, r28 1066: 01 96 adiw r24, 0x01 ; 1 1068: 0e 94 07 01 call 0x20e ; 0x20e 106c: 8c 01 movw r16, r24 if (err < 0){ 106e: 99 23 and r25, r25 1070: 9c f4 brge .+38 ; 0x1098 if (err == ERR_INVALID_SEQ_NUMBER_FRAME){ 1072: 06 96 adiw r24, 0x06 ; 6 1074: b1 f4 brne .+44 ; 0x10a2 uint8_t* buffer_rej[10]; hdlc_get_raw_frame(&hdlc, buffer_rej, sizeof buffer_rej); 1076: 44 e1 ldi r20, 0x14 ; 20 1078: 50 e0 ldi r21, 0x00 ; 0 107a: be 01 movw r22, r28 107c: 60 51 subi r22, 0x10 ; 16 107e: 7e 4f sbci r23, 0xFE ; 254 1080: ce 01 movw r24, r28 1082: 01 96 adiw r24, 0x01 ; 1 1084: 0e 94 91 00 call 0x122 ; 0x122 UART_send(buffer_rej, sizeof buffer_rej); 1088: 64 e1 ldi r22, 0x14 ; 20 108a: 70 e0 ldi r23, 0x00 ; 0 108c: ce 01 movw r24, r28 108e: 80 51 subi r24, 0x10 ; 16 1090: 9e 4f sbci r25, 0xFE ; 254 1092: 0e 94 aa 0a call 0x1554 ; 0x1554 1096: 05 c0 rjmp .+10 ; 0x10a2 return err; } return err; } if (hdlc.state == SEND){ 1098: 89 81 ldd r24, Y+1 ; 0x01 UART_send(buffer_data, sizeof buffer_data); bool flag_recive = false; uint8_t data_recive[64]; size_t len_data_recive; while (!flag_recive){ 109a: 86 30 cpi r24, 0x06 ; 6 109c: 09 f0 breq .+2 ; 0x10a0 109e: b8 cf rjmp .-144 ; 0x1010 10a0: 03 c0 rjmp .+6 ; 0x10a8 hdlc_get_raw_frame(&hdlc, buffer_data, sizeof buffer_data); UART_send(buffer_data, sizeof buffer_data); continue; } err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive_data, sizeof buffer_recive_data, data_recive, &len_data_recive); 10a2: 80 2f mov r24, r16 10a4: 91 2f mov r25, r17 10a6: 52 c0 rjmp .+164 ; 0x114c flag_recive = true; } } struct message resp; protocol_decode(data_recive, len_data_recive, &resp); 10a8: c0 50 subi r28, 0x00 ; 0 10aa: df 4f sbci r29, 0xFF ; 255 10ac: 68 81 ld r22, Y 10ae: 79 81 ldd r23, Y+1 ; 0x01 10b0: c0 50 subi r28, 0x00 ; 0 10b2: d1 40 sbci r29, 0x01 ; 1 10b4: ae 01 movw r20, r28 10b6: 4e 5f subi r20, 0xFE ; 254 10b8: 5e 4f sbci r21, 0xFE ; 254 10ba: ce 01 movw r24, r28 10bc: 80 54 subi r24, 0x40 ; 64 10be: 9f 4f sbci r25, 0xFF ; 255 10c0: 0e 94 be 08 call 0x117c ; 0x117c struct DisplayData disp; disp.value1 = resp.numbers[0]; 10c4: ce 5f subi r28, 0xFE ; 254 10c6: de 4f sbci r29, 0xFE ; 254 10c8: 88 81 ld r24, Y 10ca: 99 81 ldd r25, Y+1 ; 0x01 10cc: aa 81 ldd r26, Y+2 ; 0x02 10ce: bb 81 ldd r27, Y+3 ; 0x03 10d0: c2 50 subi r28, 0x02 ; 2 10d2: d1 40 sbci r29, 0x01 ; 1 10d4: cc 5a subi r28, 0xAC ; 172 10d6: de 4f sbci r29, 0xFE ; 254 10d8: 88 83 st Y, r24 10da: 99 83 std Y+1, r25 ; 0x01 10dc: aa 83 std Y+2, r26 ; 0x02 10de: bb 83 std Y+3, r27 ; 0x03 10e0: c4 55 subi r28, 0x54 ; 84 10e2: d1 40 sbci r29, 0x01 ; 1 disp.value2 = resp.numbers[1]; 10e4: ca 5f subi r28, 0xFA ; 250 10e6: de 4f sbci r29, 0xFE ; 254 10e8: 88 81 ld r24, Y 10ea: 99 81 ldd r25, Y+1 ; 0x01 10ec: aa 81 ldd r26, Y+2 ; 0x02 10ee: bb 81 ldd r27, Y+3 ; 0x03 10f0: c6 50 subi r28, 0x06 ; 6 10f2: d1 40 sbci r29, 0x01 ; 1 10f4: c8 5a subi r28, 0xA8 ; 168 10f6: de 4f sbci r29, 0xFE ; 254 10f8: 88 83 st Y, r24 10fa: 99 83 std Y+1, r25 ; 0x01 10fc: aa 83 std Y+2, r26 ; 0x02 10fe: bb 83 std Y+3, r27 ; 0x03 1100: c8 55 subi r28, 0x58 ; 88 1102: d1 40 sbci r29, 0x01 ; 1 disp.value3 = resp.numbers[2]; 1104: c6 5f subi r28, 0xF6 ; 246 1106: de 4f sbci r29, 0xFE ; 254 1108: 88 81 ld r24, Y 110a: 99 81 ldd r25, Y+1 ; 0x01 110c: aa 81 ldd r26, Y+2 ; 0x02 110e: bb 81 ldd r27, Y+3 ; 0x03 1110: ca 50 subi r28, 0x0A ; 10 1112: d1 40 sbci r29, 0x01 ; 1 1114: c4 5a subi r28, 0xA4 ; 164 1116: de 4f sbci r29, 0xFE ; 254 1118: 88 83 st Y, r24 111a: 99 83 std Y+1, r25 ; 0x01 111c: aa 83 std Y+2, r26 ; 0x02 111e: bb 83 std Y+3, r27 ; 0x03 1120: cc 55 subi r28, 0x5C ; 92 1122: d1 40 sbci r29, 0x01 ; 1 //disp.topLine = *resp.str; strncpy(disp.topLine, resp.str, sizeof(disp.topLine) - 1); 1124: c0 5f subi r28, 0xF0 ; 240 1126: de 4f sbci r29, 0xFE ; 254 1128: 68 81 ld r22, Y 112a: 79 81 ldd r23, Y+1 ; 0x01 112c: c0 51 subi r28, 0x10 ; 16 112e: d1 40 sbci r29, 0x01 ; 1 1130: 4f e3 ldi r20, 0x3F ; 63 1132: 50 e0 ldi r21, 0x00 ; 0 1134: ce 01 movw r24, r28 1136: 8c 5e subi r24, 0xEC ; 236 1138: 9e 4f sbci r25, 0xFE ; 254 113a: 0e 94 8a 0b call 0x1714 ; 0x1714 printLcd(&disp); 113e: ce 01 movw r24, r28 1140: 8c 5e subi r24, 0xEC ; 236 1142: 9e 4f sbci r25, 0xFE ; 254 1144: 0e 94 08 06 call 0xc10 ; 0xc10 return 0; 1148: 80 e0 ldi r24, 0x00 ; 0 114a: 90 e0 ldi r25, 0x00 ; 0 114c: cd 5f subi r28, 0xFD ; 253 114e: dd 4f sbci r29, 0xFD ; 253 1150: 0f b6 in r0, 0x3f ; 63 1152: f8 94 cli 1154: de bf out 0x3e, r29 ; 62 1156: 0f be out 0x3f, r0 ; 63 1158: cd bf out 0x3d, r28 ; 61 115a: df 91 pop r29 115c: cf 91 pop r28 115e: 1f 91 pop r17 1160: 0f 91 pop r16 1162: ff 90 pop r15 1164: ef 90 pop r14 1166: df 90 pop r13 1168: cf 90 pop r12 116a: bf 90 pop r11 116c: af 90 pop r10 116e: 9f 90 pop r9 1170: 8f 90 pop r8 1172: 7f 90 pop r7 1174: 6f 90 pop r6 1176: 5f 90 pop r5 1178: 4f 90 pop r4 117a: 08 95 ret 0000117c : #include "protocol.h" void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message){ 117c: 8f 92 push r8 117e: 9f 92 push r9 1180: af 92 push r10 1182: bf 92 push r11 1184: cf 92 push r12 1186: df 92 push r13 1188: ef 92 push r14 118a: ff 92 push r15 118c: 0f 93 push r16 118e: 1f 93 push r17 1190: cf 93 push r28 1192: df 93 push r29 1194: cd b7 in r28, 0x3d ; 61 1196: de b7 in r29, 0x3e ; 62 1198: c0 54 subi r28, 0x40 ; 64 119a: d1 09 sbc r29, r1 119c: 0f b6 in r0, 0x3f ; 63 119e: f8 94 cli 11a0: de bf out 0x3e, r29 ; 62 11a2: 0f be out 0x3f, r0 ; 63 11a4: cd bf out 0x3d, r28 ; 61 11a6: 4b 01 movw r8, r22 int count_number = 0; for(int i = 0; i < len_encode_message; i++){ 11a8: 67 2b or r22, r23 11aa: 09 f4 brne .+2 ; 0x11ae 11ac: 6c c0 rjmp .+216 ; 0x1286 11ae: 20 e0 ldi r18, 0x00 ; 0 11b0: 30 e0 ldi r19, 0x00 ; 0 11b2: 60 e0 ldi r22, 0x00 ; 0 11b4: 70 e0 ldi r23, 0x00 ; 0 11b6: a1 2c mov r10, r1 11b8: b1 2c mov r11, r1 11ba: 6e 01 movw r12, r28 11bc: e5 e0 ldi r30, 0x05 ; 5 11be: ce 0e add r12, r30 11c0: d1 1c adc r13, r1 11c2: fe 01 movw r30, r28 11c4: 31 96 adiw r30, 0x01 ; 1 11c6: 7f 01 movw r14, r30 if (encode_message[i] == FLAG_NUMBER){ 11c8: fc 01 movw r30, r24 11ca: e2 0f add r30, r18 11cc: f3 1f adc r31, r19 11ce: 20 81 ld r18, Z 11d0: 21 11 cpse r18, r1 11d2: 27 c0 rjmp .+78 ; 0x1222 11d4: db 01 movw r26, r22 11d6: 11 96 adiw r26, 0x01 ; 1 11d8: a8 0f add r26, r24 11da: b9 1f adc r27, r25 11dc: fe 01 movw r30, r28 11de: 31 96 adiw r30, 0x01 ; 1 union convert_float sample; for (int z = 0; z < sizeof sample.buf; z++){ i++; sample.buf[z] = encode_message[i]; 11e0: 2d 91 ld r18, X+ 11e2: 21 93 st Z+, r18 void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message){ int count_number = 0; for(int i = 0; i < len_encode_message; i++){ if (encode_message[i] == FLAG_NUMBER){ union convert_float sample; for (int z = 0; z < sizeof sample.buf; z++){ 11e4: ec 15 cp r30, r12 11e6: fd 05 cpc r31, r13 11e8: d9 f7 brne .-10 ; 0x11e0 11ea: 6c 5f subi r22, 0xFC ; 252 11ec: 7f 4f sbci r23, 0xFF ; 255 i++; sample.buf[z] = encode_message[i]; } decode_message->numbers[count_number++] = sample.fVal; 11ee: f5 01 movw r30, r10 11f0: ee 0f add r30, r30 11f2: ff 1f adc r31, r31 11f4: ee 0f add r30, r30 11f6: ff 1f adc r31, r31 11f8: e4 0f add r30, r20 11fa: f5 1f adc r31, r21 11fc: 09 81 ldd r16, Y+1 ; 0x01 11fe: 1a 81 ldd r17, Y+2 ; 0x02 1200: 2b 81 ldd r18, Y+3 ; 0x03 1202: 3c 81 ldd r19, Y+4 ; 0x04 1204: 00 83 st Z, r16 1206: 11 83 std Z+1, r17 ; 0x01 1208: 22 83 std Z+2, r18 ; 0x02 120a: 33 83 std Z+3, r19 ; 0x03 decode_message->len_numbers++; 120c: fa 01 movw r30, r20 120e: 24 85 ldd r18, Z+12 ; 0x0c 1210: 35 85 ldd r19, Z+13 ; 0x0d 1212: 2f 5f subi r18, 0xFF ; 255 1214: 3f 4f sbci r19, 0xFF ; 255 1216: 35 87 std Z+13, r19 ; 0x0d 1218: 24 87 std Z+12, r18 ; 0x0c union convert_float sample; for (int z = 0; z < sizeof sample.buf; z++){ i++; sample.buf[z] = encode_message[i]; } decode_message->numbers[count_number++] = sample.fVal; 121a: 95 01 movw r18, r10 121c: 2f 5f subi r18, 0xFF ; 255 121e: 3f 4f sbci r19, 0xFF ; 255 1220: 59 01 movw r10, r18 decode_message->len_numbers++; } if (encode_message[i] == FLAG_WORD){ 1222: fc 01 movw r30, r24 1224: e6 0f add r30, r22 1226: f7 1f adc r31, r23 1228: 20 81 ld r18, Z 122a: 21 30 cpi r18, 0x01 ; 1 122c: 21 f5 brne .+72 ; 0x1276 int count_word = 0; i++; 122e: 9b 01 movw r18, r22 1230: 2f 5f subi r18, 0xFF ; 255 1232: 3f 4f sbci r19, 0xFF ; 255 union convert_char sample; for (int z = 0; z < encode_message[i]; z++){ 1234: fc 01 movw r30, r24 1236: e2 0f add r30, r18 1238: f3 1f adc r31, r19 123a: e0 81 ld r30, Z 123c: ee 23 and r30, r30 123e: 99 f0 breq .+38 ; 0x1266 1240: 6e 5f subi r22, 0xFE ; 254 1242: 7f 4f sbci r23, 0xFF ; 255 1244: dc 01 movw r26, r24 1246: a6 0f add r26, r22 1248: b7 1f adc r27, r23 124a: f7 01 movw r30, r14 124c: b9 01 movw r22, r18 i++; 124e: 6f 5f subi r22, 0xFF ; 255 1250: 7f 4f sbci r23, 0xFF ; 255 sample.buf[z] = encode_message[i]; 1252: 2d 91 ld r18, X+ 1254: 21 93 st Z+, r18 if (encode_message[i] == FLAG_WORD){ int count_word = 0; i++; union convert_char sample; for (int z = 0; z < encode_message[i]; z++){ 1256: 30 e0 ldi r19, 0x00 ; 0 1258: 8f 01 movw r16, r30 125a: 0e 19 sub r16, r14 125c: 1f 09 sbc r17, r15 125e: 02 17 cp r16, r18 1260: 13 07 cpc r17, r19 1262: ac f3 brlt .-22 ; 0x124e 1264: 01 c0 rjmp .+2 ; 0x1268 } if (encode_message[i] == FLAG_WORD){ int count_word = 0; i++; 1266: b9 01 movw r22, r18 union convert_char sample; for (int z = 0; z < encode_message[i]; z++){ i++; sample.buf[z] = encode_message[i]; } decode_message->str = sample.cVal; 1268: 29 81 ldd r18, Y+1 ; 0x01 126a: 3a 81 ldd r19, Y+2 ; 0x02 126c: fa 01 movw r30, r20 126e: 37 87 std Z+15, r19 ; 0x0f 1270: 26 87 std Z+14, r18 ; 0x0e decode_message->len_str = count_word; 1272: 11 8a std Z+17, r1 ; 0x11 1274: 10 8a std Z+16, r1 ; 0x10 #include "protocol.h" void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message){ int count_number = 0; for(int i = 0; i < len_encode_message; i++){ 1276: 6f 5f subi r22, 0xFF ; 255 1278: 7f 4f sbci r23, 0xFF ; 255 127a: 9b 01 movw r18, r22 127c: 68 15 cp r22, r8 127e: 79 05 cpc r23, r9 1280: 08 f4 brcc .+2 ; 0x1284 1282: a2 cf rjmp .-188 ; 0x11c8 1284: 02 c0 rjmp .+4 ; 0x128a #include "protocol.h" void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message){ int count_number = 0; 1286: a1 2c mov r10, r1 1288: b1 2c mov r11, r1 } decode_message->str = sample.cVal; decode_message->len_str = count_word; } } decode_message->len_numbers = count_number; 128a: fa 01 movw r30, r20 128c: b5 86 std Z+13, r11 ; 0x0d 128e: a4 86 std Z+12, r10 ; 0x0c } 1290: c0 5c subi r28, 0xC0 ; 192 1292: df 4f sbci r29, 0xFF ; 255 1294: 0f b6 in r0, 0x3f ; 63 1296: f8 94 cli 1298: de bf out 0x3e, r29 ; 62 129a: 0f be out 0x3f, r0 ; 63 129c: cd bf out 0x3d, r28 ; 61 129e: df 91 pop r29 12a0: cf 91 pop r28 12a2: 1f 91 pop r17 12a4: 0f 91 pop r16 12a6: ff 90 pop r15 12a8: ef 90 pop r14 12aa: df 90 pop r13 12ac: cf 90 pop r12 12ae: bf 90 pop r11 12b0: af 90 pop r10 12b2: 9f 90 pop r9 12b4: 8f 90 pop r8 12b6: 08 95 ret 000012b8 : void protocol_encode(struct message message, uint8_t encode_message[], size_t* len_encode_message){ 12b8: 4f 92 push r4 12ba: 5f 92 push r5 12bc: 6f 92 push r6 12be: 7f 92 push r7 12c0: 8f 92 push r8 12c2: 9f 92 push r9 12c4: af 92 push r10 12c6: bf 92 push r11 12c8: cf 92 push r12 12ca: df 92 push r13 12cc: ef 92 push r14 12ce: ff 92 push r15 12d0: 0f 93 push r16 12d2: 1f 93 push r17 12d4: cf 93 push r28 12d6: df 93 push r29 12d8: cd b7 in r28, 0x3d ; 61 12da: de b7 in r29, 0x3e ; 62 12dc: c2 55 subi r28, 0x52 ; 82 12de: d1 09 sbc r29, r1 12e0: 0f b6 in r0, 0x3f ; 63 12e2: f8 94 cli 12e4: de bf out 0x3e, r29 ; 62 12e6: 0f be out 0x3f, r0 ; 63 12e8: cd bf out 0x3d, r28 ; 61 12ea: 22 96 adiw r28, 0x02 ; 2 12ec: 8f ae std Y+63, r8 ; 0x3f 12ee: 22 97 sbiw r28, 0x02 ; 2 12f0: 23 96 adiw r28, 0x03 ; 3 12f2: 9f ae std Y+63, r9 ; 0x3f 12f4: 23 97 sbiw r28, 0x03 ; 3 12f6: 24 96 adiw r28, 0x04 ; 4 12f8: af ae std Y+63, r10 ; 0x3f 12fa: 24 97 sbiw r28, 0x04 ; 4 12fc: 25 96 adiw r28, 0x05 ; 5 12fe: bf ae std Y+63, r11 ; 0x3f 1300: 25 97 sbiw r28, 0x05 ; 5 1302: 26 96 adiw r28, 0x06 ; 6 1304: cf ae std Y+63, r12 ; 0x3f 1306: 26 97 sbiw r28, 0x06 ; 6 1308: 27 96 adiw r28, 0x07 ; 7 130a: df ae std Y+63, r13 ; 0x3f 130c: 27 97 sbiw r28, 0x07 ; 7 130e: 28 96 adiw r28, 0x08 ; 8 1310: ef ae std Y+63, r14 ; 0x3f 1312: 28 97 sbiw r28, 0x08 ; 8 1314: 29 96 adiw r28, 0x09 ; 9 1316: ff ae std Y+63, r15 ; 0x3f 1318: 29 97 sbiw r28, 0x09 ; 9 131a: 2a 96 adiw r28, 0x0a ; 10 131c: 0f af std Y+63, r16 ; 0x3f 131e: 2a 97 sbiw r28, 0x0a ; 10 1320: 2b 96 adiw r28, 0x0b ; 11 1322: 1f af std Y+63, r17 ; 0x3f 1324: 2b 97 sbiw r28, 0x0b ; 11 1326: 2c 96 adiw r28, 0x0c ; 12 1328: 2f af std Y+63, r18 ; 0x3f 132a: 2c 97 sbiw r28, 0x0c ; 12 132c: 2d 96 adiw r28, 0x0d ; 13 132e: 3f af std Y+63, r19 ; 0x3f 1330: 2d 97 sbiw r28, 0x0d ; 13 1332: 2e 96 adiw r28, 0x0e ; 14 1334: 4f af std Y+63, r20 ; 0x3f 1336: 2e 97 sbiw r28, 0x0e ; 14 1338: 2f 96 adiw r28, 0x0f ; 15 133a: 5f af std Y+63, r21 ; 0x3f 133c: 2f 97 sbiw r28, 0x0f ; 15 133e: 60 96 adiw r28, 0x10 ; 16 1340: 6f af std Y+63, r22 ; 0x3f 1342: 60 97 sbiw r28, 0x10 ; 16 1344: 61 96 adiw r28, 0x11 ; 17 1346: 7f af std Y+63, r23 ; 0x3f 1348: 61 97 sbiw r28, 0x11 ; 17 134a: 62 96 adiw r28, 0x12 ; 18 134c: 8f af std Y+63, r24 ; 0x3f 134e: 62 97 sbiw r28, 0x12 ; 18 1350: 63 96 adiw r28, 0x13 ; 19 1352: 9f af std Y+63, r25 ; 0x3f 1354: 63 97 sbiw r28, 0x13 ; 19 1356: a7 96 adiw r28, 0x27 ; 39 1358: 0e ad ldd r16, Y+62 ; 0x3e 135a: 1f ad ldd r17, Y+63 ; 0x3f 135c: a7 97 sbiw r28, 0x27 ; 39 135e: 2f 96 adiw r28, 0x0f ; 15 1360: ce ac ldd r12, Y+62 ; 0x3e 1362: df ac ldd r13, Y+63 ; 0x3f 1364: 2f 97 sbiw r28, 0x0f ; 15 1366: 63 96 adiw r28, 0x13 ; 19 1368: 6e ad ldd r22, Y+62 ; 0x3e 136a: 7f ad ldd r23, Y+63 ; 0x3f 136c: 63 97 sbiw r28, 0x13 ; 19 size_t count = 0; if (message.len_numbers > 0){ 136e: c1 14 cp r12, r1 1370: d1 04 cpc r13, r1 1372: 09 f4 brne .+2 ; 0x1376 1374: 66 c0 rjmp .+204 ; 0x1442 1376: 78 01 movw r14, r16 1378: ce 01 movw r24, r28 137a: 8f 5b subi r24, 0xBF ; 191 137c: 9f 4f sbci r25, 0xFF ; 255 137e: 56 01 movw r10, r12 1380: aa 0c add r10, r10 1382: bb 1c adc r11, r11 1384: aa 0c add r10, r10 1386: bb 1c adc r11, r11 1388: a8 0e add r10, r24 138a: b9 1e adc r11, r25 138c: ae 01 movw r20, r28 138e: 4b 5f subi r20, 0xFB ; 251 1390: 5f 4f sbci r21, 0xFF ; 255 for (int i = 0; i < message.len_numbers; i++){ encode_message[count++] = FLAG_NUMBER; 1392: f7 01 movw r30, r14 1394: 11 92 st Z+, r1 union convert_float sample; sample.fVal = message.numbers[i]; 1396: dc 01 movw r26, r24 1398: 4d 90 ld r4, X+ 139a: 5d 90 ld r5, X+ 139c: 6d 90 ld r6, X+ 139e: 7d 90 ld r7, X+ 13a0: cd 01 movw r24, r26 13a2: 49 82 std Y+1, r4 ; 0x01 13a4: 5a 82 std Y+2, r5 ; 0x02 13a6: 6b 82 std Y+3, r6 ; 0x03 13a8: 7c 82 std Y+4, r7 ; 0x04 13aa: de 01 movw r26, r28 13ac: 11 96 adiw r26, 0x01 ; 1 for (int z = 0; z < sizeof sample.buf; z++){ encode_message[count++] = sample.buf[z]; 13ae: 3d 91 ld r19, X+ 13b0: 31 93 st Z+, r19 if (message.len_numbers > 0){ for (int i = 0; i < message.len_numbers; i++){ encode_message[count++] = FLAG_NUMBER; union convert_float sample; sample.fVal = message.numbers[i]; for (int z = 0; z < sizeof sample.buf; z++){ 13b2: a4 17 cp r26, r20 13b4: b5 07 cpc r27, r21 13b6: d9 f7 brne .-10 ; 0x13ae 13b8: b5 e0 ldi r27, 0x05 ; 5 13ba: eb 0e add r14, r27 13bc: f1 1c adc r15, r1 } void protocol_encode(struct message message, uint8_t encode_message[], size_t* len_encode_message){ size_t count = 0; if (message.len_numbers > 0){ for (int i = 0; i < message.len_numbers; i++){ 13be: 8a 15 cp r24, r10 13c0: 9b 05 cpc r25, r11 13c2: 39 f7 brne .-50 ; 0x1392 13c4: 96 01 movw r18, r12 13c6: 22 0f add r18, r18 13c8: 33 1f adc r19, r19 13ca: 22 0f add r18, r18 13cc: 33 1f adc r19, r19 13ce: 2c 0d add r18, r12 13d0: 3d 1d adc r19, r13 encode_message[count++] = sample.buf[z]; } } } if (message.len_str > 0){ 13d2: 61 15 cp r22, r1 13d4: 71 05 cpc r23, r1 13d6: 09 f1 breq .+66 ; 0x141a encode_message[count++] = FLAG_WORD; 13d8: d8 01 movw r26, r16 13da: a2 0f add r26, r18 13dc: b3 1f adc r27, r19 13de: 81 e0 ldi r24, 0x01 ; 1 13e0: 8c 93 st X, r24 encode_message[count++] = message.len_str; 13e2: d9 01 movw r26, r18 13e4: 11 96 adiw r26, 0x01 ; 1 13e6: a0 0f add r26, r16 13e8: b1 1f adc r27, r17 13ea: 2e 5f subi r18, 0xFE ; 254 13ec: 3f 4f sbci r19, 0xFF ; 255 13ee: 6c 93 st X, r22 union convert_char sample; sample.cVal = message.str; 13f0: 61 96 adiw r28, 0x11 ; 17 13f2: 8e ad ldd r24, Y+62 ; 0x3e 13f4: 9f ad ldd r25, Y+63 ; 0x3f 13f6: 61 97 sbiw r28, 0x11 ; 17 13f8: 9a 83 std Y+2, r25 ; 0x02 13fa: 89 83 std Y+1, r24 ; 0x01 13fc: de 01 movw r26, r28 13fe: 11 96 adiw r26, 0x01 ; 1 1400: f8 01 movw r30, r16 1402: e2 0f add r30, r18 1404: f3 1f adc r31, r19 } } if (message.len_str > 0){ encode_message[count++] = FLAG_WORD; encode_message[count++] = message.len_str; 1406: 80 e0 ldi r24, 0x00 ; 0 1408: 90 e0 ldi r25, 0x00 ; 0 union convert_char sample; sample.cVal = message.str; for (int i = 0; i < message.len_str; i++){ encode_message[count++] = sample.buf[i]; 140a: 2f 5f subi r18, 0xFF ; 255 140c: 3f 4f sbci r19, 0xFF ; 255 140e: 4d 91 ld r20, X+ 1410: 41 93 st Z+, r20 if (message.len_str > 0){ encode_message[count++] = FLAG_WORD; encode_message[count++] = message.len_str; union convert_char sample; sample.cVal = message.str; for (int i = 0; i < message.len_str; i++){ 1412: 01 96 adiw r24, 0x01 ; 1 1414: 86 17 cp r24, r22 1416: 97 07 cpc r25, r23 1418: c0 f3 brcs .-16 ; 0x140a encode_message[count++] = sample.buf[i]; } } *len_encode_message = count; 141a: a9 96 adiw r28, 0x29 ; 41 141c: ee ad ldd r30, Y+62 ; 0x3e 141e: ff ad ldd r31, Y+63 ; 0x3f 1420: a9 97 sbiw r28, 0x29 ; 41 1422: 31 83 std Z+1, r19 ; 0x01 1424: 20 83 st Z, r18 1426: 13 c0 rjmp .+38 ; 0x144e } } } if (message.len_str > 0){ encode_message[count++] = FLAG_WORD; 1428: 81 e0 ldi r24, 0x01 ; 1 142a: f8 01 movw r30, r16 142c: 80 83 st Z, r24 encode_message[count++] = message.len_str; 142e: 61 83 std Z+1, r22 ; 0x01 union convert_char sample; sample.cVal = message.str; 1430: 61 96 adiw r28, 0x11 ; 17 1432: 8e ad ldd r24, Y+62 ; 0x3e 1434: 9f ad ldd r25, Y+63 ; 0x3f 1436: 61 97 sbiw r28, 0x11 ; 17 1438: 9a 83 std Y+2, r25 ; 0x02 143a: 89 83 std Y+1, r24 ; 0x01 } } if (message.len_str > 0){ encode_message[count++] = FLAG_WORD; encode_message[count++] = message.len_str; 143c: 22 e0 ldi r18, 0x02 ; 2 143e: 30 e0 ldi r19, 0x00 ; 0 1440: dd cf rjmp .-70 ; 0x13fc encode_message[count++] = sample.buf[z]; } } } if (message.len_str > 0){ 1442: 61 15 cp r22, r1 1444: 71 05 cpc r23, r1 1446: 81 f7 brne .-32 ; 0x1428 } decode_message->len_numbers = count_number; } void protocol_encode(struct message message, uint8_t encode_message[], size_t* len_encode_message){ size_t count = 0; 1448: 20 e0 ldi r18, 0x00 ; 0 144a: 30 e0 ldi r19, 0x00 ; 0 144c: e6 cf rjmp .-52 ; 0x141a encode_message[count++] = sample.buf[i]; } } *len_encode_message = count; 144e: ce 5a subi r28, 0xAE ; 174 1450: df 4f sbci r29, 0xFF ; 255 1452: 0f b6 in r0, 0x3f ; 63 1454: f8 94 cli 1456: de bf out 0x3e, r29 ; 62 1458: 0f be out 0x3f, r0 ; 63 145a: cd bf out 0x3d, r28 ; 61 145c: df 91 pop r29 145e: cf 91 pop r28 1460: 1f 91 pop r17 1462: 0f 91 pop r16 1464: ff 90 pop r15 1466: ef 90 pop r14 1468: df 90 pop r13 146a: cf 90 pop r12 146c: bf 90 pop r11 146e: af 90 pop r10 1470: 9f 90 pop r9 1472: 8f 90 pop r8 1474: 7f 90 pop r7 1476: 6f 90 pop r6 1478: 5f 90 pop r5 147a: 4f 90 pop r4 147c: 08 95 ret 0000147e : void initialize_buffer(struct circular_buffer* cb) { cb->buf_head = 0; cb->buf_tail = 0; } // Проверка, пустой ли буфер int buffer_empty(const struct circular_buffer* cb) { 147e: fc 01 movw r30, r24 return cb->buf_head == cb->buf_tail; 1480: 81 e0 ldi r24, 0x01 ; 1 1482: 90 e0 ldi r25, 0x00 ; 0 1484: 30 a1 ldd r19, Z+32 ; 0x20 1486: 21 a1 ldd r18, Z+33 ; 0x21 1488: 32 17 cp r19, r18 148a: 11 f0 breq .+4 ; 0x1490 148c: 80 e0 ldi r24, 0x00 ; 0 148e: 90 e0 ldi r25, 0x00 ; 0 } 1490: 08 95 ret 00001492 : // Проверка, заполнен ли буфер int buffer_full(const struct circular_buffer* cb) { return (cb->buf_tail + 1) % BUFFER_SIZE == cb->buf_head; //проверяем следующее число, если оно будет совпадать с индексом головы то будет false, при совпадении вывод true 1492: fc 01 movw r30, r24 1494: 21 a1 ldd r18, Z+33 ; 0x21 1496: 30 e0 ldi r19, 0x00 ; 0 1498: 2f 5f subi r18, 0xFF ; 255 149a: 3f 4f sbci r19, 0xFF ; 255 149c: 2f 71 andi r18, 0x1F ; 31 149e: 30 78 andi r19, 0x80 ; 128 14a0: 33 23 and r19, r19 14a2: 34 f4 brge .+12 ; 0x14b0 14a4: 21 50 subi r18, 0x01 ; 1 14a6: 31 09 sbc r19, r1 14a8: 20 6e ori r18, 0xE0 ; 224 14aa: 3f 6f ori r19, 0xFF ; 255 14ac: 2f 5f subi r18, 0xFF ; 255 14ae: 3f 4f sbci r19, 0xFF ; 255 14b0: fc 01 movw r30, r24 14b2: 40 a1 ldd r20, Z+32 ; 0x20 14b4: 50 e0 ldi r21, 0x00 ; 0 14b6: 81 e0 ldi r24, 0x01 ; 1 14b8: 90 e0 ldi r25, 0x00 ; 0 14ba: 24 17 cp r18, r20 14bc: 35 07 cpc r19, r21 14be: 11 f0 breq .+4 ; 0x14c4 14c0: 80 e0 ldi r24, 0x00 ; 0 14c2: 90 e0 ldi r25, 0x00 ; 0 } 14c4: 08 95 ret 000014c6 : // Запись в буфер void write_buffer(struct circular_buffer* cb, int value) { 14c6: 1f 93 push r17 14c8: cf 93 push r28 14ca: df 93 push r29 14cc: ec 01 movw r28, r24 14ce: 16 2f mov r17, r22 if (buffer_full(cb)) { // проверяем, заполнен ли буфер 14d0: 0e 94 49 0a call 0x1492 ; 0x1492 14d4: 89 2b or r24, r25 14d6: 81 f4 brne .+32 ; 0x14f8 return; } cb->buffer[cb->buf_tail] = value;// записываем значение в элемент массива в хвост 14d8: 89 a1 ldd r24, Y+33 ; 0x21 14da: 90 e0 ldi r25, 0x00 ; 0 14dc: fe 01 movw r30, r28 14de: e8 0f add r30, r24 14e0: f9 1f adc r31, r25 14e2: 10 83 st Z, r17 cb->buf_tail = (cb->buf_tail + 1) % BUFFER_SIZE;// присваивается cb->buf_tail, обновляется его значение на следующий индекс в буфере 14e4: 01 96 adiw r24, 0x01 ; 1 14e6: 8f 71 andi r24, 0x1F ; 31 14e8: 90 78 andi r25, 0x80 ; 128 14ea: 99 23 and r25, r25 14ec: 24 f4 brge .+8 ; 0x14f6 14ee: 01 97 sbiw r24, 0x01 ; 1 14f0: 80 6e ori r24, 0xE0 ; 224 14f2: 9f 6f ori r25, 0xFF ; 255 14f4: 01 96 adiw r24, 0x01 ; 1 14f6: 89 a3 std Y+33, r24 ; 0x21 } 14f8: df 91 pop r29 14fa: cf 91 pop r28 14fc: 1f 91 pop r17 14fe: 08 95 ret 00001500 : // Чтение элемента int read_buffer(struct circular_buffer* cb) { 1500: fc 01 movw r30, r24 cb->buf_head = 0; cb->buf_tail = 0; } // Проверка, пустой ли буфер int buffer_empty(const struct circular_buffer* cb) { return cb->buf_head == cb->buf_tail; 1502: 20 a1 ldd r18, Z+32 ; 0x20 cb->buffer[cb->buf_tail] = value;// записываем значение в элемент массива в хвост cb->buf_tail = (cb->buf_tail + 1) % BUFFER_SIZE;// присваивается cb->buf_tail, обновляется его значение на следующий индекс в буфере } // Чтение элемента int read_buffer(struct circular_buffer* cb) { if (buffer_empty(cb)) { // проверка на пустоту 1504: 81 a1 ldd r24, Z+33 ; 0x21 1506: 28 17 cp r18, r24 1508: b1 f0 breq .+44 ; 0x1536 return -1;// -1 как индикатор в случае ошибки } int value = cb->buffer[cb->buf_head]; // чтение по индексу головы 150a: 30 e0 ldi r19, 0x00 ; 0 150c: df 01 movw r26, r30 150e: a2 0f add r26, r18 1510: b3 1f adc r27, r19 1512: 4c 91 ld r20, X 1514: 50 e0 ldi r21, 0x00 ; 0 cb->buf_head = (cb->buf_head + 1) % BUFFER_SIZE; // увеличиваем индекс на 1 1516: 2f 5f subi r18, 0xFF ; 255 1518: 3f 4f sbci r19, 0xFF ; 255 151a: 2f 71 andi r18, 0x1F ; 31 151c: 30 78 andi r19, 0x80 ; 128 151e: 33 23 and r19, r19 1520: 34 f4 brge .+12 ; 0x152e 1522: 21 50 subi r18, 0x01 ; 1 1524: 31 09 sbc r19, r1 1526: 20 6e ori r18, 0xE0 ; 224 1528: 3f 6f ori r19, 0xFF ; 255 152a: 2f 5f subi r18, 0xFF ; 255 152c: 3f 4f sbci r19, 0xFF ; 255 152e: 20 a3 std Z+32, r18 ; 0x20 return value; 1530: 84 2f mov r24, r20 1532: 95 2f mov r25, r21 1534: 08 95 ret cb->buf_tail = (cb->buf_tail + 1) % BUFFER_SIZE;// присваивается cb->buf_tail, обновляется его значение на следующий индекс в буфере } // Чтение элемента int read_buffer(struct circular_buffer* cb) { if (buffer_empty(cb)) { // проверка на пустоту return -1;// -1 как индикатор в случае ошибки 1536: 8f ef ldi r24, 0xFF ; 255 1538: 9f ef ldi r25, 0xFF ; 255 } int value = cb->buffer[cb->buf_head]; // чтение по индексу головы cb->buf_head = (cb->buf_head + 1) % BUFFER_SIZE; // увеличиваем индекс на 1 return value; } 153a: 08 95 ret 0000153c : struct circular_buffer uartRxBuffer; struct circular_buffer uartTxBuffer; void UART_init(void) { UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0) | (1< UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); 1542: 86 e0 ldi r24, 0x06 ; 6 1544: 80 93 c2 00 sts 0x00C2, r24 ; 0x8000c2 <__DATA_REGION_ORIGIN__+0x62> UBRR0H = 0; 1548: 10 92 c5 00 sts 0x00C5, r1 ; 0x8000c5 <__DATA_REGION_ORIGIN__+0x65> UBRR0L = 103; 154c: 87 e6 ldi r24, 0x67 ; 103 154e: 80 93 c4 00 sts 0x00C4, r24 ; 0x8000c4 <__DATA_REGION_ORIGIN__+0x64> 1552: 08 95 ret 00001554 : } void UART_send(uint8_t* data, size_t length) { 1554: 0f 93 push r16 1556: 1f 93 push r17 1558: cf 93 push r28 155a: df 93 push r29 for (size_t i = 0; i < length; i++) { 155c: 61 15 cp r22, r1 155e: 71 05 cpc r23, r1 1560: 99 f0 breq .+38 ; 0x1588 1562: 8c 01 movw r16, r24 1564: ec 01 movw r28, r24 1566: 06 0f add r16, r22 1568: 17 1f adc r17, r23 if (!buffer_full(&uartTxBuffer)) { 156a: 8e e6 ldi r24, 0x6E ; 110 156c: 93 e0 ldi r25, 0x03 ; 3 156e: 0e 94 49 0a call 0x1492 ; 0x1492 1572: 89 2b or r24, r25 1574: 49 f4 brne .+18 ; 0x1588 write_buffer(&uartTxBuffer, data[i]); 1576: 69 91 ld r22, Y+ 1578: 70 e0 ldi r23, 0x00 ; 0 157a: 8e e6 ldi r24, 0x6E ; 110 157c: 93 e0 ldi r25, 0x03 ; 3 157e: 0e 94 63 0a call 0x14c6 ; 0x14c6 UBRR0H = 0; UBRR0L = 103; } void UART_send(uint8_t* data, size_t length) { for (size_t i = 0; i < length; i++) { 1582: c0 17 cp r28, r16 1584: d1 07 cpc r29, r17 1586: 89 f7 brne .-30 ; 0x156a write_buffer(&uartTxBuffer, data[i]); } else { break; // если буфер передачи заполнен, то отправка прерывается } } UCSR0B |= (1 << TXCIE0); // включаем прерывание по завершении передачи 1588: e1 ec ldi r30, 0xC1 ; 193 158a: f0 e0 ldi r31, 0x00 ; 0 158c: 80 81 ld r24, Z 158e: 80 64 ori r24, 0x40 ; 64 1590: 80 83 st Z, r24 } 1592: df 91 pop r29 1594: cf 91 pop r28 1596: 1f 91 pop r17 1598: 0f 91 pop r16 159a: 08 95 ret 0000159c : // Получение данных из буфера int UART_receive(uint8_t* data, size_t length) { 159c: 8f 92 push r8 159e: 9f 92 push r9 15a0: af 92 push r10 15a2: bf 92 push r11 15a4: cf 92 push r12 15a6: df 92 push r13 15a8: ef 92 push r14 15aa: ff 92 push r15 15ac: 0f 93 push r16 15ae: 1f 93 push r17 15b0: cf 93 push r28 15b2: df 93 push r29 15b4: 8b 01 movw r16, r22 15b6: ec 01 movw r28, r24 char overflow = 0; // Флаг переполнения, который устанавливается, если превышен размер массива uint32_t byteCount = 0; // Счетчик байтов, принятых из буфера приема 15b8: c1 2c mov r12, r1 15ba: d1 2c mov r13, r1 15bc: 76 01 movw r14, r12 // Пока буфер приема не пуст и не превышен лимит длины массива, // функция продолжает читать байты из буфера и сохранять их в массив data. while (!buffer_empty(&uartRxBuffer) && byteCount < length) { 15be: 4b 01 movw r8, r22 15c0: a1 2c mov r10, r1 15c2: b1 2c mov r11, r1 15c4: 0a c0 rjmp .+20 ; 0x15da int reader = read_buffer(&uartRxBuffer); // Прием и запись символа в переменную 15c6: 8c e4 ldi r24, 0x4C ; 76 15c8: 93 e0 ldi r25, 0x03 ; 3 15ca: 0e 94 80 0a call 0x1500 ; 0x1500 data[byteCount] = reader; // Запись в массив с индексом byteCount 15ce: 89 93 st Y+, r24 byteCount++; 15d0: 8f ef ldi r24, 0xFF ; 255 15d2: c8 1a sub r12, r24 15d4: d8 0a sbc r13, r24 15d6: e8 0a sbc r14, r24 15d8: f8 0a sbc r15, r24 int UART_receive(uint8_t* data, size_t length) { char overflow = 0; // Флаг переполнения, который устанавливается, если превышен размер массива uint32_t byteCount = 0; // Счетчик байтов, принятых из буфера приема // Пока буфер приема не пуст и не превышен лимит длины массива, // функция продолжает читать байты из буфера и сохранять их в массив data. while (!buffer_empty(&uartRxBuffer) && byteCount < length) { 15da: 8c e4 ldi r24, 0x4C ; 76 15dc: 93 e0 ldi r25, 0x03 ; 3 15de: 0e 94 3f 0a call 0x147e ; 0x147e 15e2: 89 2b or r24, r25 15e4: 29 f4 brne .+10 ; 0x15f0 15e6: c8 14 cp r12, r8 15e8: d9 04 cpc r13, r9 15ea: ea 04 cpc r14, r10 15ec: fb 04 cpc r15, r11 15ee: 58 f3 brcs .-42 ; 0x15c6 } // Проверка переполнения if (byteCount > length) { overflow = 1; } return overflow ? -1 : byteCount; // Возвращает количество успешно принятых байт или -1 в случае переполнения 15f0: 20 e0 ldi r18, 0x00 ; 0 15f2: 30 e0 ldi r19, 0x00 ; 0 15f4: 0c 15 cp r16, r12 15f6: 1d 05 cpc r17, r13 15f8: 2e 05 cpc r18, r14 15fa: 3f 05 cpc r19, r15 15fc: 10 f0 brcs .+4 ; 0x1602 15fe: c6 01 movw r24, r12 1600: 02 c0 rjmp .+4 ; 0x1606 1602: 8f ef ldi r24, 0xFF ; 255 1604: 9f ef ldi r25, 0xFF ; 255 } 1606: df 91 pop r29 1608: cf 91 pop r28 160a: 1f 91 pop r17 160c: 0f 91 pop r16 160e: ff 90 pop r15 1610: ef 90 pop r14 1612: df 90 pop r13 1614: cf 90 pop r12 1616: bf 90 pop r11 1618: af 90 pop r10 161a: 9f 90 pop r9 161c: 8f 90 pop r8 161e: 08 95 ret 00001620 <__vector_18>: // прерывание по завершению приема ISR(USART_RX_vect) { 1620: 1f 92 push r1 1622: 0f 92 push r0 1624: 0f b6 in r0, 0x3f ; 63 1626: 0f 92 push r0 1628: 11 24 eor r1, r1 162a: 2f 93 push r18 162c: 3f 93 push r19 162e: 4f 93 push r20 1630: 5f 93 push r21 1632: 6f 93 push r22 1634: 7f 93 push r23 1636: 8f 93 push r24 1638: 9f 93 push r25 163a: af 93 push r26 163c: bf 93 push r27 163e: cf 93 push r28 1640: ef 93 push r30 1642: ff 93 push r31 uint8_t data = UDR0; // читаем из регистра UDR0 1644: c0 91 c6 00 lds r28, 0x00C6 ; 0x8000c6 <__DATA_REGION_ORIGIN__+0x66> if (!buffer_full(&uartRxBuffer)) { 1648: 8c e4 ldi r24, 0x4C ; 76 164a: 93 e0 ldi r25, 0x03 ; 3 164c: 0e 94 49 0a call 0x1492 ; 0x1492 1650: 89 2b or r24, r25 1652: 31 f4 brne .+12 ; 0x1660 <__vector_18+0x40> write_buffer(&uartRxBuffer, data);// записываем символ в буфер приема 1654: 6c 2f mov r22, r28 1656: 70 e0 ldi r23, 0x00 ; 0 1658: 8c e4 ldi r24, 0x4C ; 76 165a: 93 e0 ldi r25, 0x03 ; 3 165c: 0e 94 63 0a call 0x14c6 ; 0x14c6 } } 1660: ff 91 pop r31 1662: ef 91 pop r30 1664: cf 91 pop r28 1666: bf 91 pop r27 1668: af 91 pop r26 166a: 9f 91 pop r25 166c: 8f 91 pop r24 166e: 7f 91 pop r23 1670: 6f 91 pop r22 1672: 5f 91 pop r21 1674: 4f 91 pop r20 1676: 3f 91 pop r19 1678: 2f 91 pop r18 167a: 0f 90 pop r0 167c: 0f be out 0x3f, r0 ; 63 167e: 0f 90 pop r0 1680: 1f 90 pop r1 1682: 18 95 reti 00001684 <__vector_20>: ISR(USART_TX_vect) { 1684: 1f 92 push r1 1686: 0f 92 push r0 1688: 0f b6 in r0, 0x3f ; 63 168a: 0f 92 push r0 168c: 11 24 eor r1, r1 168e: 2f 93 push r18 1690: 3f 93 push r19 1692: 4f 93 push r20 1694: 5f 93 push r21 1696: 6f 93 push r22 1698: 7f 93 push r23 169a: 8f 93 push r24 169c: 9f 93 push r25 169e: af 93 push r26 16a0: bf 93 push r27 16a2: ef 93 push r30 16a4: ff 93 push r31 if (!buffer_empty(&uartTxBuffer)) { 16a6: 8e e6 ldi r24, 0x6E ; 110 16a8: 93 e0 ldi r25, 0x03 ; 3 16aa: 0e 94 3f 0a call 0x147e ; 0x147e 16ae: 89 2b or r24, r25 16b0: 39 f4 brne .+14 ; 0x16c0 <__vector_20+0x3c> UDR0 = read_buffer(&uartTxBuffer); 16b2: 8e e6 ldi r24, 0x6E ; 110 16b4: 93 e0 ldi r25, 0x03 ; 3 16b6: 0e 94 80 0a call 0x1500 ; 0x1500 16ba: 80 93 c6 00 sts 0x00C6, r24 ; 0x8000c6 <__DATA_REGION_ORIGIN__+0x66> 16be: 05 c0 rjmp .+10 ; 0x16ca <__vector_20+0x46> } else { UCSR0B &= ~(1 << TXCIE0); // отключаем прерывание, когда все данные отправлены 16c0: e1 ec ldi r30, 0xC1 ; 193 16c2: f0 e0 ldi r31, 0x00 ; 0 16c4: 80 81 ld r24, Z 16c6: 8f 7b andi r24, 0xBF ; 191 16c8: 80 83 st Z, r24 } 16ca: ff 91 pop r31 16cc: ef 91 pop r30 16ce: bf 91 pop r27 16d0: af 91 pop r26 16d2: 9f 91 pop r25 16d4: 8f 91 pop r24 16d6: 7f 91 pop r23 16d8: 6f 91 pop r22 16da: 5f 91 pop r21 16dc: 4f 91 pop r20 16de: 3f 91 pop r19 16e0: 2f 91 pop r18 16e2: 0f 90 pop r0 16e4: 0f be out 0x3f, r0 ; 63 16e6: 0f 90 pop r0 16e8: 1f 90 pop r1 16ea: 18 95 reti 000016ec <__udivmodhi4>: 16ec: aa 1b sub r26, r26 16ee: bb 1b sub r27, r27 16f0: 51 e1 ldi r21, 0x11 ; 17 16f2: 07 c0 rjmp .+14 ; 0x1702 <__udivmodhi4_ep> 000016f4 <__udivmodhi4_loop>: 16f4: aa 1f adc r26, r26 16f6: bb 1f adc r27, r27 16f8: a6 17 cp r26, r22 16fa: b7 07 cpc r27, r23 16fc: 10 f0 brcs .+4 ; 0x1702 <__udivmodhi4_ep> 16fe: a6 1b sub r26, r22 1700: b7 0b sbc r27, r23 00001702 <__udivmodhi4_ep>: 1702: 88 1f adc r24, r24 1704: 99 1f adc r25, r25 1706: 5a 95 dec r21 1708: a9 f7 brne .-22 ; 0x16f4 <__udivmodhi4_loop> 170a: 80 95 com r24 170c: 90 95 com r25 170e: bc 01 movw r22, r24 1710: cd 01 movw r24, r26 1712: 08 95 ret 00001714 : 1714: fb 01 movw r30, r22 1716: dc 01 movw r26, r24 1718: 41 50 subi r20, 0x01 ; 1 171a: 50 40 sbci r21, 0x00 ; 0 171c: 48 f0 brcs .+18 ; 0x1730 171e: 01 90 ld r0, Z+ 1720: 0d 92 st X+, r0 1722: 00 20 and r0, r0 1724: c9 f7 brne .-14 ; 0x1718 1726: 01 c0 rjmp .+2 ; 0x172a 1728: 1d 92 st X+, r1 172a: 41 50 subi r20, 0x01 ; 1 172c: 50 40 sbci r21, 0x00 ; 0 172e: e0 f7 brcc .-8 ; 0x1728 1730: 08 95 ret 00001732 : 1732: a0 e0 ldi r26, 0x00 ; 0 1734: b0 e0 ldi r27, 0x00 ; 0 1736: ef e9 ldi r30, 0x9F ; 159 1738: fb e0 ldi r31, 0x0B ; 11 173a: 0c 94 80 0e jmp 0x1d00 ; 0x1d00 <__prologue_saves__+0x20> 173e: ae 01 movw r20, r28 1740: 4b 5f subi r20, 0xFB ; 251 1742: 5f 4f sbci r21, 0xFF ; 255 1744: fa 01 movw r30, r20 1746: 61 91 ld r22, Z+ 1748: 71 91 ld r23, Z+ 174a: af 01 movw r20, r30 174c: 80 91 92 03 lds r24, 0x0392 ; 0x800392 <__iob+0x2> 1750: 90 91 93 03 lds r25, 0x0393 ; 0x800393 <__iob+0x3> 1754: 0e 94 df 0b call 0x17be ; 0x17be 1758: e2 e0 ldi r30, 0x02 ; 2 175a: 0c 94 9c 0e jmp 0x1d38 ; 0x1d38 <__epilogue_restores__+0x20> 0000175e : 175e: ae e0 ldi r26, 0x0E ; 14 1760: b0 e0 ldi r27, 0x00 ; 0 1762: e5 eb ldi r30, 0xB5 ; 181 1764: fb e0 ldi r31, 0x0B ; 11 1766: 0c 94 7e 0e jmp 0x1cfc ; 0x1cfc <__prologue_saves__+0x1c> 176a: 0d 89 ldd r16, Y+21 ; 0x15 176c: 1e 89 ldd r17, Y+22 ; 0x16 176e: 8f 89 ldd r24, Y+23 ; 0x17 1770: 98 8d ldd r25, Y+24 ; 0x18 1772: 26 e0 ldi r18, 0x06 ; 6 1774: 2c 83 std Y+4, r18 ; 0x04 1776: 1a 83 std Y+2, r17 ; 0x02 1778: 09 83 std Y+1, r16 ; 0x01 177a: 97 ff sbrs r25, 7 177c: 02 c0 rjmp .+4 ; 0x1782 177e: 80 e0 ldi r24, 0x00 ; 0 1780: 90 e8 ldi r25, 0x80 ; 128 1782: 01 97 sbiw r24, 0x01 ; 1 1784: 9e 83 std Y+6, r25 ; 0x06 1786: 8d 83 std Y+5, r24 ; 0x05 1788: ae 01 movw r20, r28 178a: 45 5e subi r20, 0xE5 ; 229 178c: 5f 4f sbci r21, 0xFF ; 255 178e: 69 8d ldd r22, Y+25 ; 0x19 1790: 7a 8d ldd r23, Y+26 ; 0x1a 1792: ce 01 movw r24, r28 1794: 01 96 adiw r24, 0x01 ; 1 1796: 0e 94 df 0b call 0x17be ; 0x17be 179a: 4d 81 ldd r20, Y+5 ; 0x05 179c: 5e 81 ldd r21, Y+6 ; 0x06 179e: 57 fd sbrc r21, 7 17a0: 0a c0 rjmp .+20 ; 0x17b6 17a2: 2f 81 ldd r18, Y+7 ; 0x07 17a4: 38 85 ldd r19, Y+8 ; 0x08 17a6: 42 17 cp r20, r18 17a8: 53 07 cpc r21, r19 17aa: 0c f4 brge .+2 ; 0x17ae 17ac: 9a 01 movw r18, r20 17ae: f8 01 movw r30, r16 17b0: e2 0f add r30, r18 17b2: f3 1f adc r31, r19 17b4: 10 82 st Z, r1 17b6: 2e 96 adiw r28, 0x0e ; 14 17b8: e4 e0 ldi r30, 0x04 ; 4 17ba: 0c 94 9a 0e jmp 0x1d34 ; 0x1d34 <__epilogue_restores__+0x1c> 000017be : 17be: ab e0 ldi r26, 0x0B ; 11 17c0: b0 e0 ldi r27, 0x00 ; 0 17c2: e5 ee ldi r30, 0xE5 ; 229 17c4: fb e0 ldi r31, 0x0B ; 11 17c6: 0c 94 70 0e jmp 0x1ce0 ; 0x1ce0 <__prologue_saves__> 17ca: 6c 01 movw r12, r24 17cc: 7b 01 movw r14, r22 17ce: 8a 01 movw r16, r20 17d0: fc 01 movw r30, r24 17d2: 17 82 std Z+7, r1 ; 0x07 17d4: 16 82 std Z+6, r1 ; 0x06 17d6: 83 81 ldd r24, Z+3 ; 0x03 17d8: 81 ff sbrs r24, 1 17da: cc c1 rjmp .+920 ; 0x1b74 17dc: ce 01 movw r24, r28 17de: 01 96 adiw r24, 0x01 ; 1 17e0: 3c 01 movw r6, r24 17e2: f6 01 movw r30, r12 17e4: 93 81 ldd r25, Z+3 ; 0x03 17e6: f7 01 movw r30, r14 17e8: 93 fd sbrc r25, 3 17ea: 85 91 lpm r24, Z+ 17ec: 93 ff sbrs r25, 3 17ee: 81 91 ld r24, Z+ 17f0: 7f 01 movw r14, r30 17f2: 88 23 and r24, r24 17f4: 09 f4 brne .+2 ; 0x17f8 17f6: ba c1 rjmp .+884 ; 0x1b6c 17f8: 85 32 cpi r24, 0x25 ; 37 17fa: 39 f4 brne .+14 ; 0x180a 17fc: 93 fd sbrc r25, 3 17fe: 85 91 lpm r24, Z+ 1800: 93 ff sbrs r25, 3 1802: 81 91 ld r24, Z+ 1804: 7f 01 movw r14, r30 1806: 85 32 cpi r24, 0x25 ; 37 1808: 29 f4 brne .+10 ; 0x1814 180a: b6 01 movw r22, r12 180c: 90 e0 ldi r25, 0x00 ; 0 180e: 0e 94 d6 0d call 0x1bac ; 0x1bac 1812: e7 cf rjmp .-50 ; 0x17e2 1814: 91 2c mov r9, r1 1816: 21 2c mov r2, r1 1818: 31 2c mov r3, r1 181a: ff e1 ldi r31, 0x1F ; 31 181c: f3 15 cp r31, r3 181e: d8 f0 brcs .+54 ; 0x1856 1820: 8b 32 cpi r24, 0x2B ; 43 1822: 79 f0 breq .+30 ; 0x1842 1824: 38 f4 brcc .+14 ; 0x1834 1826: 80 32 cpi r24, 0x20 ; 32 1828: 79 f0 breq .+30 ; 0x1848 182a: 83 32 cpi r24, 0x23 ; 35 182c: a1 f4 brne .+40 ; 0x1856 182e: 23 2d mov r18, r3 1830: 20 61 ori r18, 0x10 ; 16 1832: 1d c0 rjmp .+58 ; 0x186e 1834: 8d 32 cpi r24, 0x2D ; 45 1836: 61 f0 breq .+24 ; 0x1850 1838: 80 33 cpi r24, 0x30 ; 48 183a: 69 f4 brne .+26 ; 0x1856 183c: 23 2d mov r18, r3 183e: 21 60 ori r18, 0x01 ; 1 1840: 16 c0 rjmp .+44 ; 0x186e 1842: 83 2d mov r24, r3 1844: 82 60 ori r24, 0x02 ; 2 1846: 38 2e mov r3, r24 1848: e3 2d mov r30, r3 184a: e4 60 ori r30, 0x04 ; 4 184c: 3e 2e mov r3, r30 184e: 2a c0 rjmp .+84 ; 0x18a4 1850: f3 2d mov r31, r3 1852: f8 60 ori r31, 0x08 ; 8 1854: 1d c0 rjmp .+58 ; 0x1890 1856: 37 fc sbrc r3, 7 1858: 2d c0 rjmp .+90 ; 0x18b4 185a: 20 ed ldi r18, 0xD0 ; 208 185c: 28 0f add r18, r24 185e: 2a 30 cpi r18, 0x0A ; 10 1860: 40 f0 brcs .+16 ; 0x1872 1862: 8e 32 cpi r24, 0x2E ; 46 1864: b9 f4 brne .+46 ; 0x1894 1866: 36 fc sbrc r3, 6 1868: 81 c1 rjmp .+770 ; 0x1b6c 186a: 23 2d mov r18, r3 186c: 20 64 ori r18, 0x40 ; 64 186e: 32 2e mov r3, r18 1870: 19 c0 rjmp .+50 ; 0x18a4 1872: 36 fe sbrs r3, 6 1874: 06 c0 rjmp .+12 ; 0x1882 1876: 8a e0 ldi r24, 0x0A ; 10 1878: 98 9e mul r9, r24 187a: 20 0d add r18, r0 187c: 11 24 eor r1, r1 187e: 92 2e mov r9, r18 1880: 11 c0 rjmp .+34 ; 0x18a4 1882: ea e0 ldi r30, 0x0A ; 10 1884: 2e 9e mul r2, r30 1886: 20 0d add r18, r0 1888: 11 24 eor r1, r1 188a: 22 2e mov r2, r18 188c: f3 2d mov r31, r3 188e: f0 62 ori r31, 0x20 ; 32 1890: 3f 2e mov r3, r31 1892: 08 c0 rjmp .+16 ; 0x18a4 1894: 8c 36 cpi r24, 0x6C ; 108 1896: 21 f4 brne .+8 ; 0x18a0 1898: 83 2d mov r24, r3 189a: 80 68 ori r24, 0x80 ; 128 189c: 38 2e mov r3, r24 189e: 02 c0 rjmp .+4 ; 0x18a4 18a0: 88 36 cpi r24, 0x68 ; 104 18a2: 41 f4 brne .+16 ; 0x18b4 18a4: f7 01 movw r30, r14 18a6: 93 fd sbrc r25, 3 18a8: 85 91 lpm r24, Z+ 18aa: 93 ff sbrs r25, 3 18ac: 81 91 ld r24, Z+ 18ae: 7f 01 movw r14, r30 18b0: 81 11 cpse r24, r1 18b2: b3 cf rjmp .-154 ; 0x181a 18b4: 98 2f mov r25, r24 18b6: 9f 7d andi r25, 0xDF ; 223 18b8: 95 54 subi r25, 0x45 ; 69 18ba: 93 30 cpi r25, 0x03 ; 3 18bc: 28 f4 brcc .+10 ; 0x18c8 18be: 0c 5f subi r16, 0xFC ; 252 18c0: 1f 4f sbci r17, 0xFF ; 255 18c2: 9f e3 ldi r25, 0x3F ; 63 18c4: 99 83 std Y+1, r25 ; 0x01 18c6: 0d c0 rjmp .+26 ; 0x18e2 18c8: 83 36 cpi r24, 0x63 ; 99 18ca: 31 f0 breq .+12 ; 0x18d8 18cc: 83 37 cpi r24, 0x73 ; 115 18ce: 71 f0 breq .+28 ; 0x18ec 18d0: 83 35 cpi r24, 0x53 ; 83 18d2: 09 f0 breq .+2 ; 0x18d6 18d4: 59 c0 rjmp .+178 ; 0x1988 18d6: 21 c0 rjmp .+66 ; 0x191a 18d8: f8 01 movw r30, r16 18da: 80 81 ld r24, Z 18dc: 89 83 std Y+1, r24 ; 0x01 18de: 0e 5f subi r16, 0xFE ; 254 18e0: 1f 4f sbci r17, 0xFF ; 255 18e2: 88 24 eor r8, r8 18e4: 83 94 inc r8 18e6: 91 2c mov r9, r1 18e8: 53 01 movw r10, r6 18ea: 13 c0 rjmp .+38 ; 0x1912 18ec: 28 01 movw r4, r16 18ee: f2 e0 ldi r31, 0x02 ; 2 18f0: 4f 0e add r4, r31 18f2: 51 1c adc r5, r1 18f4: f8 01 movw r30, r16 18f6: a0 80 ld r10, Z 18f8: b1 80 ldd r11, Z+1 ; 0x01 18fa: 36 fe sbrs r3, 6 18fc: 03 c0 rjmp .+6 ; 0x1904 18fe: 69 2d mov r22, r9 1900: 70 e0 ldi r23, 0x00 ; 0 1902: 02 c0 rjmp .+4 ; 0x1908 1904: 6f ef ldi r22, 0xFF ; 255 1906: 7f ef ldi r23, 0xFF ; 255 1908: c5 01 movw r24, r10 190a: 0e 94 cb 0d call 0x1b96 ; 0x1b96 190e: 4c 01 movw r8, r24 1910: 82 01 movw r16, r4 1912: f3 2d mov r31, r3 1914: ff 77 andi r31, 0x7F ; 127 1916: 3f 2e mov r3, r31 1918: 16 c0 rjmp .+44 ; 0x1946 191a: 28 01 movw r4, r16 191c: 22 e0 ldi r18, 0x02 ; 2 191e: 42 0e add r4, r18 1920: 51 1c adc r5, r1 1922: f8 01 movw r30, r16 1924: a0 80 ld r10, Z 1926: b1 80 ldd r11, Z+1 ; 0x01 1928: 36 fe sbrs r3, 6 192a: 03 c0 rjmp .+6 ; 0x1932 192c: 69 2d mov r22, r9 192e: 70 e0 ldi r23, 0x00 ; 0 1930: 02 c0 rjmp .+4 ; 0x1936 1932: 6f ef ldi r22, 0xFF ; 255 1934: 7f ef ldi r23, 0xFF ; 255 1936: c5 01 movw r24, r10 1938: 0e 94 c0 0d call 0x1b80 ; 0x1b80 193c: 4c 01 movw r8, r24 193e: f3 2d mov r31, r3 1940: f0 68 ori r31, 0x80 ; 128 1942: 3f 2e mov r3, r31 1944: 82 01 movw r16, r4 1946: 33 fc sbrc r3, 3 1948: 1b c0 rjmp .+54 ; 0x1980 194a: 82 2d mov r24, r2 194c: 90 e0 ldi r25, 0x00 ; 0 194e: 88 16 cp r8, r24 1950: 99 06 cpc r9, r25 1952: b0 f4 brcc .+44 ; 0x1980 1954: b6 01 movw r22, r12 1956: 80 e2 ldi r24, 0x20 ; 32 1958: 90 e0 ldi r25, 0x00 ; 0 195a: 0e 94 d6 0d call 0x1bac ; 0x1bac 195e: 2a 94 dec r2 1960: f4 cf rjmp .-24 ; 0x194a 1962: f5 01 movw r30, r10 1964: 37 fc sbrc r3, 7 1966: 85 91 lpm r24, Z+ 1968: 37 fe sbrs r3, 7 196a: 81 91 ld r24, Z+ 196c: 5f 01 movw r10, r30 196e: b6 01 movw r22, r12 1970: 90 e0 ldi r25, 0x00 ; 0 1972: 0e 94 d6 0d call 0x1bac ; 0x1bac 1976: 21 10 cpse r2, r1 1978: 2a 94 dec r2 197a: 21 e0 ldi r18, 0x01 ; 1 197c: 82 1a sub r8, r18 197e: 91 08 sbc r9, r1 1980: 81 14 cp r8, r1 1982: 91 04 cpc r9, r1 1984: 71 f7 brne .-36 ; 0x1962 1986: e8 c0 rjmp .+464 ; 0x1b58 1988: 84 36 cpi r24, 0x64 ; 100 198a: 11 f0 breq .+4 ; 0x1990 198c: 89 36 cpi r24, 0x69 ; 105 198e: 41 f5 brne .+80 ; 0x19e0 1990: f8 01 movw r30, r16 1992: 37 fe sbrs r3, 7 1994: 07 c0 rjmp .+14 ; 0x19a4 1996: 60 81 ld r22, Z 1998: 71 81 ldd r23, Z+1 ; 0x01 199a: 82 81 ldd r24, Z+2 ; 0x02 199c: 93 81 ldd r25, Z+3 ; 0x03 199e: 0c 5f subi r16, 0xFC ; 252 19a0: 1f 4f sbci r17, 0xFF ; 255 19a2: 08 c0 rjmp .+16 ; 0x19b4 19a4: 60 81 ld r22, Z 19a6: 71 81 ldd r23, Z+1 ; 0x01 19a8: 07 2e mov r0, r23 19aa: 00 0c add r0, r0 19ac: 88 0b sbc r24, r24 19ae: 99 0b sbc r25, r25 19b0: 0e 5f subi r16, 0xFE ; 254 19b2: 1f 4f sbci r17, 0xFF ; 255 19b4: f3 2d mov r31, r3 19b6: ff 76 andi r31, 0x6F ; 111 19b8: 3f 2e mov r3, r31 19ba: 97 ff sbrs r25, 7 19bc: 09 c0 rjmp .+18 ; 0x19d0 19be: 90 95 com r25 19c0: 80 95 com r24 19c2: 70 95 com r23 19c4: 61 95 neg r22 19c6: 7f 4f sbci r23, 0xFF ; 255 19c8: 8f 4f sbci r24, 0xFF ; 255 19ca: 9f 4f sbci r25, 0xFF ; 255 19cc: f0 68 ori r31, 0x80 ; 128 19ce: 3f 2e mov r3, r31 19d0: 2a e0 ldi r18, 0x0A ; 10 19d2: 30 e0 ldi r19, 0x00 ; 0 19d4: a3 01 movw r20, r6 19d6: 0e 94 12 0e call 0x1c24 ; 0x1c24 <__ultoa_invert> 19da: 88 2e mov r8, r24 19dc: 86 18 sub r8, r6 19de: 45 c0 rjmp .+138 ; 0x1a6a 19e0: 85 37 cpi r24, 0x75 ; 117 19e2: 31 f4 brne .+12 ; 0x19f0 19e4: 23 2d mov r18, r3 19e6: 2f 7e andi r18, 0xEF ; 239 19e8: b2 2e mov r11, r18 19ea: 2a e0 ldi r18, 0x0A ; 10 19ec: 30 e0 ldi r19, 0x00 ; 0 19ee: 25 c0 rjmp .+74 ; 0x1a3a 19f0: 93 2d mov r25, r3 19f2: 99 7f andi r25, 0xF9 ; 249 19f4: b9 2e mov r11, r25 19f6: 8f 36 cpi r24, 0x6F ; 111 19f8: c1 f0 breq .+48 ; 0x1a2a 19fa: 18 f4 brcc .+6 ; 0x1a02 19fc: 88 35 cpi r24, 0x58 ; 88 19fe: 79 f0 breq .+30 ; 0x1a1e 1a00: b5 c0 rjmp .+362 ; 0x1b6c 1a02: 80 37 cpi r24, 0x70 ; 112 1a04: 19 f0 breq .+6 ; 0x1a0c 1a06: 88 37 cpi r24, 0x78 ; 120 1a08: 21 f0 breq .+8 ; 0x1a12 1a0a: b0 c0 rjmp .+352 ; 0x1b6c 1a0c: e9 2f mov r30, r25 1a0e: e0 61 ori r30, 0x10 ; 16 1a10: be 2e mov r11, r30 1a12: b4 fe sbrs r11, 4 1a14: 0d c0 rjmp .+26 ; 0x1a30 1a16: fb 2d mov r31, r11 1a18: f4 60 ori r31, 0x04 ; 4 1a1a: bf 2e mov r11, r31 1a1c: 09 c0 rjmp .+18 ; 0x1a30 1a1e: 34 fe sbrs r3, 4 1a20: 0a c0 rjmp .+20 ; 0x1a36 1a22: 29 2f mov r18, r25 1a24: 26 60 ori r18, 0x06 ; 6 1a26: b2 2e mov r11, r18 1a28: 06 c0 rjmp .+12 ; 0x1a36 1a2a: 28 e0 ldi r18, 0x08 ; 8 1a2c: 30 e0 ldi r19, 0x00 ; 0 1a2e: 05 c0 rjmp .+10 ; 0x1a3a 1a30: 20 e1 ldi r18, 0x10 ; 16 1a32: 30 e0 ldi r19, 0x00 ; 0 1a34: 02 c0 rjmp .+4 ; 0x1a3a 1a36: 20 e1 ldi r18, 0x10 ; 16 1a38: 32 e0 ldi r19, 0x02 ; 2 1a3a: f8 01 movw r30, r16 1a3c: b7 fe sbrs r11, 7 1a3e: 07 c0 rjmp .+14 ; 0x1a4e 1a40: 60 81 ld r22, Z 1a42: 71 81 ldd r23, Z+1 ; 0x01 1a44: 82 81 ldd r24, Z+2 ; 0x02 1a46: 93 81 ldd r25, Z+3 ; 0x03 1a48: 0c 5f subi r16, 0xFC ; 252 1a4a: 1f 4f sbci r17, 0xFF ; 255 1a4c: 06 c0 rjmp .+12 ; 0x1a5a 1a4e: 60 81 ld r22, Z 1a50: 71 81 ldd r23, Z+1 ; 0x01 1a52: 80 e0 ldi r24, 0x00 ; 0 1a54: 90 e0 ldi r25, 0x00 ; 0 1a56: 0e 5f subi r16, 0xFE ; 254 1a58: 1f 4f sbci r17, 0xFF ; 255 1a5a: a3 01 movw r20, r6 1a5c: 0e 94 12 0e call 0x1c24 ; 0x1c24 <__ultoa_invert> 1a60: 88 2e mov r8, r24 1a62: 86 18 sub r8, r6 1a64: fb 2d mov r31, r11 1a66: ff 77 andi r31, 0x7F ; 127 1a68: 3f 2e mov r3, r31 1a6a: 36 fe sbrs r3, 6 1a6c: 0d c0 rjmp .+26 ; 0x1a88 1a6e: 23 2d mov r18, r3 1a70: 2e 7f andi r18, 0xFE ; 254 1a72: a2 2e mov r10, r18 1a74: 89 14 cp r8, r9 1a76: 58 f4 brcc .+22 ; 0x1a8e 1a78: 34 fe sbrs r3, 4 1a7a: 0b c0 rjmp .+22 ; 0x1a92 1a7c: 32 fc sbrc r3, 2 1a7e: 09 c0 rjmp .+18 ; 0x1a92 1a80: 83 2d mov r24, r3 1a82: 8e 7e andi r24, 0xEE ; 238 1a84: a8 2e mov r10, r24 1a86: 05 c0 rjmp .+10 ; 0x1a92 1a88: b8 2c mov r11, r8 1a8a: a3 2c mov r10, r3 1a8c: 03 c0 rjmp .+6 ; 0x1a94 1a8e: b8 2c mov r11, r8 1a90: 01 c0 rjmp .+2 ; 0x1a94 1a92: b9 2c mov r11, r9 1a94: a4 fe sbrs r10, 4 1a96: 0f c0 rjmp .+30 ; 0x1ab6 1a98: fe 01 movw r30, r28 1a9a: e8 0d add r30, r8 1a9c: f1 1d adc r31, r1 1a9e: 80 81 ld r24, Z 1aa0: 80 33 cpi r24, 0x30 ; 48 1aa2: 21 f4 brne .+8 ; 0x1aac 1aa4: 9a 2d mov r25, r10 1aa6: 99 7e andi r25, 0xE9 ; 233 1aa8: a9 2e mov r10, r25 1aaa: 09 c0 rjmp .+18 ; 0x1abe 1aac: a2 fe sbrs r10, 2 1aae: 06 c0 rjmp .+12 ; 0x1abc 1ab0: b3 94 inc r11 1ab2: b3 94 inc r11 1ab4: 04 c0 rjmp .+8 ; 0x1abe 1ab6: 8a 2d mov r24, r10 1ab8: 86 78 andi r24, 0x86 ; 134 1aba: 09 f0 breq .+2 ; 0x1abe 1abc: b3 94 inc r11 1abe: a3 fc sbrc r10, 3 1ac0: 11 c0 rjmp .+34 ; 0x1ae4 1ac2: a0 fe sbrs r10, 0 1ac4: 06 c0 rjmp .+12 ; 0x1ad2 1ac6: b2 14 cp r11, r2 1ac8: 88 f4 brcc .+34 ; 0x1aec 1aca: 28 0c add r2, r8 1acc: 92 2c mov r9, r2 1ace: 9b 18 sub r9, r11 1ad0: 0e c0 rjmp .+28 ; 0x1aee 1ad2: b2 14 cp r11, r2 1ad4: 60 f4 brcc .+24 ; 0x1aee 1ad6: b6 01 movw r22, r12 1ad8: 80 e2 ldi r24, 0x20 ; 32 1ada: 90 e0 ldi r25, 0x00 ; 0 1adc: 0e 94 d6 0d call 0x1bac ; 0x1bac 1ae0: b3 94 inc r11 1ae2: f7 cf rjmp .-18 ; 0x1ad2 1ae4: b2 14 cp r11, r2 1ae6: 18 f4 brcc .+6 ; 0x1aee 1ae8: 2b 18 sub r2, r11 1aea: 02 c0 rjmp .+4 ; 0x1af0 1aec: 98 2c mov r9, r8 1aee: 21 2c mov r2, r1 1af0: a4 fe sbrs r10, 4 1af2: 10 c0 rjmp .+32 ; 0x1b14 1af4: b6 01 movw r22, r12 1af6: 80 e3 ldi r24, 0x30 ; 48 1af8: 90 e0 ldi r25, 0x00 ; 0 1afa: 0e 94 d6 0d call 0x1bac ; 0x1bac 1afe: a2 fe sbrs r10, 2 1b00: 17 c0 rjmp .+46 ; 0x1b30 1b02: a1 fc sbrc r10, 1 1b04: 03 c0 rjmp .+6 ; 0x1b0c 1b06: 88 e7 ldi r24, 0x78 ; 120 1b08: 90 e0 ldi r25, 0x00 ; 0 1b0a: 02 c0 rjmp .+4 ; 0x1b10 1b0c: 88 e5 ldi r24, 0x58 ; 88 1b0e: 90 e0 ldi r25, 0x00 ; 0 1b10: b6 01 movw r22, r12 1b12: 0c c0 rjmp .+24 ; 0x1b2c 1b14: 8a 2d mov r24, r10 1b16: 86 78 andi r24, 0x86 ; 134 1b18: 59 f0 breq .+22 ; 0x1b30 1b1a: a1 fe sbrs r10, 1 1b1c: 02 c0 rjmp .+4 ; 0x1b22 1b1e: 8b e2 ldi r24, 0x2B ; 43 1b20: 01 c0 rjmp .+2 ; 0x1b24 1b22: 80 e2 ldi r24, 0x20 ; 32 1b24: a7 fc sbrc r10, 7 1b26: 8d e2 ldi r24, 0x2D ; 45 1b28: b6 01 movw r22, r12 1b2a: 90 e0 ldi r25, 0x00 ; 0 1b2c: 0e 94 d6 0d call 0x1bac ; 0x1bac 1b30: 89 14 cp r8, r9 1b32: 38 f4 brcc .+14 ; 0x1b42 1b34: b6 01 movw r22, r12 1b36: 80 e3 ldi r24, 0x30 ; 48 1b38: 90 e0 ldi r25, 0x00 ; 0 1b3a: 0e 94 d6 0d call 0x1bac ; 0x1bac 1b3e: 9a 94 dec r9 1b40: f7 cf rjmp .-18 ; 0x1b30 1b42: 8a 94 dec r8 1b44: f3 01 movw r30, r6 1b46: e8 0d add r30, r8 1b48: f1 1d adc r31, r1 1b4a: 80 81 ld r24, Z 1b4c: b6 01 movw r22, r12 1b4e: 90 e0 ldi r25, 0x00 ; 0 1b50: 0e 94 d6 0d call 0x1bac ; 0x1bac 1b54: 81 10 cpse r8, r1 1b56: f5 cf rjmp .-22 ; 0x1b42 1b58: 22 20 and r2, r2 1b5a: 09 f4 brne .+2 ; 0x1b5e 1b5c: 42 ce rjmp .-892 ; 0x17e2 1b5e: b6 01 movw r22, r12 1b60: 80 e2 ldi r24, 0x20 ; 32 1b62: 90 e0 ldi r25, 0x00 ; 0 1b64: 0e 94 d6 0d call 0x1bac ; 0x1bac 1b68: 2a 94 dec r2 1b6a: f6 cf rjmp .-20 ; 0x1b58 1b6c: f6 01 movw r30, r12 1b6e: 86 81 ldd r24, Z+6 ; 0x06 1b70: 97 81 ldd r25, Z+7 ; 0x07 1b72: 02 c0 rjmp .+4 ; 0x1b78 1b74: 8f ef ldi r24, 0xFF ; 255 1b76: 9f ef ldi r25, 0xFF ; 255 1b78: 2b 96 adiw r28, 0x0b ; 11 1b7a: e2 e1 ldi r30, 0x12 ; 18 1b7c: 0c 94 8c 0e jmp 0x1d18 ; 0x1d18 <__epilogue_restores__> 00001b80 : 1b80: fc 01 movw r30, r24 1b82: 05 90 lpm r0, Z+ 1b84: 61 50 subi r22, 0x01 ; 1 1b86: 70 40 sbci r23, 0x00 ; 0 1b88: 01 10 cpse r0, r1 1b8a: d8 f7 brcc .-10 ; 0x1b82 1b8c: 80 95 com r24 1b8e: 90 95 com r25 1b90: 8e 0f add r24, r30 1b92: 9f 1f adc r25, r31 1b94: 08 95 ret 00001b96 : 1b96: fc 01 movw r30, r24 1b98: 61 50 subi r22, 0x01 ; 1 1b9a: 70 40 sbci r23, 0x00 ; 0 1b9c: 01 90 ld r0, Z+ 1b9e: 01 10 cpse r0, r1 1ba0: d8 f7 brcc .-10 ; 0x1b98 1ba2: 80 95 com r24 1ba4: 90 95 com r25 1ba6: 8e 0f add r24, r30 1ba8: 9f 1f adc r25, r31 1baa: 08 95 ret 00001bac : 1bac: 0f 93 push r16 1bae: 1f 93 push r17 1bb0: cf 93 push r28 1bb2: df 93 push r29 1bb4: fb 01 movw r30, r22 1bb6: 23 81 ldd r18, Z+3 ; 0x03 1bb8: 21 fd sbrc r18, 1 1bba: 03 c0 rjmp .+6 ; 0x1bc2 1bbc: 8f ef ldi r24, 0xFF ; 255 1bbe: 9f ef ldi r25, 0xFF ; 255 1bc0: 2c c0 rjmp .+88 ; 0x1c1a 1bc2: 22 ff sbrs r18, 2 1bc4: 16 c0 rjmp .+44 ; 0x1bf2 1bc6: 46 81 ldd r20, Z+6 ; 0x06 1bc8: 57 81 ldd r21, Z+7 ; 0x07 1bca: 24 81 ldd r18, Z+4 ; 0x04 1bcc: 35 81 ldd r19, Z+5 ; 0x05 1bce: 42 17 cp r20, r18 1bd0: 53 07 cpc r21, r19 1bd2: 44 f4 brge .+16 ; 0x1be4 1bd4: a0 81 ld r26, Z 1bd6: b1 81 ldd r27, Z+1 ; 0x01 1bd8: 9d 01 movw r18, r26 1bda: 2f 5f subi r18, 0xFF ; 255 1bdc: 3f 4f sbci r19, 0xFF ; 255 1bde: 31 83 std Z+1, r19 ; 0x01 1be0: 20 83 st Z, r18 1be2: 8c 93 st X, r24 1be4: 26 81 ldd r18, Z+6 ; 0x06 1be6: 37 81 ldd r19, Z+7 ; 0x07 1be8: 2f 5f subi r18, 0xFF ; 255 1bea: 3f 4f sbci r19, 0xFF ; 255 1bec: 37 83 std Z+7, r19 ; 0x07 1bee: 26 83 std Z+6, r18 ; 0x06 1bf0: 14 c0 rjmp .+40 ; 0x1c1a 1bf2: 8b 01 movw r16, r22 1bf4: ec 01 movw r28, r24 1bf6: fb 01 movw r30, r22 1bf8: 00 84 ldd r0, Z+8 ; 0x08 1bfa: f1 85 ldd r31, Z+9 ; 0x09 1bfc: e0 2d mov r30, r0 1bfe: 09 95 icall 1c00: 89 2b or r24, r25 1c02: e1 f6 brne .-72 ; 0x1bbc 1c04: d8 01 movw r26, r16 1c06: 16 96 adiw r26, 0x06 ; 6 1c08: 8d 91 ld r24, X+ 1c0a: 9c 91 ld r25, X 1c0c: 17 97 sbiw r26, 0x07 ; 7 1c0e: 01 96 adiw r24, 0x01 ; 1 1c10: 17 96 adiw r26, 0x07 ; 7 1c12: 9c 93 st X, r25 1c14: 8e 93 st -X, r24 1c16: 16 97 sbiw r26, 0x06 ; 6 1c18: ce 01 movw r24, r28 1c1a: df 91 pop r29 1c1c: cf 91 pop r28 1c1e: 1f 91 pop r17 1c20: 0f 91 pop r16 1c22: 08 95 ret 00001c24 <__ultoa_invert>: 1c24: fa 01 movw r30, r20 1c26: aa 27 eor r26, r26 1c28: 28 30 cpi r18, 0x08 ; 8 1c2a: 51 f1 breq .+84 ; 0x1c80 <__ultoa_invert+0x5c> 1c2c: 20 31 cpi r18, 0x10 ; 16 1c2e: 81 f1 breq .+96 ; 0x1c90 <__ultoa_invert+0x6c> 1c30: e8 94 clt 1c32: 6f 93 push r22 1c34: 6e 7f andi r22, 0xFE ; 254 1c36: 6e 5f subi r22, 0xFE ; 254 1c38: 7f 4f sbci r23, 0xFF ; 255 1c3a: 8f 4f sbci r24, 0xFF ; 255 1c3c: 9f 4f sbci r25, 0xFF ; 255 1c3e: af 4f sbci r26, 0xFF ; 255 1c40: b1 e0 ldi r27, 0x01 ; 1 1c42: 3e d0 rcall .+124 ; 0x1cc0 <__ultoa_invert+0x9c> 1c44: b4 e0 ldi r27, 0x04 ; 4 1c46: 3c d0 rcall .+120 ; 0x1cc0 <__ultoa_invert+0x9c> 1c48: 67 0f add r22, r23 1c4a: 78 1f adc r23, r24 1c4c: 89 1f adc r24, r25 1c4e: 9a 1f adc r25, r26 1c50: a1 1d adc r26, r1 1c52: 68 0f add r22, r24 1c54: 79 1f adc r23, r25 1c56: 8a 1f adc r24, r26 1c58: 91 1d adc r25, r1 1c5a: a1 1d adc r26, r1 1c5c: 6a 0f add r22, r26 1c5e: 71 1d adc r23, r1 1c60: 81 1d adc r24, r1 1c62: 91 1d adc r25, r1 1c64: a1 1d adc r26, r1 1c66: 20 d0 rcall .+64 ; 0x1ca8 <__ultoa_invert+0x84> 1c68: 09 f4 brne .+2 ; 0x1c6c <__ultoa_invert+0x48> 1c6a: 68 94 set 1c6c: 3f 91 pop r19 1c6e: 2a e0 ldi r18, 0x0A ; 10 1c70: 26 9f mul r18, r22 1c72: 11 24 eor r1, r1 1c74: 30 19 sub r19, r0 1c76: 30 5d subi r19, 0xD0 ; 208 1c78: 31 93 st Z+, r19 1c7a: de f6 brtc .-74 ; 0x1c32 <__ultoa_invert+0xe> 1c7c: cf 01 movw r24, r30 1c7e: 08 95 ret 1c80: 46 2f mov r20, r22 1c82: 47 70 andi r20, 0x07 ; 7 1c84: 40 5d subi r20, 0xD0 ; 208 1c86: 41 93 st Z+, r20 1c88: b3 e0 ldi r27, 0x03 ; 3 1c8a: 0f d0 rcall .+30 ; 0x1caa <__ultoa_invert+0x86> 1c8c: c9 f7 brne .-14 ; 0x1c80 <__ultoa_invert+0x5c> 1c8e: f6 cf rjmp .-20 ; 0x1c7c <__ultoa_invert+0x58> 1c90: 46 2f mov r20, r22 1c92: 4f 70 andi r20, 0x0F ; 15 1c94: 40 5d subi r20, 0xD0 ; 208 1c96: 4a 33 cpi r20, 0x3A ; 58 1c98: 18 f0 brcs .+6 ; 0x1ca0 <__ultoa_invert+0x7c> 1c9a: 49 5d subi r20, 0xD9 ; 217 1c9c: 31 fd sbrc r19, 1 1c9e: 40 52 subi r20, 0x20 ; 32 1ca0: 41 93 st Z+, r20 1ca2: 02 d0 rcall .+4 ; 0x1ca8 <__ultoa_invert+0x84> 1ca4: a9 f7 brne .-22 ; 0x1c90 <__ultoa_invert+0x6c> 1ca6: ea cf rjmp .-44 ; 0x1c7c <__ultoa_invert+0x58> 1ca8: b4 e0 ldi r27, 0x04 ; 4 1caa: a6 95 lsr r26 1cac: 97 95 ror r25 1cae: 87 95 ror r24 1cb0: 77 95 ror r23 1cb2: 67 95 ror r22 1cb4: ba 95 dec r27 1cb6: c9 f7 brne .-14 ; 0x1caa <__ultoa_invert+0x86> 1cb8: 00 97 sbiw r24, 0x00 ; 0 1cba: 61 05 cpc r22, r1 1cbc: 71 05 cpc r23, r1 1cbe: 08 95 ret 1cc0: 9b 01 movw r18, r22 1cc2: ac 01 movw r20, r24 1cc4: 0a 2e mov r0, r26 1cc6: 06 94 lsr r0 1cc8: 57 95 ror r21 1cca: 47 95 ror r20 1ccc: 37 95 ror r19 1cce: 27 95 ror r18 1cd0: ba 95 dec r27 1cd2: c9 f7 brne .-14 ; 0x1cc6 <__ultoa_invert+0xa2> 1cd4: 62 0f add r22, r18 1cd6: 73 1f adc r23, r19 1cd8: 84 1f adc r24, r20 1cda: 95 1f adc r25, r21 1cdc: a0 1d adc r26, r0 1cde: 08 95 ret 00001ce0 <__prologue_saves__>: 1ce0: 2f 92 push r2 1ce2: 3f 92 push r3 1ce4: 4f 92 push r4 1ce6: 5f 92 push r5 1ce8: 6f 92 push r6 1cea: 7f 92 push r7 1cec: 8f 92 push r8 1cee: 9f 92 push r9 1cf0: af 92 push r10 1cf2: bf 92 push r11 1cf4: cf 92 push r12 1cf6: df 92 push r13 1cf8: ef 92 push r14 1cfa: ff 92 push r15 1cfc: 0f 93 push r16 1cfe: 1f 93 push r17 1d00: cf 93 push r28 1d02: df 93 push r29 1d04: cd b7 in r28, 0x3d ; 61 1d06: de b7 in r29, 0x3e ; 62 1d08: ca 1b sub r28, r26 1d0a: db 0b sbc r29, r27 1d0c: 0f b6 in r0, 0x3f ; 63 1d0e: f8 94 cli 1d10: de bf out 0x3e, r29 ; 62 1d12: 0f be out 0x3f, r0 ; 63 1d14: cd bf out 0x3d, r28 ; 61 1d16: 09 94 ijmp 00001d18 <__epilogue_restores__>: 1d18: 2a 88 ldd r2, Y+18 ; 0x12 1d1a: 39 88 ldd r3, Y+17 ; 0x11 1d1c: 48 88 ldd r4, Y+16 ; 0x10 1d1e: 5f 84 ldd r5, Y+15 ; 0x0f 1d20: 6e 84 ldd r6, Y+14 ; 0x0e 1d22: 7d 84 ldd r7, Y+13 ; 0x0d 1d24: 8c 84 ldd r8, Y+12 ; 0x0c 1d26: 9b 84 ldd r9, Y+11 ; 0x0b 1d28: aa 84 ldd r10, Y+10 ; 0x0a 1d2a: b9 84 ldd r11, Y+9 ; 0x09 1d2c: c8 84 ldd r12, Y+8 ; 0x08 1d2e: df 80 ldd r13, Y+7 ; 0x07 1d30: ee 80 ldd r14, Y+6 ; 0x06 1d32: fd 80 ldd r15, Y+5 ; 0x05 1d34: 0c 81 ldd r16, Y+4 ; 0x04 1d36: 1b 81 ldd r17, Y+3 ; 0x03 1d38: aa 81 ldd r26, Y+2 ; 0x02 1d3a: b9 81 ldd r27, Y+1 ; 0x01 1d3c: ce 0f add r28, r30 1d3e: d1 1d adc r29, r1 1d40: 0f b6 in r0, 0x3f ; 63 1d42: f8 94 cli 1d44: de bf out 0x3e, r29 ; 62 1d46: 0f be out 0x3f, r0 ; 63 1d48: cd bf out 0x3d, r28 ; 61 1d4a: ed 01 movw r28, r26 1d4c: 08 95 ret 00001d4e <_exit>: 1d4e: f8 94 cli 00001d50 <__stop_program>: 1d50: ff cf rjmp .-2 ; 0x1d50 <__stop_program>