4531 lines
178 KiB
Plaintext
4531 lines
178 KiB
Plaintext
|
||
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 <main>
|
||
9e: 0c 94 a7 0e jmp 0x1d4e ; 0x1d4e <_exit>
|
||
|
||
000000a2 <__bad_interrupt>:
|
||
a2: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
|
||
|
||
000000a6 <init_hdlc_client>:
|
||
|
||
#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 <connecting_frame_timeout_bf+0x1>
|
||
b4: 60 93 43 03 sts 0x0343, r22 ; 0x800343 <connecting_frame_timeout_bf>
|
||
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 <hdlc_connect>:
|
||
}
|
||
|
||
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 <hdlc_send_data>:
|
||
}
|
||
|
||
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 <hdlc_send_data+0x2a>
|
||
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 <hdlc_send_data+0x30>
|
||
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 <hdlc_get_raw_frame>:
|
||
|
||
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 <hdlc_get_raw_frame+0x12>
|
||
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 <hdlc_get_raw_frame+0x5a>
|
||
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 <hdlc_frame_data>
|
||
client->len_data_i_frame, buffer, &lenBuffer);
|
||
if (ret < 0){
|
||
160: 99 23 and r25, r25
|
||
162: 64 f4 brge .+24 ; 0x17c <hdlc_get_raw_frame+0x5a>
|
||
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 <printf>
|
||
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 <hdlc_get_raw_frame+0x96>
|
||
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 <hdlc_frame_data>
|
||
|
||
if (ret < 0){
|
||
19c: 99 23 and r25, r25
|
||
19e: 64 f4 brge .+24 ; 0x1b8 <hdlc_get_raw_frame+0x96>
|
||
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 <printf>
|
||
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 <hdlc_get_raw_frame+0xd2>
|
||
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 <hdlc_frame_data>
|
||
|
||
if (ret < 0){
|
||
1d8: 99 23 and r25, r25
|
||
1da: 64 f4 brge .+24 ; 0x1f4 <hdlc_get_raw_frame+0xd2>
|
||
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 <printf>
|
||
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 <hdlc_decode_recived_raw_data>:
|
||
|
||
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 <hdlc_decode_recived_raw_data+0x26>
|
||
234: 00 d0 rcall .+0 ; 0x236 <hdlc_decode_recived_raw_data+0x28>
|
||
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 <hdlc_get_data_with_state>
|
||
&len_buffer);
|
||
|
||
if (ret < 0) {
|
||
282: 99 23 and r25, r25
|
||
284: 0c f4 brge .+2 ; 0x288 <hdlc_decode_recived_raw_data+0x7a>
|
||
286: 48 c0 rjmp .+144 ; 0x318 <hdlc_decode_recived_raw_data+0x10a>
|
||
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 <hdlc_decode_recived_raw_data+0xa0>
|
||
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 <hdlc_decode_recived_raw_data+0x10a>
|
||
}
|
||
|
||
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 <hdlc_decode_recived_raw_data+0xb8>
|
||
2b4: 18 f0 brcs .+6 ; 0x2bc <hdlc_decode_recived_raw_data+0xae>
|
||
2b6: 82 30 cpi r24, 0x02 ; 2
|
||
2b8: d9 f0 breq .+54 ; 0x2f0 <hdlc_decode_recived_raw_data+0xe2>
|
||
2ba: 25 c0 rjmp .+74 ; 0x306 <hdlc_decode_recived_raw_data+0xf8>
|
||
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 <hdlc_decode_recived_raw_data+0xc0>
|
||
2c4: 0e c0 rjmp .+28 ; 0x2e2 <hdlc_decode_recived_raw_data+0xd4>
|
||
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 <hdlc_decode_recived_raw_data+0xf8>
|
||
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 <hdlc_decode_recived_raw_data+0xca>
|
||
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 <hdlc_decode_recived_raw_data+0xf8>
|
||
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 <hdlc_decode_recived_raw_data+0x10a>
|
||
}
|
||
|
||
client->connecting_frame_timeout = connecting_frame_timeout_bf;
|
||
306: 80 91 43 03 lds r24, 0x0343 ; 0x800343 <connecting_frame_timeout_bf>
|
||
30a: 90 91 44 03 lds r25, 0x0344 ; 0x800344 <connecting_frame_timeout_bf+0x1>
|
||
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 <hdlc_timeout_handler>:
|
||
|
||
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 <hdlc_timeout_handler+0x1a>
|
||
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 <calc_fcs>:
|
||
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 <hdlc_escape_value>:
|
||
//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 <hdlc_escape_value+0x26>
|
||
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 <hdlc_get_control_type>:
|
||
3ca: 98 2f mov r25, r24
|
||
3cc: 80 ff sbrs r24, 0
|
||
3ce: 0b c0 rjmp .+22 ; 0x3e6 <hdlc_get_control_type+0x1c>
|
||
3d0: 86 95 lsr r24
|
||
3d2: 86 95 lsr r24
|
||
3d4: 83 70 andi r24, 0x03 ; 3
|
||
3d6: 11 f0 breq .+4 ; 0x3dc <hdlc_get_control_type+0x12>
|
||
3d8: 82 e0 ldi r24, 0x02 ; 2
|
||
3da: 01 c0 rjmp .+2 ; 0x3de <hdlc_get_control_type+0x14>
|
||
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 <hdlc_get_control_type+0x22>
|
||
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 <hdlc_frame_control_type>:
|
||
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 <hdlc_get_data_reset_with_state>:
|
||
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 <hdlc_get_data_with_state>:
|
||
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 <hdlc_get_data_with_state+0x24>
|
||
468: 00 d0 rcall .+0 ; 0x46a <hdlc_get_data_with_state+0x26>
|
||
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 <hdlc_get_data_with_state+0x30>
|
||
472: ea c0 rjmp .+468 ; 0x648 <hdlc_get_data_with_state+0x204>
|
||
474: 61 15 cp r22, r1
|
||
476: 71 05 cpc r23, r1
|
||
478: 09 f4 brne .+2 ; 0x47c <hdlc_get_data_with_state+0x38>
|
||
47a: e9 c0 rjmp .+466 ; 0x64e <hdlc_get_data_with_state+0x20a>
|
||
47c: 41 15 cp r20, r1
|
||
47e: 51 05 cpc r21, r1
|
||
480: 09 f4 brne .+2 ; 0x484 <hdlc_get_data_with_state+0x40>
|
||
482: e8 c0 rjmp .+464 ; 0x654 <hdlc_get_data_with_state+0x210>
|
||
484: 01 15 cp r16, r1
|
||
486: 11 05 cpc r17, r1
|
||
488: 09 f4 brne .+2 ; 0x48c <hdlc_get_data_with_state+0x48>
|
||
48a: e7 c0 rjmp .+462 ; 0x65a <hdlc_get_data_with_state+0x216>
|
||
48c: e1 14 cp r14, r1
|
||
48e: f1 04 cpc r15, r1
|
||
490: 09 f4 brne .+2 ; 0x494 <hdlc_get_data_with_state+0x50>
|
||
492: e6 c0 rjmp .+460 ; 0x660 <hdlc_get_data_with_state+0x21c>
|
||
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 <hdlc_get_data_with_state+0x64>
|
||
4a6: 99 c0 rjmp .+306 ; 0x5da <hdlc_get_data_with_state+0x196>
|
||
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 <hdlc_get_data_with_state+0xb2>
|
||
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 <hdlc_get_data_with_state+0x96>
|
||
4d8: 70 c0 rjmp .+224 ; 0x5ba <hdlc_get_data_with_state+0x176>
|
||
4da: ca 14 cp r12, r10
|
||
4dc: db 04 cpc r13, r11
|
||
4de: 20 f4 brcc .+8 ; 0x4e8 <hdlc_get_data_with_state+0xa4>
|
||
4e0: 81 81 ldd r24, Z+1 ; 0x01
|
||
4e2: 8e 37 cpi r24, 0x7E ; 126
|
||
4e4: 09 f4 brne .+2 ; 0x4e8 <hdlc_get_data_with_state+0xa4>
|
||
4e6: 70 c0 rjmp .+224 ; 0x5c8 <hdlc_get_data_with_state+0x184>
|
||
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 <hdlc_get_data_with_state+0x176>
|
||
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 <hdlc_get_data_with_state+0xee>
|
||
500: ca 14 cp r12, r10
|
||
502: db 04 cpc r13, r11
|
||
504: 20 f4 brcc .+8 ; 0x50e <hdlc_get_data_with_state+0xca>
|
||
506: 21 81 ldd r18, Z+1 ; 0x01
|
||
508: 2e 37 cpi r18, 0x7E ; 126
|
||
50a: 09 f4 brne .+2 ; 0x50e <hdlc_get_data_with_state+0xca>
|
||
50c: 5d c0 rjmp .+186 ; 0x5c8 <hdlc_get_data_with_state+0x184>
|
||
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 <hdlc_get_data_with_state+0xe4>
|
||
526: 50 c0 rjmp .+160 ; 0x5c8 <hdlc_get_data_with_state+0x184>
|
||
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 <hdlc_get_data_with_state+0x1a8>
|
||
532: bd e7 ldi r27, 0x7D ; 125
|
||
534: 5b 12 cpse r5, r27
|
||
536: 04 c0 rjmp .+8 ; 0x540 <hdlc_get_data_with_state+0xfc>
|
||
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 <hdlc_get_data_with_state+0x176>
|
||
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 <hdlc_get_data_with_state+0x10c>
|
||
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 <calc_fcs>
|
||
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 <hdlc_get_data_with_state+0x14e>
|
||
582: 85 2d mov r24, r5
|
||
584: 0e 94 e5 01 call 0x3ca ; 0x3ca <hdlc_get_control_type>
|
||
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 <hdlc_get_data_with_state+0x176>
|
||
592: 82 17 cp r24, r18
|
||
594: 93 07 cpc r25, r19
|
||
596: 8c f4 brge .+34 ; 0x5ba <hdlc_get_data_with_state+0x176>
|
||
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 <hdlc_get_data_with_state+0x196>
|
||
5d8: 73 cf rjmp .-282 ; 0x4c0 <hdlc_get_data_with_state+0x7c>
|
||
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 <hdlc_get_data_with_state+0x1b4>
|
||
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 <hdlc_get_data_with_state+0x1c0>
|
||
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 <hdlc_get_data_with_state+0x220>
|
||
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 <hdlc_get_data_with_state+0x1d6>
|
||
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 <hdlc_get_data_with_state+0x1e2>
|
||
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 <hdlc_get_data_with_state+0x1f6>
|
||
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 <hdlc_get_data_reset_with_state>
|
||
642: 80 2f mov r24, r16
|
||
644: 91 2f mov r25, r17
|
||
646: 0e c0 rjmp .+28 ; 0x664 <hdlc_get_data_with_state+0x220>
|
||
648: 8e e0 ldi r24, 0x0E ; 14
|
||
64a: 92 ed ldi r25, 0xD2 ; 210
|
||
64c: 0b c0 rjmp .+22 ; 0x664 <hdlc_get_data_with_state+0x220>
|
||
64e: 8e e0 ldi r24, 0x0E ; 14
|
||
650: 92 ed ldi r25, 0xD2 ; 210
|
||
652: 08 c0 rjmp .+16 ; 0x664 <hdlc_get_data_with_state+0x220>
|
||
654: 8e e0 ldi r24, 0x0E ; 14
|
||
656: 92 ed ldi r25, 0xD2 ; 210
|
||
658: 05 c0 rjmp .+10 ; 0x664 <hdlc_get_data_with_state+0x220>
|
||
65a: 8e e0 ldi r24, 0x0E ; 14
|
||
65c: 92 ed ldi r25, 0xD2 ; 210
|
||
65e: 02 c0 rjmp .+4 ; 0x664 <hdlc_get_data_with_state+0x220>
|
||
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 <hdlc_frame_data>:
|
||
}
|
||
|
||
//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 <hdlc_frame_data+0x20>
|
||
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 <hdlc_frame_data+0x2a>
|
||
6b8: 73 c0 rjmp .+230 ; 0x7a0 <hdlc_frame_data+0x110>
|
||
6ba: 61 15 cp r22, r1
|
||
6bc: 71 05 cpc r23, r1
|
||
6be: 21 f4 brne .+8 ; 0x6c8 <hdlc_frame_data+0x38>
|
||
6c0: 41 15 cp r20, r1
|
||
6c2: 51 05 cpc r21, r1
|
||
6c4: 09 f0 breq .+2 ; 0x6c8 <hdlc_frame_data+0x38>
|
||
6c6: 6f c0 rjmp .+222 ; 0x7a6 <hdlc_frame_data+0x116>
|
||
6c8: 21 15 cp r18, r1
|
||
6ca: 31 05 cpc r19, r1
|
||
6cc: 09 f4 brne .+2 ; 0x6d0 <hdlc_frame_data+0x40>
|
||
6ce: 6e c0 rjmp .+220 ; 0x7ac <hdlc_frame_data+0x11c>
|
||
6d0: 01 15 cp r16, r1
|
||
6d2: 11 05 cpc r17, r1
|
||
6d4: 09 f4 brne .+2 ; 0x6d8 <hdlc_frame_data+0x48>
|
||
6d6: 6d c0 rjmp .+218 ; 0x7b2 <hdlc_frame_data+0x122>
|
||
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 <calc_fcs>
|
||
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 <hdlc_escape_value>
|
||
|
||
// 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 <hdlc_frame_control_type>
|
||
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 <calc_fcs>
|
||
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 <hdlc_escape_value>
|
||
|
||
// 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 <hdlc_frame_data+0xd4>
|
||
// 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 <hdlc_frame_data+0xd4>
|
||
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 <calc_fcs>
|
||
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>
|
||
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_frame_data+0xae>
|
||
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 <hdlc_escape_value>
|
||
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 <hdlc_escape_value>
|
||
}
|
||
|
||
// 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 <hdlc_frame_data+0x126>
|
||
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 <hdlc_frame_data+0x126>
|
||
7a6: 8e e0 ldi r24, 0x0E ; 14
|
||
7a8: 92 ed ldi r25, 0xD2 ; 210
|
||
7aa: 05 c0 rjmp .+10 ; 0x7b6 <hdlc_frame_data+0x126>
|
||
7ac: 8e e0 ldi r24, 0x0E ; 14
|
||
7ae: 92 ed ldi r25, 0xD2 ; 210
|
||
7b0: 02 c0 rjmp .+4 ; 0x7b6 <hdlc_frame_data+0x126>
|
||
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 <lcd_read>:
|
||
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 <lcd_read+0x12>
|
||
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 <lcd_read+0x1c>
|
||
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 <pcf8574_setoutput>
|
||
80a: 62 e0 ldi r22, 0x02 ; 2
|
||
80c: 80 e0 ldi r24, 0x00 ; 0
|
||
80e: 0e 94 d6 06 call 0xdac ; 0xdac <pcf8574_setoutputpinhigh>
|
||
812: 00 c0 rjmp .+0 ; 0x814 <lcd_read+0x3a>
|
||
814: 64 e0 ldi r22, 0x04 ; 4
|
||
816: 80 e0 ldi r24, 0x00 ; 0
|
||
818: 0e 94 81 06 call 0xd02 ; 0xd02 <pcf8574_getoutputpin>
|
||
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 <pcf8574_setoutputpinlow>
|
||
826: 00 c0 rjmp .+0 ; 0x828 <lcd_read+0x4e>
|
||
828: 62 e0 ldi r22, 0x02 ; 2
|
||
82a: 80 e0 ldi r24, 0x00 ; 0
|
||
82c: 0e 94 d6 06 call 0xdac ; 0xdac <pcf8574_setoutputpinhigh>
|
||
830: 00 c0 rjmp .+0 ; 0x832 <lcd_read+0x58>
|
||
832: 64 e0 ldi r22, 0x04 ; 4
|
||
834: 80 e0 ldi r24, 0x00 ; 0
|
||
836: 0e 94 81 06 call 0xd02 ; 0xd02 <pcf8574_getoutputpin>
|
||
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 <pcf8574_setoutputpinlow>
|
||
84a: 8c 2f mov r24, r28
|
||
84c: cf 91 pop r28
|
||
84e: 08 95 ret
|
||
|
||
00000850 <lcd_waitbusy>:
|
||
850: 80 e0 ldi r24, 0x00 ; 0
|
||
852: 0e 94 ed 03 call 0x7da ; 0x7da <lcd_read>
|
||
856: 88 23 and r24, r24
|
||
858: dc f3 brlt .-10 ; 0x850 <lcd_waitbusy>
|
||
85a: 00 c0 rjmp .+0 ; 0x85c <lcd_waitbusy+0xc>
|
||
85c: 80 e0 ldi r24, 0x00 ; 0
|
||
85e: 0e 94 ed 03 call 0x7da ; 0x7da <lcd_read>
|
||
862: 08 95 ret
|
||
|
||
00000864 <toggle_e>:
|
||
864: 62 e0 ldi r22, 0x02 ; 2
|
||
866: 80 e0 ldi r24, 0x00 ; 0
|
||
868: 0e 94 d6 06 call 0xdac ; 0xdac <pcf8574_setoutputpinhigh>
|
||
86c: 00 c0 rjmp .+0 ; 0x86e <toggle_e+0xa>
|
||
86e: 62 e0 ldi r22, 0x02 ; 2
|
||
870: 80 e0 ldi r24, 0x00 ; 0
|
||
872: 0e 94 da 06 call 0xdb4 ; 0xdb4 <pcf8574_setoutputpinlow>
|
||
876: 08 95 ret
|
||
|
||
00000878 <lcd_write>:
|
||
878: cf 93 push r28
|
||
87a: c8 2f mov r28, r24
|
||
87c: 66 23 and r22, r22
|
||
87e: 31 f0 breq .+12 ; 0x88c <lcd_write+0x14>
|
||
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 <lcd_write+0x1e>
|
||
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 <pcf8574_setoutput>
|
||
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 <lcd_write+0x68>
|
||
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 <lcd_write+0x76>
|
||
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 <lcd_write+0x84>
|
||
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 <pcf8574_setoutput>
|
||
914: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e>
|
||
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 <pcf8574_setoutput>
|
||
982: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e>
|
||
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 <pcf8574_setoutput>
|
||
9b8: cf 91 pop r28
|
||
9ba: 08 95 ret
|
||
|
||
000009bc <lcd_command>:
|
||
9bc: cf 93 push r28
|
||
9be: c8 2f mov r28, r24
|
||
9c0: 0e 94 28 04 call 0x850 ; 0x850 <lcd_waitbusy>
|
||
9c4: 60 e0 ldi r22, 0x00 ; 0
|
||
9c6: 8c 2f mov r24, r28
|
||
9c8: 0e 94 3c 04 call 0x878 ; 0x878 <lcd_write>
|
||
9cc: cf 91 pop r28
|
||
9ce: 08 95 ret
|
||
|
||
000009d0 <lcd_gotoxy>:
|
||
9d0: 61 11 cpse r22, r1
|
||
9d2: 04 c0 rjmp .+8 ; 0x9dc <lcd_gotoxy+0xc>
|
||
9d4: 80 58 subi r24, 0x80 ; 128
|
||
9d6: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command>
|
||
9da: 08 95 ret
|
||
9dc: 80 54 subi r24, 0x40 ; 64
|
||
9de: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command>
|
||
9e2: 08 95 ret
|
||
|
||
000009e4 <lcd_clrscr>:
|
||
9e4: 81 e0 ldi r24, 0x01 ; 1
|
||
9e6: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command>
|
||
9ea: 08 95 ret
|
||
|
||
000009ec <lcd_led>:
|
||
9ec: 88 23 and r24, r24
|
||
9ee: 31 f0 breq .+12 ; 0x9fc <lcd_led+0x10>
|
||
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 <lcd_led+0x1a>
|
||
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 <pcf8574_setoutput>
|
||
a10: 08 95 ret
|
||
|
||
00000a12 <lcd_home>:
|
||
a12: 82 e0 ldi r24, 0x02 ; 2
|
||
a14: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command>
|
||
a18: 08 95 ret
|
||
|
||
00000a1a <lcd_putc>:
|
||
a1a: cf 93 push r28
|
||
a1c: c8 2f mov r28, r24
|
||
a1e: 0e 94 28 04 call 0x850 ; 0x850 <lcd_waitbusy>
|
||
a22: ca 30 cpi r28, 0x0A ; 10
|
||
a24: 49 f4 brne .+18 ; 0xa38 <lcd_putc+0x1e>
|
||
a26: 80 34 cpi r24, 0x40 ; 64
|
||
a28: 10 f0 brcs .+4 ; 0xa2e <lcd_putc+0x14>
|
||
a2a: 80 e0 ldi r24, 0x00 ; 0
|
||
a2c: 01 c0 rjmp .+2 ; 0xa30 <lcd_putc+0x16>
|
||
a2e: 80 e4 ldi r24, 0x40 ; 64
|
||
a30: 80 58 subi r24, 0x80 ; 128
|
||
a32: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command>
|
||
a36: 13 c0 rjmp .+38 ; 0xa5e <lcd_putc+0x44>
|
||
a38: 80 31 cpi r24, 0x10 ; 16
|
||
a3a: 29 f4 brne .+10 ; 0xa46 <lcd_putc+0x2c>
|
||
a3c: 60 e0 ldi r22, 0x00 ; 0
|
||
a3e: 80 ec ldi r24, 0xC0 ; 192
|
||
a40: 0e 94 3c 04 call 0x878 ; 0x878 <lcd_write>
|
||
a44: 06 c0 rjmp .+12 ; 0xa52 <lcd_putc+0x38>
|
||
a46: 80 35 cpi r24, 0x50 ; 80
|
||
a48: 21 f4 brne .+8 ; 0xa52 <lcd_putc+0x38>
|
||
a4a: 60 e0 ldi r22, 0x00 ; 0
|
||
a4c: 80 e8 ldi r24, 0x80 ; 128
|
||
a4e: 0e 94 3c 04 call 0x878 ; 0x878 <lcd_write>
|
||
a52: 0e 94 28 04 call 0x850 ; 0x850 <lcd_waitbusy>
|
||
a56: 61 e0 ldi r22, 0x01 ; 1
|
||
a58: 8c 2f mov r24, r28
|
||
a5a: 0e 94 3c 04 call 0x878 ; 0x878 <lcd_write>
|
||
a5e: cf 91 pop r28
|
||
a60: 08 95 ret
|
||
|
||
00000a62 <lcd_puts>:
|
||
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 <lcd_puts+0x1a>
|
||
a72: 0e 94 0d 05 call 0xa1a ; 0xa1a <lcd_putc>
|
||
a76: 89 91 ld r24, Y+
|
||
a78: 81 11 cpse r24, r1
|
||
a7a: fb cf rjmp .-10 ; 0xa72 <lcd_puts+0x10>
|
||
a7c: df 91 pop r29
|
||
a7e: cf 91 pop r28
|
||
a80: 08 95 ret
|
||
|
||
00000a82 <lcd_init>:
|
||
|
||
// инициализация дисплея
|
||
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 <pcf8574_init>
|
||
#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 <pcf8574_setoutput>
|
||
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 <lcd_init+0x1e>
|
||
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 <pcf8574_setoutput>
|
||
|
||
// дрючим дисплей чтобы он начал работать
|
||
lcd_e_toggle();
|
||
ac2: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e>
|
||
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 <lcd_init+0x48>
|
||
pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport);
|
||
|
||
// дрючим дисплей чтобы он начал работать
|
||
lcd_e_toggle();
|
||
delay(4992);
|
||
lcd_e_toggle();
|
||
ace: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e>
|
||
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_init+0x56>
|
||
// дрючим дисплей чтобы он начал работать
|
||
lcd_e_toggle();
|
||
delay(4992);
|
||
lcd_e_toggle();
|
||
delay(64);
|
||
lcd_e_toggle();
|
||
adc: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e>
|
||
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 <lcd_init+0x60>
|
||
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 <pcf8574_setoutput>
|
||
lcd_e_toggle();
|
||
afa: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e>
|
||
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 <lcd_init+0x7c>
|
||
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_command(LCD_DISP_OFF); // вырубаем дисплей
|
||
b08: 88 e0 ldi r24, 0x08 ; 8
|
||
b0a: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command>
|
||
lcd_clrscr(); // чистим экран
|
||
b0e: 0e 94 f2 04 call 0x9e4 ; 0x9e4 <lcd_clrscr>
|
||
lcd_command(LCD_MODE_DEFAULT); // запускаемся в стандартном режиме
|
||
b12: 86 e0 ldi r24, 0x06 ; 6
|
||
b14: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command>
|
||
lcd_command(dispAttr); // отправляем настройки
|
||
b18: 81 2f mov r24, r17
|
||
b1a: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command>
|
||
}
|
||
b1e: df 91 pop r29
|
||
b20: cf 91 pop r28
|
||
b22: 1f 91 pop r17
|
||
b24: 08 95 ret
|
||
|
||
00000b26 <Lcd_inciliation>:
|
||
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_init>
|
||
lcd_home(); // домой курсор
|
||
b2c: 0e 94 09 05 call 0xa12 ; 0xa12 <lcd_home>
|
||
lcd_led(0); // вкл подсветки
|
||
b30: 80 e0 ldi r24, 0x00 ; 0
|
||
b32: 0e 94 f6 04 call 0x9ec ; 0x9ec <lcd_led>
|
||
b36: 08 95 ret
|
||
|
||
00000b38 <fillBuffer1>:
|
||
//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 <fillBuffer1+0x18>
|
||
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 <fillBuffer1+0x3c>
|
||
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 <fillBuffer1+0x3a>
|
||
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 <fillBuffer2>:
|
||
|
||
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 <snprintf>
|
||
}
|
||
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 <printLcd>:
|
||
|
||
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 <textCounter+0x4>
|
||
c40: 30 91 4a 03 lds r19, 0x034A ; 0x80034a <textCounter+0x5>
|
||
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 <fillBuffer1>
|
||
|
||
// Заполнение буфера 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 <fillBuffer2>
|
||
|
||
// Создание массива для вывода на дисплей
|
||
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>
|
||
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 <strncpy>
|
||
|
||
// Вывод данных на экран
|
||
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_gotoxy>
|
||
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_puts>
|
||
|
||
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_gotoxy>
|
||
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 <lcd_puts>
|
||
}
|
||
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 <pcf8574_init>:
|
||
i2c_write(b);
|
||
i2c_stop();
|
||
return 0;
|
||
}
|
||
return -1;
|
||
}
|
||
cf0: 0e 94 de 06 call 0xdbc ; 0xdbc <i2c_init>
|
||
cf4: 83 e0 ldi r24, 0x03 ; 3
|
||
cf6: 8a 95 dec r24
|
||
cf8: f1 f7 brne .-4 ; 0xcf6 <pcf8574_init+0x6>
|
||
cfa: 00 00 nop
|
||
cfc: 10 92 4b 03 sts 0x034B, r1 ; 0x80034b <pcf8574_pinstatus>
|
||
d00: 08 95 ret
|
||
|
||
00000d02 <pcf8574_getoutputpin>:
|
||
d02: 81 11 cpse r24, r1
|
||
d04: 0e c0 rjmp .+28 ; 0xd22 <pcf8574_getoutputpin+0x20>
|
||
d06: 68 30 cpi r22, 0x08 ; 8
|
||
d08: 70 f4 brcc .+28 ; 0xd26 <pcf8574_getoutputpin+0x24>
|
||
d0a: 80 91 4b 03 lds r24, 0x034B ; 0x80034b <pcf8574_pinstatus>
|
||
d0e: 08 2e mov r0, r24
|
||
d10: 00 0c add r0, r0
|
||
d12: 99 0b sbc r25, r25
|
||
d14: 02 c0 rjmp .+4 ; 0xd1a <pcf8574_getoutputpin+0x18>
|
||
d16: 95 95 asr r25
|
||
d18: 87 95 ror r24
|
||
d1a: 6a 95 dec r22
|
||
d1c: e2 f7 brpl .-8 ; 0xd16 <pcf8574_getoutputpin+0x14>
|
||
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 <pcf8574_setoutput>:
|
||
d2a: cf 93 push r28
|
||
d2c: 81 11 cpse r24, r1
|
||
d2e: 0d c0 rjmp .+26 ; 0xd4a <pcf8574_setoutput+0x20>
|
||
d30: c6 2f mov r28, r22
|
||
d32: 60 93 4b 03 sts 0x034B, r22 ; 0x80034b <pcf8574_pinstatus>
|
||
d36: 8e e4 ldi r24, 0x4E ; 78
|
||
d38: 0e 94 e4 06 call 0xdc8 ; 0xdc8 <i2c_start>
|
||
d3c: 8c 2f mov r24, r28
|
||
d3e: 0e 94 14 07 call 0xe28 ; 0xe28 <i2c_write>
|
||
d42: 0e 94 0b 07 call 0xe16 ; 0xe16 <i2c_stop>
|
||
d46: 80 e0 ldi r24, 0x00 ; 0
|
||
d48: 01 c0 rjmp .+2 ; 0xd4c <pcf8574_setoutput+0x22>
|
||
d4a: 8f ef ldi r24, 0xFF ; 255
|
||
d4c: cf 91 pop r28
|
||
d4e: 08 95 ret
|
||
|
||
00000d50 <pcf8574_setoutputpin>:
|
||
|
||
// настройка пинов вывода
|
||
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 <pcf8574_setoutputpin+0x50>
|
||
d58: 68 30 cpi r22, 0x08 ; 8
|
||
d5a: 20 f5 brcc .+72 ; 0xda4 <pcf8574_setoutputpin+0x54>
|
||
uint8_t b = 0;
|
||
b = pcf8574_pinstatus[deviceid];
|
||
d5c: 80 91 4b 03 lds r24, 0x034B ; 0x80034b <pcf8574_pinstatus>
|
||
b = (data != 0) ? (b | (1 << pin)) : (b & ~(1 << pin));
|
||
d60: 44 23 and r20, r20
|
||
d62: 49 f0 breq .+18 ; 0xd76 <pcf8574_setoutputpin+0x26>
|
||
d64: c1 e0 ldi r28, 0x01 ; 1
|
||
d66: d0 e0 ldi r29, 0x00 ; 0
|
||
d68: 02 c0 rjmp .+4 ; 0xd6e <pcf8574_setoutputpin+0x1e>
|
||
d6a: cc 0f add r28, r28
|
||
d6c: dd 1f adc r29, r29
|
||
d6e: 6a 95 dec r22
|
||
d70: e2 f7 brpl .-8 ; 0xd6a <pcf8574_setoutputpin+0x1a>
|
||
d72: c8 2b or r28, r24
|
||
d74: 09 c0 rjmp .+18 ; 0xd88 <pcf8574_setoutputpin+0x38>
|
||
d76: c1 e0 ldi r28, 0x01 ; 1
|
||
d78: d0 e0 ldi r29, 0x00 ; 0
|
||
d7a: 02 c0 rjmp .+4 ; 0xd80 <pcf8574_setoutputpin+0x30>
|
||
d7c: cc 0f add r28, r28
|
||
d7e: dd 1f adc r29, r29
|
||
d80: 6a 95 dec r22
|
||
d82: e2 f7 brpl .-8 ; 0xd7c <pcf8574_setoutputpin+0x2c>
|
||
d84: c0 95 com r28
|
||
d86: c8 23 and r28, r24
|
||
pcf8574_pinstatus[deviceid] = b;
|
||
d88: c0 93 4b 03 sts 0x034B, r28 ; 0x80034b <pcf8574_pinstatus>
|
||
//рестартим
|
||
i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_WRITE);
|
||
d8c: 8e e4 ldi r24, 0x4E ; 78
|
||
d8e: 0e 94 e4 06 call 0xdc8 ; 0xdc8 <i2c_start>
|
||
i2c_write(b);
|
||
d92: 8c 2f mov r24, r28
|
||
d94: 0e 94 14 07 call 0xe28 ; 0xe28 <i2c_write>
|
||
i2c_stop();
|
||
d98: 0e 94 0b 07 call 0xe16 ; 0xe16 <i2c_stop>
|
||
return 0;
|
||
d9c: 80 e0 ldi r24, 0x00 ; 0
|
||
d9e: 03 c0 rjmp .+6 ; 0xda6 <pcf8574_setoutputpin+0x56>
|
||
}
|
||
return -1;
|
||
da0: 8f ef ldi r24, 0xFF ; 255
|
||
da2: 01 c0 rjmp .+2 ; 0xda6 <pcf8574_setoutputpin+0x56>
|
||
da4: 8f ef ldi r24, 0xFF ; 255
|
||
}
|
||
da6: df 91 pop r29
|
||
da8: cf 91 pop r28
|
||
daa: 08 95 ret
|
||
|
||
00000dac <pcf8574_setoutputpinhigh>:
|
||
|
||
// установка высокого уровня на выходных пинах
|
||
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 <pcf8574_setoutputpin>
|
||
}
|
||
db2: 08 95 ret
|
||
|
||
00000db4 <pcf8574_setoutputpinlow>:
|
||
|
||
// установка низкого уровня на выходных пинах
|
||
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 <pcf8574_setoutputpin>
|
||
}
|
||
dba: 08 95 ret
|
||
|
||
00000dbc <i2c_init>:
|
||
|
||
// тупа повторяем условие СТАРТ
|
||
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 <i2c_start>:
|
||
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 <i2c_start+0xa>
|
||
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 <i2c_start+0x1e>
|
||
de2: 90 31 cpi r25, 0x10 ; 16
|
||
de4: a1 f4 brne .+40 ; 0xe0e <i2c_start+0x46>
|
||
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 <i2c_start+0x2c>
|
||
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 <i2c_start+0x4a>
|
||
e04: 81 e0 ldi r24, 0x01 ; 1
|
||
e06: 90 34 cpi r25, 0x40 ; 64
|
||
e08: 29 f4 brne .+10 ; 0xe14 <i2c_start+0x4c>
|
||
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 <i2c_stop>:
|
||
|
||
// передача условия СТОП на шину
|
||
void i2c_stop(void)
|
||
{
|
||
// отправка условия СТОП
|
||
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
|
||
e16: 84 e9 ldi r24, 0x94 ; 148
|
||
e18: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__DATA_REGION_ORIGIN__+0x5c>
|
||
// ждем выполнения условия остановки
|
||
while(TWCR & (1<<TWSTO));
|
||
e1c: ec eb ldi r30, 0xBC ; 188
|
||
e1e: f0 e0 ldi r31, 0x00 ; 0
|
||
e20: 80 81 ld r24, Z
|
||
e22: 84 fd sbrc r24, 4
|
||
e24: fd cf rjmp .-6 ; 0xe20 <i2c_stop+0xa>
|
||
}
|
||
e26: 08 95 ret
|
||
|
||
00000e28 <i2c_write>:
|
||
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<<TWINT) | (1<<TWEN);
|
||
e2c: 84 e8 ldi r24, 0x84 ; 132
|
||
e2e: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__DATA_REGION_ORIGIN__+0x5c>
|
||
// ждем завершения передачи
|
||
while(!(TWCR & (1<<TWINT)));
|
||
e32: ec eb ldi r30, 0xBC ; 188
|
||
e34: f0 e0 ldi r31, 0x00 ; 0
|
||
e36: 80 81 ld r24, Z
|
||
e38: 88 23 and r24, r24
|
||
e3a: ec f7 brge .-6 ; 0xe36 <i2c_write+0xe>
|
||
// записываем ответ от ведомого уст-ва
|
||
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 <i2c_write+0x22>
|
||
e48: 80 e0 ldi r24, 0x00 ; 0
|
||
if( twst != TW_MT_DATA_ACK) return 1;
|
||
return 0;
|
||
}
|
||
e4a: 08 95 ret
|
||
|
||
00000e4c <main>:
|
||
#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 <Lcd_inciliation>
|
||
UART_init();
|
||
e82: 0e 94 9e 0a call 0x153c ; 0x153c <UART_init>
|
||
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 <init_hdlc_client>
|
||
// 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 <hdlc_connect>
|
||
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 <hdlc_get_raw_frame>
|
||
|
||
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 <UART_send>
|
||
|
||
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 <UART_receive>
|
||
|
||
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 <hdlc_timeout_handler>
|
||
if (err == ERR_FRAME_TIME_OUT){
|
||
ed2: 05 96 adiw r24, 0x05 ; 5
|
||
ed4: 81 f4 brne .+32 ; 0xef6 <main+0xaa>
|
||
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 <hdlc_get_raw_frame>
|
||
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 <UART_send>
|
||
ef4: e1 cf rjmp .-62 ; 0xeb8 <main+0x6c>
|
||
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 <hdlc_decode_recived_raw_data>
|
||
f10: 8c 01 movw r16, r24
|
||
if (err < 0){
|
||
f12: 99 23 and r25, r25
|
||
f14: ac f4 brge .+42 ; 0xf40 <main+0xf4>
|
||
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 <main+0xfe>
|
||
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 <hdlc_get_raw_frame>
|
||
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 <UART_send>
|
||
f3e: 05 c0 rjmp .+10 ; 0xf4a <main+0xfe>
|
||
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 <main+0xfc>
|
||
f46: b8 cf rjmp .-144 ; 0xeb8 <main+0x6c>
|
||
f48: 03 c0 rjmp .+6 ; 0xf50 <main+0x104>
|
||
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 <main+0x300>
|
||
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 <protocol_encode>
|
||
|
||
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 <hdlc_send_data>
|
||
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 <hdlc_get_raw_frame>
|
||
|
||
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 <UART_send>
|
||
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 <UART_receive>
|
||
|
||
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 <hdlc_timeout_handler>
|
||
if (err == ERR_FRAME_TIME_OUT){
|
||
102a: 05 96 adiw r24, 0x05 ; 5
|
||
102c: 89 f4 brne .+34 ; 0x1050 <main+0x204>
|
||
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 <hdlc_get_raw_frame>
|
||
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 <UART_send>
|
||
104e: e0 cf rjmp .-64 ; 0x1010 <main+0x1c4>
|
||
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 <hdlc_decode_recived_raw_data>
|
||
106c: 8c 01 movw r16, r24
|
||
if (err < 0){
|
||
106e: 99 23 and r25, r25
|
||
1070: 9c f4 brge .+38 ; 0x1098 <main+0x24c>
|
||
if (err == ERR_INVALID_SEQ_NUMBER_FRAME){
|
||
1072: 06 96 adiw r24, 0x06 ; 6
|
||
1074: b1 f4 brne .+44 ; 0x10a2 <main+0x256>
|
||
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 <hdlc_get_raw_frame>
|
||
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 <UART_send>
|
||
1096: 05 c0 rjmp .+10 ; 0x10a2 <main+0x256>
|
||
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 <main+0x254>
|
||
109e: b8 cf rjmp .-144 ; 0x1010 <main+0x1c4>
|
||
10a0: 03 c0 rjmp .+6 ; 0x10a8 <main+0x25c>
|
||
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 <main+0x300>
|
||
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 <protocol_decode>
|
||
|
||
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 <strncpy>
|
||
|
||
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 <printLcd>
|
||
|
||
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 <protocol_decode>:
|
||
#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 <protocol_decode+0x32>
|
||
11ac: 6c c0 rjmp .+216 ; 0x1286 <protocol_decode+0x10a>
|
||
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 <protocol_decode+0xa6>
|
||
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 <protocol_decode+0x64>
|
||
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 <protocol_decode+0xfa>
|
||
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 <protocol_decode+0xea>
|
||
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 <protocol_decode+0xd2>
|
||
1264: 01 c0 rjmp .+2 ; 0x1268 <protocol_decode+0xec>
|
||
}
|
||
|
||
|
||
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 <protocol_decode+0x108>
|
||
1282: a2 cf rjmp .-188 ; 0x11c8 <protocol_decode+0x4c>
|
||
1284: 02 c0 rjmp .+4 ; 0x128a <protocol_decode+0x10e>
|
||
#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 <protocol_encode>:
|
||
|
||
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 <protocol_encode+0xbe>
|
||
1374: 66 c0 rjmp .+204 ; 0x1442 <protocol_encode+0x18a>
|
||
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 <protocol_encode+0xf6>
|
||
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 <protocol_encode+0xda>
|
||
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 <protocol_encode+0x162>
|
||
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 <protocol_encode+0x152>
|
||
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 <protocol_encode+0x196>
|
||
}
|
||
}
|
||
}
|
||
|
||
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 <protocol_encode+0x144>
|
||
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 <protocol_encode+0x170>
|
||
}
|
||
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 <protocol_encode+0x162>
|
||
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 <buffer_empty>:
|
||
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 <buffer_empty+0x12>
|
||
148c: 80 e0 ldi r24, 0x00 ; 0
|
||
148e: 90 e0 ldi r25, 0x00 ; 0
|
||
}
|
||
1490: 08 95 ret
|
||
|
||
00001492 <buffer_full>:
|
||
// Проверка, заполнен ли буфер
|
||
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 <buffer_full+0x1e>
|
||
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 <buffer_full+0x32>
|
||
14c0: 80 e0 ldi r24, 0x00 ; 0
|
||
14c2: 90 e0 ldi r25, 0x00 ; 0
|
||
}
|
||
14c4: 08 95 ret
|
||
|
||
000014c6 <write_buffer>:
|
||
// Запись в буфер
|
||
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 <buffer_full>
|
||
14d4: 89 2b or r24, r25
|
||
14d6: 81 f4 brne .+32 ; 0x14f8 <write_buffer+0x32>
|
||
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 <write_buffer+0x30>
|
||
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 <read_buffer>:
|
||
// Чтение элемента
|
||
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 <read_buffer+0x36>
|
||
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 <read_buffer+0x2e>
|
||
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 <UART_init>:
|
||
|
||
struct circular_buffer uartRxBuffer;
|
||
struct circular_buffer uartTxBuffer;
|
||
|
||
void UART_init(void) {
|
||
UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0) | (1<<TXCIE0) | (1 << UDRIE0); // прерывание по приему и передаче
|
||
153c: 88 ef ldi r24, 0xF8 ; 248
|
||
153e: 80 93 c1 00 sts 0x00C1, r24 ; 0x8000c1 <__DATA_REGION_ORIGIN__+0x61>
|
||
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 <UART_send>:
|
||
}
|
||
|
||
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 <UART_send+0x34>
|
||
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 <buffer_full>
|
||
1572: 89 2b or r24, r25
|
||
1574: 49 f4 brne .+18 ; 0x1588 <UART_send+0x34>
|
||
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 <write_buffer>
|
||
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 <UART_send+0x16>
|
||
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 <UART_receive>:
|
||
|
||
// Получение данных из буфера
|
||
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 <UART_receive+0x3e>
|
||
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 <read_buffer>
|
||
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 <buffer_empty>
|
||
15e2: 89 2b or r24, r25
|
||
15e4: 29 f4 brne .+10 ; 0x15f0 <UART_receive+0x54>
|
||
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 <UART_receive+0x2a>
|
||
}
|
||
// Проверка переполнения
|
||
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 <UART_receive+0x66>
|
||
15fe: c6 01 movw r24, r12
|
||
1600: 02 c0 rjmp .+4 ; 0x1606 <UART_receive+0x6a>
|
||
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 <buffer_full>
|
||
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 <write_buffer>
|
||
}
|
||
}
|
||
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 <buffer_empty>
|
||
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 <read_buffer>
|
||
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 <strncpy>:
|
||
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 <strncpy+0x1c>
|
||
171e: 01 90 ld r0, Z+
|
||
1720: 0d 92 st X+, r0
|
||
1722: 00 20 and r0, r0
|
||
1724: c9 f7 brne .-14 ; 0x1718 <strncpy+0x4>
|
||
1726: 01 c0 rjmp .+2 ; 0x172a <strncpy+0x16>
|
||
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 <strncpy+0x14>
|
||
1730: 08 95 ret
|
||
|
||
00001732 <printf>:
|
||
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 <vfprintf>
|
||
1758: e2 e0 ldi r30, 0x02 ; 2
|
||
175a: 0c 94 9c 0e jmp 0x1d38 ; 0x1d38 <__epilogue_restores__+0x20>
|
||
|
||
0000175e <snprintf>:
|
||
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 <snprintf+0x24>
|
||
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 <vfprintf>
|
||
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 <snprintf+0x58>
|
||
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 <snprintf+0x50>
|
||
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 <vfprintf>:
|
||
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 <vfprintf+0x3b6>
|
||
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 <vfprintf+0x3a>
|
||
17f6: ba c1 rjmp .+884 ; 0x1b6c <vfprintf+0x3ae>
|
||
17f8: 85 32 cpi r24, 0x25 ; 37
|
||
17fa: 39 f4 brne .+14 ; 0x180a <vfprintf+0x4c>
|
||
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 <vfprintf+0x56>
|
||
180a: b6 01 movw r22, r12
|
||
180c: 90 e0 ldi r25, 0x00 ; 0
|
||
180e: 0e 94 d6 0d call 0x1bac ; 0x1bac <fputc>
|
||
1812: e7 cf rjmp .-50 ; 0x17e2 <vfprintf+0x24>
|
||
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 <vfprintf+0x98>
|
||
1820: 8b 32 cpi r24, 0x2B ; 43
|
||
1822: 79 f0 breq .+30 ; 0x1842 <vfprintf+0x84>
|
||
1824: 38 f4 brcc .+14 ; 0x1834 <vfprintf+0x76>
|
||
1826: 80 32 cpi r24, 0x20 ; 32
|
||
1828: 79 f0 breq .+30 ; 0x1848 <vfprintf+0x8a>
|
||
182a: 83 32 cpi r24, 0x23 ; 35
|
||
182c: a1 f4 brne .+40 ; 0x1856 <vfprintf+0x98>
|
||
182e: 23 2d mov r18, r3
|
||
1830: 20 61 ori r18, 0x10 ; 16
|
||
1832: 1d c0 rjmp .+58 ; 0x186e <vfprintf+0xb0>
|
||
1834: 8d 32 cpi r24, 0x2D ; 45
|
||
1836: 61 f0 breq .+24 ; 0x1850 <vfprintf+0x92>
|
||
1838: 80 33 cpi r24, 0x30 ; 48
|
||
183a: 69 f4 brne .+26 ; 0x1856 <vfprintf+0x98>
|
||
183c: 23 2d mov r18, r3
|
||
183e: 21 60 ori r18, 0x01 ; 1
|
||
1840: 16 c0 rjmp .+44 ; 0x186e <vfprintf+0xb0>
|
||
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 <vfprintf+0xe6>
|
||
1850: f3 2d mov r31, r3
|
||
1852: f8 60 ori r31, 0x08 ; 8
|
||
1854: 1d c0 rjmp .+58 ; 0x1890 <vfprintf+0xd2>
|
||
1856: 37 fc sbrc r3, 7
|
||
1858: 2d c0 rjmp .+90 ; 0x18b4 <vfprintf+0xf6>
|
||
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 <vfprintf+0xb4>
|
||
1862: 8e 32 cpi r24, 0x2E ; 46
|
||
1864: b9 f4 brne .+46 ; 0x1894 <vfprintf+0xd6>
|
||
1866: 36 fc sbrc r3, 6
|
||
1868: 81 c1 rjmp .+770 ; 0x1b6c <vfprintf+0x3ae>
|
||
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 <vfprintf+0xe6>
|
||
1872: 36 fe sbrs r3, 6
|
||
1874: 06 c0 rjmp .+12 ; 0x1882 <vfprintf+0xc4>
|
||
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 <vfprintf+0xe6>
|
||
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 <vfprintf+0xe6>
|
||
1894: 8c 36 cpi r24, 0x6C ; 108
|
||
1896: 21 f4 brne .+8 ; 0x18a0 <vfprintf+0xe2>
|
||
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 <vfprintf+0xe6>
|
||
18a0: 88 36 cpi r24, 0x68 ; 104
|
||
18a2: 41 f4 brne .+16 ; 0x18b4 <vfprintf+0xf6>
|
||
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 <vfprintf+0x5c>
|
||
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 <vfprintf+0x10a>
|
||
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 <vfprintf+0x124>
|
||
18c8: 83 36 cpi r24, 0x63 ; 99
|
||
18ca: 31 f0 breq .+12 ; 0x18d8 <vfprintf+0x11a>
|
||
18cc: 83 37 cpi r24, 0x73 ; 115
|
||
18ce: 71 f0 breq .+28 ; 0x18ec <vfprintf+0x12e>
|
||
18d0: 83 35 cpi r24, 0x53 ; 83
|
||
18d2: 09 f0 breq .+2 ; 0x18d6 <vfprintf+0x118>
|
||
18d4: 59 c0 rjmp .+178 ; 0x1988 <vfprintf+0x1ca>
|
||
18d6: 21 c0 rjmp .+66 ; 0x191a <vfprintf+0x15c>
|
||
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 <vfprintf+0x154>
|
||
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 <vfprintf+0x146>
|
||
18fe: 69 2d mov r22, r9
|
||
1900: 70 e0 ldi r23, 0x00 ; 0
|
||
1902: 02 c0 rjmp .+4 ; 0x1908 <vfprintf+0x14a>
|
||
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 <strnlen>
|
||
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 <vfprintf+0x188>
|
||
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 <vfprintf+0x174>
|
||
192c: 69 2d mov r22, r9
|
||
192e: 70 e0 ldi r23, 0x00 ; 0
|
||
1930: 02 c0 rjmp .+4 ; 0x1936 <vfprintf+0x178>
|
||
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 <strnlen_P>
|
||
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 <vfprintf+0x1c2>
|
||
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 <vfprintf+0x1c2>
|
||
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 <fputc>
|
||
195e: 2a 94 dec r2
|
||
1960: f4 cf rjmp .-24 ; 0x194a <vfprintf+0x18c>
|
||
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 <fputc>
|
||
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 <vfprintf+0x1a4>
|
||
1986: e8 c0 rjmp .+464 ; 0x1b58 <vfprintf+0x39a>
|
||
1988: 84 36 cpi r24, 0x64 ; 100
|
||
198a: 11 f0 breq .+4 ; 0x1990 <vfprintf+0x1d2>
|
||
198c: 89 36 cpi r24, 0x69 ; 105
|
||
198e: 41 f5 brne .+80 ; 0x19e0 <vfprintf+0x222>
|
||
1990: f8 01 movw r30, r16
|
||
1992: 37 fe sbrs r3, 7
|
||
1994: 07 c0 rjmp .+14 ; 0x19a4 <vfprintf+0x1e6>
|
||
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 <vfprintf+0x1f6>
|
||
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 <vfprintf+0x212>
|
||
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 <vfprintf+0x2ac>
|
||
19e0: 85 37 cpi r24, 0x75 ; 117
|
||
19e2: 31 f4 brne .+12 ; 0x19f0 <vfprintf+0x232>
|
||
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 <vfprintf+0x27c>
|
||
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 <vfprintf+0x26c>
|
||
19fa: 18 f4 brcc .+6 ; 0x1a02 <vfprintf+0x244>
|
||
19fc: 88 35 cpi r24, 0x58 ; 88
|
||
19fe: 79 f0 breq .+30 ; 0x1a1e <vfprintf+0x260>
|
||
1a00: b5 c0 rjmp .+362 ; 0x1b6c <vfprintf+0x3ae>
|
||
1a02: 80 37 cpi r24, 0x70 ; 112
|
||
1a04: 19 f0 breq .+6 ; 0x1a0c <vfprintf+0x24e>
|
||
1a06: 88 37 cpi r24, 0x78 ; 120
|
||
1a08: 21 f0 breq .+8 ; 0x1a12 <vfprintf+0x254>
|
||
1a0a: b0 c0 rjmp .+352 ; 0x1b6c <vfprintf+0x3ae>
|
||
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 <vfprintf+0x272>
|
||
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 <vfprintf+0x272>
|
||
1a1e: 34 fe sbrs r3, 4
|
||
1a20: 0a c0 rjmp .+20 ; 0x1a36 <vfprintf+0x278>
|
||
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 <vfprintf+0x278>
|
||
1a2a: 28 e0 ldi r18, 0x08 ; 8
|
||
1a2c: 30 e0 ldi r19, 0x00 ; 0
|
||
1a2e: 05 c0 rjmp .+10 ; 0x1a3a <vfprintf+0x27c>
|
||
1a30: 20 e1 ldi r18, 0x10 ; 16
|
||
1a32: 30 e0 ldi r19, 0x00 ; 0
|
||
1a34: 02 c0 rjmp .+4 ; 0x1a3a <vfprintf+0x27c>
|
||
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 <vfprintf+0x290>
|
||
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 <vfprintf+0x29c>
|
||
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 <vfprintf+0x2ca>
|
||
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 <vfprintf+0x2d0>
|
||
1a78: 34 fe sbrs r3, 4
|
||
1a7a: 0b c0 rjmp .+22 ; 0x1a92 <vfprintf+0x2d4>
|
||
1a7c: 32 fc sbrc r3, 2
|
||
1a7e: 09 c0 rjmp .+18 ; 0x1a92 <vfprintf+0x2d4>
|
||
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 <vfprintf+0x2d4>
|
||
1a88: b8 2c mov r11, r8
|
||
1a8a: a3 2c mov r10, r3
|
||
1a8c: 03 c0 rjmp .+6 ; 0x1a94 <vfprintf+0x2d6>
|
||
1a8e: b8 2c mov r11, r8
|
||
1a90: 01 c0 rjmp .+2 ; 0x1a94 <vfprintf+0x2d6>
|
||
1a92: b9 2c mov r11, r9
|
||
1a94: a4 fe sbrs r10, 4
|
||
1a96: 0f c0 rjmp .+30 ; 0x1ab6 <vfprintf+0x2f8>
|
||
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 <vfprintf+0x2ee>
|
||
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 <vfprintf+0x300>
|
||
1aac: a2 fe sbrs r10, 2
|
||
1aae: 06 c0 rjmp .+12 ; 0x1abc <vfprintf+0x2fe>
|
||
1ab0: b3 94 inc r11
|
||
1ab2: b3 94 inc r11
|
||
1ab4: 04 c0 rjmp .+8 ; 0x1abe <vfprintf+0x300>
|
||
1ab6: 8a 2d mov r24, r10
|
||
1ab8: 86 78 andi r24, 0x86 ; 134
|
||
1aba: 09 f0 breq .+2 ; 0x1abe <vfprintf+0x300>
|
||
1abc: b3 94 inc r11
|
||
1abe: a3 fc sbrc r10, 3
|
||
1ac0: 11 c0 rjmp .+34 ; 0x1ae4 <vfprintf+0x326>
|
||
1ac2: a0 fe sbrs r10, 0
|
||
1ac4: 06 c0 rjmp .+12 ; 0x1ad2 <vfprintf+0x314>
|
||
1ac6: b2 14 cp r11, r2
|
||
1ac8: 88 f4 brcc .+34 ; 0x1aec <vfprintf+0x32e>
|
||
1aca: 28 0c add r2, r8
|
||
1acc: 92 2c mov r9, r2
|
||
1ace: 9b 18 sub r9, r11
|
||
1ad0: 0e c0 rjmp .+28 ; 0x1aee <vfprintf+0x330>
|
||
1ad2: b2 14 cp r11, r2
|
||
1ad4: 60 f4 brcc .+24 ; 0x1aee <vfprintf+0x330>
|
||
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 <fputc>
|
||
1ae0: b3 94 inc r11
|
||
1ae2: f7 cf rjmp .-18 ; 0x1ad2 <vfprintf+0x314>
|
||
1ae4: b2 14 cp r11, r2
|
||
1ae6: 18 f4 brcc .+6 ; 0x1aee <vfprintf+0x330>
|
||
1ae8: 2b 18 sub r2, r11
|
||
1aea: 02 c0 rjmp .+4 ; 0x1af0 <vfprintf+0x332>
|
||
1aec: 98 2c mov r9, r8
|
||
1aee: 21 2c mov r2, r1
|
||
1af0: a4 fe sbrs r10, 4
|
||
1af2: 10 c0 rjmp .+32 ; 0x1b14 <vfprintf+0x356>
|
||
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 <fputc>
|
||
1afe: a2 fe sbrs r10, 2
|
||
1b00: 17 c0 rjmp .+46 ; 0x1b30 <vfprintf+0x372>
|
||
1b02: a1 fc sbrc r10, 1
|
||
1b04: 03 c0 rjmp .+6 ; 0x1b0c <vfprintf+0x34e>
|
||
1b06: 88 e7 ldi r24, 0x78 ; 120
|
||
1b08: 90 e0 ldi r25, 0x00 ; 0
|
||
1b0a: 02 c0 rjmp .+4 ; 0x1b10 <vfprintf+0x352>
|
||
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 <vfprintf+0x36e>
|
||
1b14: 8a 2d mov r24, r10
|
||
1b16: 86 78 andi r24, 0x86 ; 134
|
||
1b18: 59 f0 breq .+22 ; 0x1b30 <vfprintf+0x372>
|
||
1b1a: a1 fe sbrs r10, 1
|
||
1b1c: 02 c0 rjmp .+4 ; 0x1b22 <vfprintf+0x364>
|
||
1b1e: 8b e2 ldi r24, 0x2B ; 43
|
||
1b20: 01 c0 rjmp .+2 ; 0x1b24 <vfprintf+0x366>
|
||
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 <fputc>
|
||
1b30: 89 14 cp r8, r9
|
||
1b32: 38 f4 brcc .+14 ; 0x1b42 <vfprintf+0x384>
|
||
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 <fputc>
|
||
1b3e: 9a 94 dec r9
|
||
1b40: f7 cf rjmp .-18 ; 0x1b30 <vfprintf+0x372>
|
||
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 <fputc>
|
||
1b54: 81 10 cpse r8, r1
|
||
1b56: f5 cf rjmp .-22 ; 0x1b42 <vfprintf+0x384>
|
||
1b58: 22 20 and r2, r2
|
||
1b5a: 09 f4 brne .+2 ; 0x1b5e <vfprintf+0x3a0>
|
||
1b5c: 42 ce rjmp .-892 ; 0x17e2 <vfprintf+0x24>
|
||
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 <fputc>
|
||
1b68: 2a 94 dec r2
|
||
1b6a: f6 cf rjmp .-20 ; 0x1b58 <vfprintf+0x39a>
|
||
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 <vfprintf+0x3ba>
|
||
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 <strnlen_P>:
|
||
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 <strnlen_P+0x2>
|
||
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 <strnlen>:
|
||
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 <strnlen+0x2>
|
||
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 <fputc>:
|
||
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 <fputc+0x16>
|
||
1bbc: 8f ef ldi r24, 0xFF ; 255
|
||
1bbe: 9f ef ldi r25, 0xFF ; 255
|
||
1bc0: 2c c0 rjmp .+88 ; 0x1c1a <fputc+0x6e>
|
||
1bc2: 22 ff sbrs r18, 2
|
||
1bc4: 16 c0 rjmp .+44 ; 0x1bf2 <fputc+0x46>
|
||
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 <fputc+0x38>
|
||
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 <fputc+0x6e>
|
||
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 <fputc+0x10>
|
||
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>
|